diff --git a/CHANGELOG.md b/CHANGELOG.md index a8bbb759b..93482224f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# v4.0.0-rc1 + +- Improved the Schema Table update engine (more). +- Fix autoloader timing, and loading. +- Implement the Joomla Powers in JCB code, to move away from JClasses. + # v4.0.0-beta5 - Fix the media field size limitation. #1109 diff --git a/ComponentbuilderInstallerScript.php b/ComponentbuilderInstallerScript.php index 27a2c3a12..37ef51bef 100644 --- a/ComponentbuilderInstallerScript.php +++ b/ComponentbuilderInstallerScript.php @@ -503,6 +503,9 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // Remove Joomla_plugin_files_folders_urls from action logs config table. $this->removeActionLogConfig('com_componentbuilder.joomla_plugin_files_folders_urls'); + + // Remove Joomla_component from action logs config table. + $this->removeActionLogConfig('com_componentbuilder.joomla_component'); // little notice as after service, in case of bad experience with component. echo '

Did something go wrong? Are you disappointed?

@@ -1493,7 +1496,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // Fix the assets table rules column size. - $this->setDatabaseAssetsRulesFix(101600, "MEDIUMTEXT"); + $this->setDatabaseAssetsRulesFix(93920, "MEDIUMTEXT"); // Install the global extension params. $this->setExtensionsParams( '{"autorName":"Llewellyn van der Merwe","autorEmail":"joomla@vdm.io","subform_layouts":"default","editor":"none","manage_jcb_package_directories":"2","set_browser_storage":"1","storage_time_to_live":"global","super_powers_documentation":"0","powers_repository":"0","super_powers_repositories":"0","approved_paths":"default","add_custom_gitea_url":"1","custom_gitea_url":"https://git.vdm.dev","super_powers_core_organisation":"joomla","super_powers_core":"joomla/super-powers","builder_gif_size":"480-272","compiler_plugin":["componentbuilderactionlogcompiler","componentbuilderfieldorderingcompiler","componentbuilderheaderscompiler","componentbuilderpowersautoloadercompiler","componentbuilderprivacycompiler"],"add_menu_prefix":"1","menu_prefix":"ยป","namespace_prefix":"JCB","minify":"0","language":"en-GB","percentagelanguageadd":"30","assets_table_fix":"2","compiler_field_builder_type":"2","field_name_builder":"1","type_name_builder":"1","import_guid_only":"1","export_language_strings":"1","development_method":"1","expansion":"0","return_options_build":"2","cronjob_backup_type":"1","cronjob_backup_server":"0","backup_package_name":"JCB_Backup_[YEAR]_[MONTH]_[DAY]","export_license":"GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html","export_copyright":"Copyright (C) 2015. All Rights Reserved","check_in":"-1 day","save_history":"1","history_limit":"10","add_jquery_framework":"1","uikit_load":"1","uikit_min":"","uikit_style":""}' @@ -2310,6 +2313,22 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // textPrefix 'COM_COMPONENTBUILDER' ); + + // Add Joomla_component to the action logs config table. + $this->setActionLogConfig( + // typeTitle + 'JOOMLA_COMPONENT', + // typeAlias + 'com_componentbuilder.joomla_component', + // idHolder + 'id', + // titleHolder + 'system_name', + // tableName + '#__componentbuilder_joomla_component', + // textPrefix + 'COM_COMPONENTBUILDER' + ); } // do any updates needed @@ -3210,7 +3229,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface echo '
-

Upgrade to Version 4.0.0-beta5 Was Successful! Let us know if anything is not working as expected.

'; +

Upgrade to Version 4.0.0-rc1 Was Successful! Let us know if anything is not working as expected.

'; // Add/Update component in the action logs extensions table. $this->setActionLogsExtensions(); @@ -4014,6 +4033,22 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // textPrefix 'COM_COMPONENTBUILDER' ); + + // Add/Update Joomla_component in the action logs config table. + $this->setActionLogConfig( + // typeTitle + 'JOOMLA_COMPONENT', + // typeAlias + 'com_componentbuilder.joomla_component', + // idHolder + 'id', + // titleHolder + 'system_name', + // tableName + '#__componentbuilder_joomla_component', + // textPrefix + 'COM_COMPONENTBUILDER' + ); } // move CLI files @@ -4997,7 +5032,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface if (!class_exists($nameClass, true)) { // The power autoloader for this project admin area. - $power_autoloader = JPATH_ADMINISTRATOR . '/componenents/com_componentbuilder/src/Helper/PowerloaderHelper.php'; + $power_autoloader = JPATH_ADMINISTRATOR . '/components/com_componentbuilder/src/Helper/PowerloaderHelper.php'; if (file_exists($power_autoloader)) { require_once $power_autoloader; diff --git a/README.md b/README.md index 043a1b701..69fb990e9 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have! -You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (4.0.0-beta5) with **ALL** its features and **ALL** concepts totally open-source and free! +You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (4.0.0-rc1) with **ALL** its features and **ALL** concepts totally open-source and free! > Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45) @@ -144,14 +144,14 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 24th April, 2024 -+ *Version*: 4.0.0-beta5 ++ *Last Build*: 27th April, 2024 ++ *Version*: 4.0.0-rc1 + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **755354** ++ *Line count*: **746056** + *Field count*: **2097** -+ *File count*: **5298** -+ *Folder count*: **531** ++ *File count*: **5293** ++ *Folder count*: **528** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com). > Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io) diff --git a/admin/README.txt b/admin/README.txt index 043a1b701..69fb990e9 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have! -You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (4.0.0-beta5) with **ALL** its features and **ALL** concepts totally open-source and free! +You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (4.0.0-rc1) with **ALL** its features and **ALL** concepts totally open-source and free! > Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45) @@ -144,14 +144,14 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 24th April, 2024 -+ *Version*: 4.0.0-beta5 ++ *Last Build*: 27th April, 2024 ++ *Version*: 4.0.0-rc1 + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **755354** ++ *Line count*: **746056** + *Field count*: **2097** -+ *File count*: **5298** -+ *Folder count*: **531** ++ *File count*: **5293** ++ *Folder count*: **528** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com). > Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io) diff --git a/admin/access.xml b/admin/access.xml index 8bc3e282b..9557fb999 100644 --- a/admin/access.xml +++ b/admin/access.xml @@ -4,8 +4,6 @@ - - @@ -27,8 +25,6 @@ - - @@ -90,8 +86,6 @@ - - @@ -102,15 +96,11 @@ - - - - @@ -246,8 +236,6 @@ - - @@ -261,8 +249,6 @@ - - @@ -275,8 +261,6 @@ - - @@ -289,8 +273,6 @@ - - @@ -301,17 +283,13 @@ - - - - @@ -322,15 +300,8 @@ - - - - - - - @@ -356,7 +327,6 @@ - @@ -367,7 +337,6 @@ - @@ -441,27 +410,22 @@ - - + - - - - @@ -503,8 +467,6 @@ - - @@ -536,16 +498,12 @@ - - - - @@ -561,8 +519,6 @@ - - @@ -570,8 +526,6 @@ - - @@ -583,8 +537,6 @@ - -
diff --git a/admin/assets/images/icons/get_snippets.png b/admin/assets/images/icons/get_snippets.png deleted file mode 100644 index cbe68e80e..000000000 Binary files a/admin/assets/images/icons/get_snippets.png and /dev/null differ diff --git a/admin/assets/images/icons/importjcbpackages.png b/admin/assets/images/icons/importjcbpackages.png deleted file mode 100644 index 2aaa92427..000000000 Binary files a/admin/assets/images/icons/importjcbpackages.png and /dev/null differ diff --git a/admin/assets/images/icons/languages.png b/admin/assets/images/icons/languages.png new file mode 100644 index 000000000..94873206e Binary files /dev/null and b/admin/assets/images/icons/languages.png differ diff --git a/admin/compiler/joomla_3/Helper.php b/admin/compiler/joomla_3/Helper.php index 5df959fc1..72aa952ad 100644 --- a/admin/compiler/joomla_3/Helper.php +++ b/admin/compiler/joomla_3/Helper.php @@ -17,12 +17,7 @@ defined('_JEXEC') or die('Restricted access'); // No direct access to this file defined('_JEXEC') or die('Restricted access'); -// The power autoloader for this project admin area. -$power_autoloader = JPATH_ADMINISTRATOR . '/components/com_###component###/helpers/powerloader.php'; -if (file_exists($power_autoloader)) -{ - require_once $power_autoloader; -} +###CUSTOM_POWER_AUTOLOADER### ###ADMIN_HELPER_CLASS_HEADER### diff --git a/admin/compiler/joomla_3/Helper_site.php b/admin/compiler/joomla_3/Helper_site.php index d773a70df..d4a7811e4 100644 --- a/admin/compiler/joomla_3/Helper_site.php +++ b/admin/compiler/joomla_3/Helper_site.php @@ -17,12 +17,7 @@ defined('_JEXEC') or die('Restricted access'); // No direct access to this file defined('_JEXEC') or die('Restricted access'); -// The power autoloader for this project site area. -$power_autoloader = JPATH_SITE . '/components/com_###component###/helpers/powerloader.php'; -if (file_exists($power_autoloader)) -{ - require_once $power_autoloader; -} +###SITE_CUSTOM_POWER_AUTOLOADER### ###SITE_HELPER_CLASS_HEADER### diff --git a/admin/compiler/joomla_3/component_admin.php b/admin/compiler/joomla_3/component_admin.php index f4f64bed3..b422d08cb 100644 --- a/admin/compiler/joomla_3/component_admin.php +++ b/admin/compiler/joomla_3/component_admin.php @@ -17,12 +17,7 @@ defined('_JEXEC') or die('Restricted access'); // No direct access to this file defined('_JEXEC') or die('Restricted access'); -// The power autoloader for this project admin area. -$power_autoloader = JPATH_ADMINISTRATOR . '/components/com_###component###/helpers/powerloader.php'; -if (file_exists($power_autoloader)) -{ - require_once $power_autoloader; -} +###CUSTOM_POWER_AUTOLOADER### ###ADMIN_COMPONENT_HEADER### diff --git a/admin/compiler/joomla_3/component_site.php b/admin/compiler/joomla_3/component_site.php index 99dd26f53..e95ccf8ef 100644 --- a/admin/compiler/joomla_3/component_site.php +++ b/admin/compiler/joomla_3/component_site.php @@ -17,12 +17,7 @@ defined('_JEXEC') or die('Restricted access'); // No direct access to this file defined('_JEXEC') or die('Restricted access'); -// The power autoloader for this project site area. -$power_autoloader = JPATH_SITE . '/components/com_###component###/helpers/powerloader.php'; -if (file_exists($power_autoloader)) -{ - require_once $power_autoloader; -} +###SITE_CUSTOM_POWER_AUTOLOADER### ###SITE_COMPONENT_HEADER### diff --git a/admin/compiler/joomla_4/ADMIN_HELPER_CLASS.php b/admin/compiler/joomla_4/ADMIN_HELPER_CLASS.php index 3318da99a..cb34191e0 100644 --- a/admin/compiler/joomla_4/ADMIN_HELPER_CLASS.php +++ b/admin/compiler/joomla_4/ADMIN_HELPER_CLASS.php @@ -15,12 +15,7 @@ defined('_JCB_TEMPLATE') or die; ###BOM### namespace ###NAMESPACEPREFIX###\Component\###ComponentNamespace###\Administrator\Helper; -// The power autoloader for this project admin area. -$power_autoloader = JPATH_ADMINISTRATOR . '/components/com_###component###/src/Helper/PowerloaderHelper.php'; -if (file_exists($power_autoloader)) -{ - require_once $power_autoloader; -} +###CUSTOM_POWER_AUTOLOADER### ###ADMIN_HELPER_CLASS_HEADER### diff --git a/admin/compiler/joomla_4/ADMIN_PROVIDER.php b/admin/compiler/joomla_4/ADMIN_PROVIDER.php index 4bd2aa763..69377b780 100644 --- a/admin/compiler/joomla_4/ADMIN_PROVIDER.php +++ b/admin/compiler/joomla_4/ADMIN_PROVIDER.php @@ -14,12 +14,7 @@ defined('_JCB_TEMPLATE') or die; ?> ###BOM### -// The power autoloader for this project admin area. -$power_autoloader = JPATH_ADMINISTRATOR . '/components/com_###component###/src/Helper/PowerloaderHelper.php'; -if (file_exists($power_autoloader)) -{ - require_once $power_autoloader; -} +###CUSTOM_POWER_AUTOLOADER### // (soon) use Joomla\CMS\Association\AssociationExtensionInterface; use Joomla\CMS\Categories\CategoryFactoryInterface; diff --git a/admin/compiler/joomla_4/SITE_HELPER_CLASS.php b/admin/compiler/joomla_4/SITE_HELPER_CLASS.php index 7dad6f100..0ab20f8f2 100644 --- a/admin/compiler/joomla_4/SITE_HELPER_CLASS.php +++ b/admin/compiler/joomla_4/SITE_HELPER_CLASS.php @@ -15,12 +15,7 @@ defined('_JCB_TEMPLATE') or die; ###BOM### namespace ###NAMESPACEPREFIX###\Component\###ComponentNamespace###\Site\Helper; -// The power autoloader for this project site area. -$power_autoloader = JPATH_SITE . '/components/com_###component###/src/Helper/PowerloaderHelper.php'; -if (file_exists($power_autoloader)) -{ - require_once $power_autoloader; -} +###SITE_CUSTOM_POWER_AUTOLOADER### ###SITE_HELPER_CLASS_HEADER### diff --git a/admin/forms/joomla_component.xml b/admin/forms/joomla_component.xml index 23cf00072..b025e9396 100644 --- a/admin/forms/joomla_component.xml +++ b/admin/forms/joomla_component.xml @@ -206,8 +206,8 @@ syntax="php" editor="codemirror|none" filter="raw" - required="add_admin_event:1" validate="code" + showon="add_admin_event:1" /> @@ -643,6 +643,7 @@ editor="codemirror|none" filter="raw" validate="code" + showon="add_css_site:1" /> Report Broken Package" COM_COMPONENTBUILDER_BACK="Back" -COM_COMPONENTBUILDER_BACKUP="Backup" COM_COMPONENTBUILDER_BACKUP_FAILED_PLEASE_TRY_AGAIN_IF_THE_ERROR_CONTINUE_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR="Backup failed, please try again. If the error continue, please contact your system administrator." COM_COMPONENTBUILDER_BACKUP_LOCAL_DATA_FIRST="Backup Local Data First" COM_COMPONENTBUILDER_BACKUP_WAS_DONE_SUCCESSFULLY="Backup was done successfully" @@ -1490,10 +1485,6 @@ COM_COMPONENTBUILDER_CLASS_METHODS_EDIT_VERSION_DESC="Allows the users in this g COM_COMPONENTBUILDER_CLASS_METHODS_EMPTYSTATE_BUTTON_ADD="Add your first class method" COM_COMPONENTBUILDER_CLASS_METHODS_EMPTYSTATE_CONTENT="Class Methods" COM_COMPONENTBUILDER_CLASS_METHODS_EMPTYSTATE_TITLE="No class methods have been created yet." -COM_COMPONENTBUILDER_CLASS_METHODS_EXPORT="Class Methods Export" -COM_COMPONENTBUILDER_CLASS_METHODS_EXPORT_DESC="Allows the users in this group to export export class methods" -COM_COMPONENTBUILDER_CLASS_METHODS_IMPORT="Class Methods Import" -COM_COMPONENTBUILDER_CLASS_METHODS_IMPORT_DESC="Allows the users in this group to import import class methods" COM_COMPONENTBUILDER_CLASS_METHODS_N_ITEMS_ARCHIVED="%s Class Methods archived." COM_COMPONENTBUILDER_CLASS_METHODS_N_ITEMS_ARCHIVED_1="%s Class Method archived." COM_COMPONENTBUILDER_CLASS_METHODS_N_ITEMS_CHECKED_IN_0="No Class Method successfully checked in." @@ -1591,10 +1582,6 @@ COM_COMPONENTBUILDER_CLASS_PROPERTIES_EDIT_VERSION_DESC="Allows the users in thi COM_COMPONENTBUILDER_CLASS_PROPERTIES_EMPTYSTATE_BUTTON_ADD="Add your first class property" COM_COMPONENTBUILDER_CLASS_PROPERTIES_EMPTYSTATE_CONTENT="Class Properties" COM_COMPONENTBUILDER_CLASS_PROPERTIES_EMPTYSTATE_TITLE="No class properties have been created yet." -COM_COMPONENTBUILDER_CLASS_PROPERTIES_EXPORT="Class Properties Export" -COM_COMPONENTBUILDER_CLASS_PROPERTIES_EXPORT_DESC="Allows the users in this group to export export class properties" -COM_COMPONENTBUILDER_CLASS_PROPERTIES_IMPORT="Class Properties Import" -COM_COMPONENTBUILDER_CLASS_PROPERTIES_IMPORT_DESC="Allows the users in this group to import import class properties" COM_COMPONENTBUILDER_CLASS_PROPERTIES_N_ITEMS_ARCHIVED="%s Class Properties archived." COM_COMPONENTBUILDER_CLASS_PROPERTIES_N_ITEMS_ARCHIVED_1="%s Class Property archived." COM_COMPONENTBUILDER_CLASS_PROPERTIES_N_ITEMS_CHECKED_IN_0="No Class Property successfully checked in." @@ -1668,7 +1655,6 @@ COM_COMPONENTBUILDER_CLASS_PROPERTY_VISIBILITY_DESCRIPTION="The visibility of a COM_COMPONENTBUILDER_CLASS_PROPERTY_VISIBILITY_LABEL="Visibility" COM_COMPONENTBUILDER_CLEAR="Clear" COM_COMPONENTBUILDER_CLEAR_TMP="Clear tmp" -COM_COMPONENTBUILDER_CLONE="Clone" COM_COMPONENTBUILDER_CLONE_FAILED="Clone failed!" COM_COMPONENTBUILDER_CLOSE_NEW="Close & New" COM_COMPONENTBUILDER_CODE="Code" @@ -1688,12 +1674,8 @@ COM_COMPONENTBUILDER_COMPILER_COMPILER_ANIMATIONS_BUTTON_ACCESS_DESC="Allows the COM_COMPONENTBUILDER_COMPILER_DASHBOARD_LIST="Compiler Dashboard List" COM_COMPONENTBUILDER_COMPILER_DASHBOARD_LIST_DESC="Allows the users in this group to dashboard list of Compiler" COM_COMPONENTBUILDER_COMPILER_DESC="The compiler" -COM_COMPONENTBUILDER_COMPILER_RUN_EXPANSION_BUTTON_ACCESS="Compiler Run Expansion Button Access" -COM_COMPONENTBUILDER_COMPILER_RUN_EXPANSION_BUTTON_ACCESS_DESC="Allows the users in this group to access the run expansion button." COM_COMPONENTBUILDER_COMPILER_SUBMENU="Compiler Submenu" COM_COMPONENTBUILDER_COMPILER_SUBMENU_DESC="Allows the users in this group to submenu of Compiler" -COM_COMPONENTBUILDER_COMPILER_TRANSLATE_BUTTON_ACCESS="Compiler Translate Button Access" -COM_COMPONENTBUILDER_COMPILER_TRANSLATE_BUTTON_ACCESS_DESC="Allows the users in this group to access the translate button." COM_COMPONENTBUILDER_COMPILE_COMPONENT="Compile Component" COM_COMPONENTBUILDER_COMPONENT="Component" COM_COMPONENTBUILDER_COMPONENTS="Components" @@ -3765,10 +3747,6 @@ COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EDIT_VERSION_DESC="Allows the users in t COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EMPTYSTATE_BUTTON_ADD="Add your first custom admin view" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EMPTYSTATE_CONTENT="The custom admin views used in a component is build here" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EMPTYSTATE_TITLE="No custom admin views have been created yet." -COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EXPORT="Custom Admin Views Export" -COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EXPORT_DESC="Allows the users in this group to export export custom admin views" -COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_IMPORT="Custom Admin Views Import" -COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_IMPORT_DESC="Allows the users in this group to import import custom admin views" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_NAMES="Names" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_N_ITEMS_ARCHIVED="%s Custom Admin Views archived." COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_N_ITEMS_ARCHIVED_1="%s Custom Admin View archived." @@ -4195,10 +4173,6 @@ COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_VERSION_DESC="Allows the users in this gr COM_COMPONENTBUILDER_CUSTOM_CODES_EMPTYSTATE_BUTTON_ADD="Add your first custom code" COM_COMPONENTBUILDER_CUSTOM_CODES_EMPTYSTATE_CONTENT="Custom code added during development" COM_COMPONENTBUILDER_CUSTOM_CODES_EMPTYSTATE_TITLE="No custom codes have been created yet." -COM_COMPONENTBUILDER_CUSTOM_CODES_EXPORT="Custom Codes Export" -COM_COMPONENTBUILDER_CUSTOM_CODES_EXPORT_DESC="Allows the users in this group to export export custom codes" -COM_COMPONENTBUILDER_CUSTOM_CODES_IMPORT="Custom Codes Import" -COM_COMPONENTBUILDER_CUSTOM_CODES_IMPORT_DESC="Allows the users in this group to import import custom codes" COM_COMPONENTBUILDER_CUSTOM_CODES_N_ITEMS_ARCHIVED="%s Custom Codes archived." COM_COMPONENTBUILDER_CUSTOM_CODES_N_ITEMS_ARCHIVED_1="%s Custom Code archived." COM_COMPONENTBUILDER_CUSTOM_CODES_N_ITEMS_CHECKED_IN_0="No Custom Code successfully checked in." @@ -4307,12 +4281,11 @@ COM_COMPONENTBUILDER_DASHBOARD_FIELDS_CATID="Categories For
Fields" COM_COMPONENTBUILDER_DASHBOARD_FIELDTYPES="Fieldtypes

" COM_COMPONENTBUILDER_DASHBOARD_FIELDTYPES_CATID="Categories For
Fieldtypes" COM_COMPONENTBUILDER_DASHBOARD_FIELD_ADD="Add Field

" -COM_COMPONENTBUILDER_DASHBOARD_GET_SNIPPETS="Get Snippets

" COM_COMPONENTBUILDER_DASHBOARD_HELP_DOCUMENTS="Help Documents

" -COM_COMPONENTBUILDER_DASHBOARD_IMPORTJCBPACKAGES="Import JCB Packages

" COM_COMPONENTBUILDER_DASHBOARD_JOOMLA_COMPONENTS="Joomla Components

" COM_COMPONENTBUILDER_DASHBOARD_JOOMLA_MODULES="Joomla Modules

" COM_COMPONENTBUILDER_DASHBOARD_JOOMLA_PLUGINS="Joomla Plugins

" +COM_COMPONENTBUILDER_DASHBOARD_LANGUAGES="Languages

" COM_COMPONENTBUILDER_DASHBOARD_LANGUAGE_TRANSLATIONS="Language Translations

" COM_COMPONENTBUILDER_DASHBOARD_LAYOUTS="Layouts

" COM_COMPONENTBUILDER_DASHBOARD_LIBRARIES="Libraries

" @@ -4375,10 +4348,6 @@ COM_COMPONENTBUILDER_DYNAMIC_GETS_EDIT_VERSION_DESC="Allows the users in this gr COM_COMPONENTBUILDER_DYNAMIC_GETS_EMPTYSTATE_BUTTON_ADD="Add your first dynamic get" COM_COMPONENTBUILDER_DYNAMIC_GETS_EMPTYSTATE_CONTENT="" COM_COMPONENTBUILDER_DYNAMIC_GETS_EMPTYSTATE_TITLE="No dynamic gets have been created yet." -COM_COMPONENTBUILDER_DYNAMIC_GETS_EXPORT="Dynamic Gets Export" -COM_COMPONENTBUILDER_DYNAMIC_GETS_EXPORT_DESC="Allows the users in this group to export export dynamic gets" -COM_COMPONENTBUILDER_DYNAMIC_GETS_IMPORT="Dynamic Gets Import" -COM_COMPONENTBUILDER_DYNAMIC_GETS_IMPORT_DESC="Allows the users in this group to import import dynamic gets" COM_COMPONENTBUILDER_DYNAMIC_GETS_N_ITEMS_ARCHIVED="%s Dynamic Gets archived." COM_COMPONENTBUILDER_DYNAMIC_GETS_N_ITEMS_ARCHIVED_1="%s Dynamic Get archived." COM_COMPONENTBUILDER_DYNAMIC_GETS_N_ITEMS_CHECKED_IN_0="No Dynamic Get successfully checked in." @@ -4690,11 +4659,7 @@ COM_COMPONENTBUILDER_EXIT_TRASH="Exit trash" COM_COMPONENTBUILDER_EXPANSION_FAILED_PLEASE_CHECK_YOUR_SETTINGS_IN_THE_GLOBAL_OPTIONS_OF_JCB_UNDER_THE_DEVELOPMENT_METHOD_TAB="Expansion failed, please check your settings in the global options of JCB under the Development Method tab!" COM_COMPONENTBUILDER_EXPORTIMPORT_DATA="Export/Import Data" COM_COMPONENTBUILDER_EXPORT_COMPLETED="Export Completed!" -COM_COMPONENTBUILDER_EXPORT_DATA="Export Data" -COM_COMPONENTBUILDER_EXPORT_DATA_DESC="Allows users in this group to export data." -COM_COMPONENTBUILDER_EXPORT_FAILED="Export Failed" COM_COMPONENTBUILDER_EXPORT_FAILED_PLEASE_TRY_AGAIN_LATTER="Export failed, please try again latter!" -COM_COMPONENTBUILDER_EXPORT_JCB_PACKAGES="Export JCB Packages" COM_COMPONENTBUILDER_EXTENDS="Extends" COM_COMPONENTBUILDER_EXTRA_PROPERTIES_LIKE_LISTCLASS_ESCAPE_DISPLAY_VALIDATEBR_SMALLHERE_YOU_CAN_SET_THE_EXTRA_PROPERTIES_FOR_THIS_FIELDSMALL="Extra properties like (listclass, escape, display, validate)
Here you can set the extra properties for this field" COM_COMPONENTBUILDER_FADE_IN="Fade In" @@ -4725,10 +4690,6 @@ COM_COMPONENTBUILDER_FIELDS_EDIT_VERSION_DESC="Allows the users in this group to COM_COMPONENTBUILDER_FIELDS_EMPTYSTATE_BUTTON_ADD="Add your first field" COM_COMPONENTBUILDER_FIELDS_EMPTYSTATE_CONTENT="" COM_COMPONENTBUILDER_FIELDS_EMPTYSTATE_TITLE="No fields have been created yet." -COM_COMPONENTBUILDER_FIELDS_EXPORT="Fields Export" -COM_COMPONENTBUILDER_FIELDS_EXPORT_DESC="Allows the users in this group to export export fields" -COM_COMPONENTBUILDER_FIELDS_IMPORT="Fields Import" -COM_COMPONENTBUILDER_FIELDS_IMPORT_DESC="Allows the users in this group to import import fields" COM_COMPONENTBUILDER_FIELDS_N_ITEMS_ARCHIVED="%s Fields archived." COM_COMPONENTBUILDER_FIELDS_N_ITEMS_ARCHIVED_1="%s Field archived." COM_COMPONENTBUILDER_FIELDS_N_ITEMS_CHECKED_IN_0="No Field successfully checked in." @@ -4776,10 +4737,6 @@ COM_COMPONENTBUILDER_FIELDTYPES_EDIT_VERSION_DESC="Allows the users in this grou COM_COMPONENTBUILDER_FIELDTYPES_EMPTYSTATE_BUTTON_ADD="Add your first fieldtype" COM_COMPONENTBUILDER_FIELDTYPES_EMPTYSTATE_CONTENT="" COM_COMPONENTBUILDER_FIELDTYPES_EMPTYSTATE_TITLE="No fieldtypes have been created yet." -COM_COMPONENTBUILDER_FIELDTYPES_EXPORT="Fieldtypes Export" -COM_COMPONENTBUILDER_FIELDTYPES_EXPORT_DESC="Allows the users in this group to export export fieldtypes" -COM_COMPONENTBUILDER_FIELDTYPES_IMPORT="Fieldtypes Import" -COM_COMPONENTBUILDER_FIELDTYPES_IMPORT_DESC="Allows the users in this group to import import fieldtypes" COM_COMPONENTBUILDER_FIELDTYPES_N_ITEMS_ARCHIVED="%s Fieldtypes archived." COM_COMPONENTBUILDER_FIELDTYPES_N_ITEMS_ARCHIVED_1="%s Fieldtype archived." COM_COMPONENTBUILDER_FIELDTYPES_N_ITEMS_CHECKED_IN_0="No Fieldtype successfully checked in." @@ -5344,8 +5301,6 @@ COM_COMPONENTBUILDER_GET_SNIPPETS_ACCESS="Get Snippets Access" COM_COMPONENTBUILDER_GET_SNIPPETS_ACCESS_DESC="Allows the users in this group to access get snippets." COM_COMPONENTBUILDER_GET_SNIPPETS_CUSTOM_ADMIN_VIEWS_BUTTON_ACCESS="Get Snippets Custom Admin Views Button Access" COM_COMPONENTBUILDER_GET_SNIPPETS_CUSTOM_ADMIN_VIEWS_BUTTON_ACCESS_DESC="Allows the users in this group to access the custom admin views button." -COM_COMPONENTBUILDER_GET_SNIPPETS_DASHBOARD_LIST="Get Snippets Dashboard List" -COM_COMPONENTBUILDER_GET_SNIPPETS_DASHBOARD_LIST_DESC="Allows the users in this group to dashboard list of Get Snippets" COM_COMPONENTBUILDER_GET_SNIPPETS_DESC="Get the sinppets" COM_COMPONENTBUILDER_GET_SNIPPETS_LAYOUTS_BUTTON_ACCESS="Get Snippets Layouts Button Access" COM_COMPONENTBUILDER_GET_SNIPPETS_LAYOUTS_BUTTON_ACCESS_DESC="Allows the users in this group to access the layouts button." @@ -5355,8 +5310,6 @@ COM_COMPONENTBUILDER_GET_SNIPPETS_SITE_VIEWS_BUTTON_ACCESS="Get Snippets Site Vi COM_COMPONENTBUILDER_GET_SNIPPETS_SITE_VIEWS_BUTTON_ACCESS_DESC="Allows the users in this group to access the site views button." COM_COMPONENTBUILDER_GET_SNIPPETS_SNIPPETS_BUTTON_ACCESS="Get Snippets Snippets Button Access" COM_COMPONENTBUILDER_GET_SNIPPETS_SNIPPETS_BUTTON_ACCESS_DESC="Allows the users in this group to access the snippets button." -COM_COMPONENTBUILDER_GET_SNIPPETS_SUBMENU="Get Snippets Submenu" -COM_COMPONENTBUILDER_GET_SNIPPETS_SUBMENU_DESC="Allows the users in this group to submenu of Get Snippets" COM_COMPONENTBUILDER_GET_SNIPPETS_TEMPLATES_BUTTON_ACCESS="Get Snippets Templates Button Access" COM_COMPONENTBUILDER_GET_SNIPPETS_TEMPLATES_BUTTON_ACCESS_DESC="Allows the users in this group to access the templates button." COM_COMPONENTBUILDER_GET_THE_SNIPPET_FROM_GITHUB_AND_INSTALL_IT_LOCALLY="Get the snippet from gitHub and install it locally" @@ -5397,10 +5350,6 @@ COM_COMPONENTBUILDER_HELP_DOCUMENTS_EDIT_VERSION_DESC="Allows the users in this COM_COMPONENTBUILDER_HELP_DOCUMENTS_EMPTYSTATE_BUTTON_ADD="Add your first help document" COM_COMPONENTBUILDER_HELP_DOCUMENTS_EMPTYSTATE_CONTENT="The help documentation of this component" COM_COMPONENTBUILDER_HELP_DOCUMENTS_EMPTYSTATE_TITLE="No help documents have been created yet." -COM_COMPONENTBUILDER_HELP_DOCUMENTS_EXPORT="Help Documents Export" -COM_COMPONENTBUILDER_HELP_DOCUMENTS_EXPORT_DESC="Allows the users in this group to export export help documents" -COM_COMPONENTBUILDER_HELP_DOCUMENTS_IMPORT="Help Documents Import" -COM_COMPONENTBUILDER_HELP_DOCUMENTS_IMPORT_DESC="Allows the users in this group to import import help documents" COM_COMPONENTBUILDER_HELP_DOCUMENTS_N_ITEMS_ARCHIVED="%s Help Documents archived." COM_COMPONENTBUILDER_HELP_DOCUMENTS_N_ITEMS_ARCHIVED_1="%s Help Document archived." COM_COMPONENTBUILDER_HELP_DOCUMENTS_N_ITEMS_CHECKED_IN_0="No Help Document successfully checked in." @@ -5523,63 +5472,10 @@ COM_COMPONENTBUILDER_ID="id" COM_COMPONENTBUILDER_ID_MISMATCH_WAS_DETECTED_WITH_THE_SSSS_GUI_CODE_FIELD_SO_THE_PLACEHOLDER_WAS_NOT_SET="ID mismatch was detected with the %s.%s.%s.%s GUI code field. So the placeholder was not set." COM_COMPONENTBUILDER_IEMAILI_BSB="Email: %s" COM_COMPONENTBUILDER_IMPORT_BY_GUID_ONLY="Import by GUID only!" -COM_COMPONENTBUILDER_IMPORT_CONTINUE="Continue" -COM_COMPONENTBUILDER_IMPORT_DATA="Import Data" -COM_COMPONENTBUILDER_IMPORT_DATA_DESC="Allows users in this group to import data." -COM_COMPONENTBUILDER_IMPORT_ERROR="Import error." -COM_COMPONENTBUILDER_IMPORT_FAILED="Import Failed" -COM_COMPONENTBUILDER_IMPORT_FILE_COLUMNS="File Columns" -COM_COMPONENTBUILDER_IMPORT_FORMATS_ACCEPTED="formats accepted" -COM_COMPONENTBUILDER_IMPORT_FROM_DIRECTORY="Directory" -COM_COMPONENTBUILDER_IMPORT_FROM_UPLOAD="Upload" -COM_COMPONENTBUILDER_IMPORT_FROM_URL="URL" -COM_COMPONENTBUILDER_IMPORT_GET_BOTTON="Get File" -COM_COMPONENTBUILDER_IMPORT_IGNORE_COLUMN="-- Ignore This Column --" -COM_COMPONENTBUILDER_IMPORT_JCB_PACKAGES="Import JCB Packages" -COM_COMPONENTBUILDER_IMPORT_LINK_FILE_TO_TABLE_COLUMNS="Link File to Table Columns" -COM_COMPONENTBUILDER_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE="Does not have a valid file type." -COM_COMPONENTBUILDER_IMPORT_MSG_ENTER_A_URL="Please enter a url." -COM_COMPONENTBUILDER_IMPORT_MSG_INVALID_URL="Invalid url." -COM_COMPONENTBUILDER_IMPORT_MSG_NO_FILE_SELECTED="No import file selected." -COM_COMPONENTBUILDER_IMPORT_MSG_PATH_DOES_NOT_HAVE_A_VALID_PACKAGE="Path does not have a valid file." -COM_COMPONENTBUILDER_IMPORT_MSG_PLEASE_ENTER_A_PACKAGE_DIRECTORY="Please enter the file directory." -COM_COMPONENTBUILDER_IMPORT_MSG_PLEASE_SELECT_ALL_COLUMNS="Please link all columns." -COM_COMPONENTBUILDER_IMPORT_MSG_PLEASE_SELECT_A_DIRECTORY="Please enter the file directory." -COM_COMPONENTBUILDER_IMPORT_MSG_PLEASE_SELECT_A_FILE="Please select a file to import." -COM_COMPONENTBUILDER_IMPORT_MSG_WARNIMPORTFILE="Warning, import file error." -COM_COMPONENTBUILDER_IMPORT_MSG_WARNIMPORTUPLOADERROR="Warning, import upload error." -COM_COMPONENTBUILDER_IMPORT_NO_IMPORT_TYPE_FOUND="Import type not found." -COM_COMPONENTBUILDER_IMPORT_PLEASE_SELECT_COLUMN="-- Please Select Column --" COM_COMPONENTBUILDER_IMPORT_S="Import %s" -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE="Select File" -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_DIRECTORY="Set the path to file" -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_ADMIN_VIEWS="Select the file to import data to admin_views." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_CLASS_METHODS="Select the file to import data to class_methods." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_CLASS_PROPERTIES="Select the file to import data to class_properties." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_CUSTOM_ADMIN_VIEWS="Select the file to import data to custom_admin_views." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_CUSTOM_CODES="Select the file to import data to custom_codes." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_DYNAMIC_GETS="Select the file to import data to dynamic_gets." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_FIELDS="Select the file to import data to fields." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_FIELDTYPES="Select the file to import data to fieldtypes." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_HELP_DOCUMENTS="Select the file to import data to help_documents." COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_JOOMLA_COMPONENTS="Select the file to import data to joomla_components." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_JOOMLA_MODULES="Select the file to import data to joomla_modules." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_LANGUAGES="Select the file to import data to languages." COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_LANGUAGE_TRANSLATIONS="Select the file to import data to language_translations." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_LAYOUTS="Select the file to import data to layouts." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_PLACEHOLDERS="Select the file to import data to placeholders." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_SERVERS="Select the file to import data to servers." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_SITE_VIEWS="Select the file to import data to site_views." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_SNIPPETS="Select the file to import data to snippets." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_TEMPLATES="Select the file to import data to templates." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_VALIDATION_RULES="Select the file to import data to validation_rules." -COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_URL="Enter file URL" COM_COMPONENTBUILDER_IMPORT_SUCCESS="Import Success!" -COM_COMPONENTBUILDER_IMPORT_TABLE_COLUMNS="Table Columns" -COM_COMPONENTBUILDER_IMPORT_TITLE="Data Importer" -COM_COMPONENTBUILDER_IMPORT_UNABLE_TO_FIND_IMPORT_PACKAGE="Package to import not found." -COM_COMPONENTBUILDER_IMPORT_UPDATE_DATA="Import Data" -COM_COMPONENTBUILDER_IMPORT_UPLOAD_BOTTON="Upload File" COM_COMPONENTBUILDER_INACTIVE="Inactive" COM_COMPONENTBUILDER_INDENTATION_OPTIONS="Indentation Options" COM_COMPONENTBUILDER_INIT="Init" @@ -5762,8 +5658,6 @@ COM_COMPONENTBUILDER_JOOMLA_COMPONENT_AUTHOR_HINT="Author Name & Surname Her COM_COMPONENTBUILDER_JOOMLA_COMPONENT_AUTHOR_LABEL="Author" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_AUTHOR_MESSAGE="Error! Please add author name here." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BACK="Back" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BACKUP_BUTTON_ACCESS="Joomla Component Backup Button Access" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BACKUP_BUTTON_ACCESS_DESC="Allows the users in this group to access the backup button." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BACKUP_FOLDER_PATH_DESCRIPTION="Here you can set the path to the backup folder." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BACKUP_FOLDER_PATH_HINT="/home/user/backup" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BACKUP_FOLDER_PATH_LABEL="Backup Folder Path" @@ -5780,8 +5674,6 @@ COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BUILDER_BACKUP_KEY="Joomla Component Build COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BUILDER_JCB_IS_A_CRUCIAL_TOOL_FOR_PHP_PROGRAMMERS_WHO_USE_JOOMLA_TO_EARN_A_LIVING_BY_MAKING_A_BFINANCIAL_DONATIONB_YOU_CAN_SUPPORT_THE_GROWTH_AND_CONTINUITY_OF_THIS_VITAL_RESOURCE_AND_ENSURE_ITS_RELEVANCE_FOR_YEARS_TO_COME_YOUR_CONTRIBUTION_NO_MATTER_HOW_BIG_OR_SMALL_WILL_BE_DEEPLY_APPRECIATED_BY_THE_PROJECTS_TEAM_AND_THE_WIDER_COMMUNITY="Joomla Component Builder (JCB) is a crucial tool for PHP programmers who use Joomla to earn a living. By making a financial donation, you can support the growth and continuity of this vital resource and ensure its relevance for years to come. Your contribution, no matter how big or small, will be deeply appreciated by the project's team and the wider community." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_CLEAR_TMP_BUTTON_ACCESS="Joomla Component Clear tmp Button Access" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_CLEAR_TMP_BUTTON_ACCESS_DESC="Allows the users in this group to access the clear tmp button." -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_CLONE_BUTTON_ACCESS="Joomla Component Clone Button Access" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_CLONE_BUTTON_ACCESS_DESC="Allows the users in this group to access the clone button." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_COMPANYNAME_DESCRIPTION="Enter Company Name Here" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_COMPANYNAME_HINT="Company Name Here" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_COMPANYNAME_LABEL="Company Name" @@ -5849,8 +5741,6 @@ COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_BUY_LINK_DESCRIPTION="Enter link wh COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_BUY_LINK_HINT="http://www.example.com/buy-keys" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_BUY_LINK_LABEL="Buy Link
(to get key)" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_BUY_LINK_MESSAGE="Error! Please add link here." -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_JCB_PACKAGES_BUTTON_ACCESS="Joomla Component Export JCB Packages Button Access" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_JCB_PACKAGES_BUTTON_ACCESS_DESC="Allows the users in this group to access the export jcb packages button." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_KEY_DESCRIPTION="The key used to lock the data during export." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_KEY_HINT="Export Key Here" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_KEY_LABEL="Export Key
(encrypted field)" @@ -5867,8 +5757,6 @@ COM_COMPONENTBUILDER_JOOMLA_COMPONENT_GUID_LABEL="GUID" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_ID="Id" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_IMAGE_DESCRIPTION="The component image (product box) for the dashboard and install page, must be 300px X 300px." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_IMAGE_LABEL="Component Image" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_IMPORT_JCB_PACKAGES_BUTTON_ACCESS="Joomla Component Import JCB Packages Button Access" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_IMPORT_JCB_PACKAGES_BUTTON_ACCESS_DESC="Allows the users in this group to access the import jcb packages button." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_INTELLIGENT_ADDREMOVEIF="Intelligent (add&remove+if)" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_JAVASCRIPT_DESCRIPTION="Add JavaScript for the entire back-end. Do not add the script tags." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_JAVASCRIPT_LABEL="Javascript" @@ -5997,8 +5885,6 @@ COM_COMPONENTBUILDER_JOOMLA_COMPONENT_README="Readme" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_README_LABEL="README.md" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_REMOVE_LINE_BREAKS_DESCRIPTION="Should we remove all line breaks ("\r", "\n") from all language strings in this component." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_REMOVE_LINE_BREAKS_LABEL="Remove line breaks
from language strings" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_RUN_EXPANSION_BUTTON_ACCESS="Joomla Component Run Expansion Button Access" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_RUN_EXPANSION_BUTTON_ACCESS_DESC="Allows the users in this group to access the run expansion button." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_SALES_SERVER_DESCRIPTION="Select your sales server for this component" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_SALES_SERVER_LABEL="Sales Server" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Joomla Component to customise the alias." @@ -6103,8 +5989,6 @@ COM_COMPONENTBUILDER_JOOMLA_MODULES_EDIT_VERSION_DESC="Allows the users in this COM_COMPONENTBUILDER_JOOMLA_MODULES_EMPTYSTATE_BUTTON_ADD="Add your first joomla module" COM_COMPONENTBUILDER_JOOMLA_MODULES_EMPTYSTATE_CONTENT="Joomla Modules" COM_COMPONENTBUILDER_JOOMLA_MODULES_EMPTYSTATE_TITLE="No joomla modules have been created yet." -COM_COMPONENTBUILDER_JOOMLA_MODULES_EXPORT="Joomla Modules Export" -COM_COMPONENTBUILDER_JOOMLA_MODULES_EXPORT_DESC="Allows the users in this group to export export joomla modules" COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS="Joomla Modules Files, Folders & URLs" COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_ACCESS="Joomla Modules Files Folders Urls Access" COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_ACCESS_DESC="Allows the users in this group to access access joomla modules files folders urls" @@ -6150,8 +6034,6 @@ COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_N_ITEMS_UNFEATURED="%s Jo COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_N_ITEMS_UNFEATURED_1="%s Joomla Module Files, Folders & URLs unfeatured." COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_N_ITEMS_UNPUBLISHED="%s Joomla Modules Files, Folders & URLs unpublished." COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_N_ITEMS_UNPUBLISHED_1="%s Joomla Module Files, Folders & URLs unpublished." -COM_COMPONENTBUILDER_JOOMLA_MODULES_IMPORT="Joomla Modules Import" -COM_COMPONENTBUILDER_JOOMLA_MODULES_IMPORT_DESC="Allows the users in this group to import import joomla modules" COM_COMPONENTBUILDER_JOOMLA_MODULES_N_ITEMS_ARCHIVED="%s Joomla Modules archived." COM_COMPONENTBUILDER_JOOMLA_MODULES_N_ITEMS_ARCHIVED_1="%s Joomla Module archived." COM_COMPONENTBUILDER_JOOMLA_MODULES_N_ITEMS_CHECKED_IN_0="No Joomla Module successfully checked in." @@ -7087,6 +6969,8 @@ COM_COMPONENTBUILDER_LANGUAGES_BATCH_USE="Languages Batch Use" COM_COMPONENTBUILDER_LANGUAGES_BATCH_USE_DESC="Allows the users in this group to use batch copy/update method of batch languages" COM_COMPONENTBUILDER_LANGUAGES_CREATE="Languages Create" COM_COMPONENTBUILDER_LANGUAGES_CREATE_DESC="Allows the users in this group to create create languages" +COM_COMPONENTBUILDER_LANGUAGES_DASHBOARD_LIST="Languages Dashboard List" +COM_COMPONENTBUILDER_LANGUAGES_DASHBOARD_LIST_DESC="Allows the users in this group to dashboard list of language" COM_COMPONENTBUILDER_LANGUAGES_DELETE="Languages Delete" COM_COMPONENTBUILDER_LANGUAGES_DELETE_DESC="Allows the users in this group to delete delete languages" COM_COMPONENTBUILDER_LANGUAGES_EDIT="Languages Edit" @@ -7100,10 +6984,6 @@ COM_COMPONENTBUILDER_LANGUAGES_EDIT_VERSION_DESC="Allows the users in this group COM_COMPONENTBUILDER_LANGUAGES_EMPTYSTATE_BUTTON_ADD="Add your first language" COM_COMPONENTBUILDER_LANGUAGES_EMPTYSTATE_CONTENT="A list of languages." COM_COMPONENTBUILDER_LANGUAGES_EMPTYSTATE_TITLE="No languages have been created yet." -COM_COMPONENTBUILDER_LANGUAGES_EXPORT="Languages Export" -COM_COMPONENTBUILDER_LANGUAGES_EXPORT_DESC="Allows the users in this group to export export languages" -COM_COMPONENTBUILDER_LANGUAGES_IMPORT="Languages Import" -COM_COMPONENTBUILDER_LANGUAGES_IMPORT_DESC="Allows the users in this group to import import languages" COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_ARCHIVED="%s Languages archived." COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_ARCHIVED_1="%s Language archived." COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_CHECKED_IN_0="No Language successfully checked in." @@ -7179,10 +7059,6 @@ COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_VERSION_DESC="Allows the users i COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EMPTYSTATE_BUTTON_ADD="Add your first language translation" COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EMPTYSTATE_CONTENT="A list of language translations." COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EMPTYSTATE_TITLE="No language translations have been created yet." -COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EXPORT="Language Translations Export" -COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EXPORT_DESC="Allows the users in this group to export export language translations" -COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_IMPORT="Language Translations Import" -COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_IMPORT_DESC="Allows the users in this group to import import language translations" COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_N_ITEMS_ARCHIVED="%s Language Translations archived." COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_N_ITEMS_ARCHIVED_1="%s Language Translation archived." COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_N_ITEMS_CHECKED_IN_0="No Language Translation successfully checked in." @@ -7265,10 +7141,6 @@ COM_COMPONENTBUILDER_LAYOUTS_EDIT_VERSION_DESC="Allows the users in this group t COM_COMPONENTBUILDER_LAYOUTS_EMPTYSTATE_BUTTON_ADD="Add your first layout" COM_COMPONENTBUILDER_LAYOUTS_EMPTYSTATE_CONTENT="" COM_COMPONENTBUILDER_LAYOUTS_EMPTYSTATE_TITLE="No layouts have been created yet." -COM_COMPONENTBUILDER_LAYOUTS_EXPORT="Layouts Export" -COM_COMPONENTBUILDER_LAYOUTS_EXPORT_DESC="Allows the users in this group to export export layouts" -COM_COMPONENTBUILDER_LAYOUTS_IMPORT="Layouts Import" -COM_COMPONENTBUILDER_LAYOUTS_IMPORT_DESC="Allows the users in this group to import import layouts" COM_COMPONENTBUILDER_LAYOUTS_NAMES="Names" COM_COMPONENTBUILDER_LAYOUTS_N_ITEMS_ARCHIVED="%s Layouts archived." COM_COMPONENTBUILDER_LAYOUTS_N_ITEMS_ARCHIVED_1="%s Layout archived." @@ -7842,10 +7714,6 @@ COM_COMPONENTBUILDER_PLACEHOLDERS_EDIT_VERSION_DESC="Allows the users in this gr COM_COMPONENTBUILDER_PLACEHOLDERS_EMPTYSTATE_BUTTON_ADD="Add your first placeholder" COM_COMPONENTBUILDER_PLACEHOLDERS_EMPTYSTATE_CONTENT="" COM_COMPONENTBUILDER_PLACEHOLDERS_EMPTYSTATE_TITLE="No placeholders have been created yet." -COM_COMPONENTBUILDER_PLACEHOLDERS_EXPORT="Placeholders Export" -COM_COMPONENTBUILDER_PLACEHOLDERS_EXPORT_DESC="Allows the users in this group to export export placeholders" -COM_COMPONENTBUILDER_PLACEHOLDERS_IMPORT="Placeholders Import" -COM_COMPONENTBUILDER_PLACEHOLDERS_IMPORT_DESC="Allows the users in this group to import import placeholders" COM_COMPONENTBUILDER_PLACEHOLDERS_N_ITEMS_ARCHIVED="%s Placeholders archived." COM_COMPONENTBUILDER_PLACEHOLDERS_N_ITEMS_ARCHIVED_1="%s Placeholder archived." COM_COMPONENTBUILDER_PLACEHOLDERS_N_ITEMS_CHECKED_IN_0="No Placeholder successfully checked in." @@ -8193,10 +8061,6 @@ COM_COMPONENTBUILDER_SERVERS_EDIT_VERSION_DESC="Allows the users in this group t COM_COMPONENTBUILDER_SERVERS_EMPTYSTATE_BUTTON_ADD="Add your first server" COM_COMPONENTBUILDER_SERVERS_EMPTYSTATE_CONTENT="" COM_COMPONENTBUILDER_SERVERS_EMPTYSTATE_TITLE="No servers have been created yet." -COM_COMPONENTBUILDER_SERVERS_EXPORT="Servers Export" -COM_COMPONENTBUILDER_SERVERS_EXPORT_DESC="Allows the users in this group to export export servers" -COM_COMPONENTBUILDER_SERVERS_IMPORT="Servers Import" -COM_COMPONENTBUILDER_SERVERS_IMPORT_DESC="Allows the users in this group to import import servers" COM_COMPONENTBUILDER_SERVERS_N_ITEMS_ARCHIVED="%s Servers archived." COM_COMPONENTBUILDER_SERVERS_N_ITEMS_ARCHIVED_1="%s Server archived." COM_COMPONENTBUILDER_SERVERS_N_ITEMS_CHECKED_IN_0="No Server successfully checked in." @@ -8337,10 +8201,6 @@ COM_COMPONENTBUILDER_SITE_VIEWS_EDIT_VERSION_DESC="Allows the users in this grou COM_COMPONENTBUILDER_SITE_VIEWS_EMPTYSTATE_BUTTON_ADD="Add your first site view" COM_COMPONENTBUILDER_SITE_VIEWS_EMPTYSTATE_CONTENT="" COM_COMPONENTBUILDER_SITE_VIEWS_EMPTYSTATE_TITLE="No site views have been created yet." -COM_COMPONENTBUILDER_SITE_VIEWS_EXPORT="Site Views Export" -COM_COMPONENTBUILDER_SITE_VIEWS_EXPORT_DESC="Allows the users in this group to export export site views" -COM_COMPONENTBUILDER_SITE_VIEWS_IMPORT="Site Views Import" -COM_COMPONENTBUILDER_SITE_VIEWS_IMPORT_DESC="Allows the users in this group to import import site views" COM_COMPONENTBUILDER_SITE_VIEWS_NAMES="Names" COM_COMPONENTBUILDER_SITE_VIEWS_N_ITEMS_ARCHIVED="%s Site Views archived." COM_COMPONENTBUILDER_SITE_VIEWS_N_ITEMS_ARCHIVED_1="%s Site View archived." @@ -8771,10 +8631,6 @@ COM_COMPONENTBUILDER_SNIPPETS_EDIT_VERSION_DESC="Allows the users in this group COM_COMPONENTBUILDER_SNIPPETS_EMPTYSTATE_BUTTON_ADD="Add your first snippet" COM_COMPONENTBUILDER_SNIPPETS_EMPTYSTATE_CONTENT="" COM_COMPONENTBUILDER_SNIPPETS_EMPTYSTATE_TITLE="No snippets have been created yet." -COM_COMPONENTBUILDER_SNIPPETS_EXPORT="Snippets Export" -COM_COMPONENTBUILDER_SNIPPETS_EXPORT_DESC="Allows the users in this group to export export snippets" -COM_COMPONENTBUILDER_SNIPPETS_IMPORT="Snippets Import" -COM_COMPONENTBUILDER_SNIPPETS_IMPORT_DESC="Allows the users in this group to import import snippets" COM_COMPONENTBUILDER_SNIPPETS_N_ITEMS_ARCHIVED="%s Snippets archived." COM_COMPONENTBUILDER_SNIPPETS_N_ITEMS_ARCHIVED_1="%s Snippet archived." COM_COMPONENTBUILDER_SNIPPETS_N_ITEMS_CHECKED_IN_0="No Snippet successfully checked in." @@ -8960,7 +8816,6 @@ COM_COMPONENTBUILDER_SUBMENU_DASHBOARD="Dashboard" COM_COMPONENTBUILDER_SUBMENU_DYNAMIC_GETS="Dynamic Gets" COM_COMPONENTBUILDER_SUBMENU_FIELDS="Fields" COM_COMPONENTBUILDER_SUBMENU_FIELDTYPES="Fieldtypes" -COM_COMPONENTBUILDER_SUBMENU_GET_SNIPPETS="Get Snippets" COM_COMPONENTBUILDER_SUBMENU_HELP_DOCUMENTS="Help Documents" COM_COMPONENTBUILDER_SUBMENU_JOOMLA_COMPONENTS="Joomla Components" COM_COMPONENTBUILDER_SUBMENU_JOOMLA_MODULES="Joomla Modules" @@ -9032,10 +8887,6 @@ COM_COMPONENTBUILDER_TEMPLATES_EDIT_VERSION_DESC="Allows the users in this group COM_COMPONENTBUILDER_TEMPLATES_EMPTYSTATE_BUTTON_ADD="Add your first template" COM_COMPONENTBUILDER_TEMPLATES_EMPTYSTATE_CONTENT="" COM_COMPONENTBUILDER_TEMPLATES_EMPTYSTATE_TITLE="No templates have been created yet." -COM_COMPONENTBUILDER_TEMPLATES_EXPORT="Templates Export" -COM_COMPONENTBUILDER_TEMPLATES_EXPORT_DESC="Allows the users in this group to export export templates" -COM_COMPONENTBUILDER_TEMPLATES_IMPORT="Templates Import" -COM_COMPONENTBUILDER_TEMPLATES_IMPORT_DESC="Allows the users in this group to import import templates" COM_COMPONENTBUILDER_TEMPLATES_NAMES="Names" COM_COMPONENTBUILDER_TEMPLATES_N_ITEMS_ARCHIVED="%s Templates archived." COM_COMPONENTBUILDER_TEMPLATES_N_ITEMS_ARCHIVED_1="%s Template archived." @@ -9231,7 +9082,6 @@ COM_COMPONENTBUILDER_TO_CHANGE_THE_PACKAGE_OWNER_DEFAULTS_OPEN_THE_BJCB_GLOBAL_O COM_COMPONENTBUILDER_TO_CHANGE_THE_PACKAGE_OWNER_DEFAULTS_OPEN_THE_JCB_GLOBAL_OPTIONS_GO_TO_THE_COMPANY_TAB_AND_ADD_THE_CORRECT_COMPANY_DETAILS_THERE="To change the package owner defaults. Open the JCB Global Options, go to the Company tab and add the correct company details there." COM_COMPONENTBUILDER_TO_SHARE_THESE_SNIPPETS_WITH_THE_REST_OF_THE_JCB_COMMUNITY="To share these snippets with the rest of the JCB community," COM_COMPONENTBUILDER_TO_SHARE_THIS_SNIPPET_WITH_THE_REST_OF_THE_JCB_COMMUNITY="To share this snippet with the rest of the JCB community," -COM_COMPONENTBUILDER_TRANSLATE="Translate" COM_COMPONENTBUILDER_TRANSLATED_IN="Translated in" COM_COMPONENTBUILDER_TRANSLATION_FAILED_SINCE_THERE_ARE_NO_COMPONENTS_LINKED_WITH_TRANSLATION_TOOLS="Translation failed, since there are no components linked with translation tools!" COM_COMPONENTBUILDER_TRASHED="Trashed" @@ -9337,10 +9187,6 @@ COM_COMPONENTBUILDER_VALIDATION_RULES_EDIT_VERSION_DESC="Allows the users in thi COM_COMPONENTBUILDER_VALIDATION_RULES_EMPTYSTATE_BUTTON_ADD="Add your first validation rule" COM_COMPONENTBUILDER_VALIDATION_RULES_EMPTYSTATE_CONTENT="" COM_COMPONENTBUILDER_VALIDATION_RULES_EMPTYSTATE_TITLE="No validation rules have been created yet." -COM_COMPONENTBUILDER_VALIDATION_RULES_EXPORT="Validation Rules Export" -COM_COMPONENTBUILDER_VALIDATION_RULES_EXPORT_DESC="Allows the users in this group to export export validation rules" -COM_COMPONENTBUILDER_VALIDATION_RULES_IMPORT="Validation Rules Import" -COM_COMPONENTBUILDER_VALIDATION_RULES_IMPORT_DESC="Allows the users in this group to import import validation rules" COM_COMPONENTBUILDER_VALIDATION_RULES_N_ITEMS_ARCHIVED="%s Validation Rules archived." COM_COMPONENTBUILDER_VALIDATION_RULES_N_ITEMS_ARCHIVED_1="%s Validation Rule archived." COM_COMPONENTBUILDER_VALIDATION_RULES_N_ITEMS_CHECKED_IN_0="No Validation Rule successfully checked in." diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini b/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini index 08d682c98..f7b9f4fe6 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini @@ -101,10 +101,6 @@ COM_COMPONENTBUILDER_ADMIN_VIEWS_EDIT_STATE="Admin Views Edit State" COM_COMPONENTBUILDER_ADMIN_VIEWS_EDIT_STATE_DESC="Allows the users in this group to update the state of the admin view" COM_COMPONENTBUILDER_ADMIN_VIEWS_EDIT_VERSION="Admin Views Edit Version" COM_COMPONENTBUILDER_ADMIN_VIEWS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version admin views" -COM_COMPONENTBUILDER_ADMIN_VIEWS_EXPORT="Admin Views Export" -COM_COMPONENTBUILDER_ADMIN_VIEWS_EXPORT_DESC="Allows the users in this group to export export admin views" -COM_COMPONENTBUILDER_ADMIN_VIEWS_IMPORT="Admin Views Import" -COM_COMPONENTBUILDER_ADMIN_VIEWS_IMPORT_DESC="Allows the users in this group to import import admin views" COM_COMPONENTBUILDER_ADMIN_VIEWS_SUBMENU="Admin Views Submenu" COM_COMPONENTBUILDER_ADMIN_VIEWS_SUBMENU_DESC="Allows the users in this group to submenu of admin view" COM_COMPONENTBUILDER_ADMIN_VIEW_RUN_EXPANSION_BUTTON_ACCESS="Admin View Run Expansion Button Access" @@ -149,10 +145,6 @@ COM_COMPONENTBUILDER_CLASS_METHODS_EDIT_STATE="Class Methods Edit State" COM_COMPONENTBUILDER_CLASS_METHODS_EDIT_STATE_DESC="Allows the users in this group to update the state of the class method" COM_COMPONENTBUILDER_CLASS_METHODS_EDIT_VERSION="Class Methods Edit Version" COM_COMPONENTBUILDER_CLASS_METHODS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version class methods" -COM_COMPONENTBUILDER_CLASS_METHODS_EXPORT="Class Methods Export" -COM_COMPONENTBUILDER_CLASS_METHODS_EXPORT_DESC="Allows the users in this group to export export class methods" -COM_COMPONENTBUILDER_CLASS_METHODS_IMPORT="Class Methods Import" -COM_COMPONENTBUILDER_CLASS_METHODS_IMPORT_DESC="Allows the users in this group to import import class methods" COM_COMPONENTBUILDER_CLASS_PROPERTIES_ACCESS="Class Properties Access" COM_COMPONENTBUILDER_CLASS_PROPERTIES_ACCESS_DESC="Allows the users in this group to access access class properties" COM_COMPONENTBUILDER_CLASS_PROPERTIES_BATCH_USE="Class Properties Batch Use" @@ -173,10 +165,6 @@ COM_COMPONENTBUILDER_CLASS_PROPERTIES_EDIT_STATE="Class Properties Edit State" COM_COMPONENTBUILDER_CLASS_PROPERTIES_EDIT_STATE_DESC="Allows the users in this group to update the state of the class property" COM_COMPONENTBUILDER_CLASS_PROPERTIES_EDIT_VERSION="Class Properties Edit Version" COM_COMPONENTBUILDER_CLASS_PROPERTIES_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version class properties" -COM_COMPONENTBUILDER_CLASS_PROPERTIES_EXPORT="Class Properties Export" -COM_COMPONENTBUILDER_CLASS_PROPERTIES_EXPORT_DESC="Allows the users in this group to export export class properties" -COM_COMPONENTBUILDER_CLASS_PROPERTIES_IMPORT="Class Properties Import" -COM_COMPONENTBUILDER_CLASS_PROPERTIES_IMPORT_DESC="Allows the users in this group to import import class properties" COM_COMPONENTBUILDER_COMPILER_ACCESS="Compiler Access" COM_COMPONENTBUILDER_COMPILER_ACCESS_DESC="Allows the users in this group to access compiler." COM_COMPONENTBUILDER_COMPILER_CLEAR_TMP_BUTTON_ACCESS="Compiler Clear tmp Button Access" @@ -185,12 +173,8 @@ COM_COMPONENTBUILDER_COMPILER_COMPILER_ANIMATIONS_BUTTON_ACCESS="Compiler Compil COM_COMPONENTBUILDER_COMPILER_COMPILER_ANIMATIONS_BUTTON_ACCESS_DESC="Allows the users in this group to access the compiler animations button." COM_COMPONENTBUILDER_COMPILER_DASHBOARD_LIST="Compiler Dashboard List" COM_COMPONENTBUILDER_COMPILER_DASHBOARD_LIST_DESC="Allows the users in this group to dashboard list of Compiler" -COM_COMPONENTBUILDER_COMPILER_RUN_EXPANSION_BUTTON_ACCESS="Compiler Run Expansion Button Access" -COM_COMPONENTBUILDER_COMPILER_RUN_EXPANSION_BUTTON_ACCESS_DESC="Allows the users in this group to access the run expansion button." COM_COMPONENTBUILDER_COMPILER_SUBMENU="Compiler Submenu" COM_COMPONENTBUILDER_COMPILER_SUBMENU_DESC="Allows the users in this group to submenu of Compiler" -COM_COMPONENTBUILDER_COMPILER_TRANSLATE_BUTTON_ACCESS="Compiler Translate Button Access" -COM_COMPONENTBUILDER_COMPILER_TRANSLATE_BUTTON_ACCESS_DESC="Allows the users in this group to access the translate button." COM_COMPONENTBUILDER_COMPONENTS_ADMIN_VIEWS_ACCESS="Components Admin Views Access" COM_COMPONENTBUILDER_COMPONENTS_ADMIN_VIEWS_ACCESS_DESC="Allows the users in this group to access access components admin views" COM_COMPONENTBUILDER_COMPONENTS_ADMIN_VIEWS_BATCH_USE="Components Admin Views Batch Use" @@ -470,10 +454,6 @@ COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EDIT_STATE="Custom Admin Views Edit Stat COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EDIT_STATE_DESC="Allows the users in this group to update the state of the custom admin view" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EDIT_VERSION="Custom Admin Views Edit Version" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version custom admin views" -COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EXPORT="Custom Admin Views Export" -COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EXPORT_DESC="Allows the users in this group to export export custom admin views" -COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_IMPORT="Custom Admin Views Import" -COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_IMPORT_DESC="Allows the users in this group to import import custom admin views" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_SUBMENU="Custom Admin Views Submenu" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_SUBMENU_DESC="Allows the users in this group to submenu of custom admin view" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_GET_SNIPPETS_BUTTON_ACCESS="Custom Admin View Get Snippets Button Access" @@ -500,10 +480,6 @@ COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_STATE="Custom Codes Edit State" COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_STATE_DESC="Allows the users in this group to update the state of the custom code" COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_VERSION="Custom Codes Edit Version" COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version custom codes" -COM_COMPONENTBUILDER_CUSTOM_CODES_EXPORT="Custom Codes Export" -COM_COMPONENTBUILDER_CUSTOM_CODES_EXPORT_DESC="Allows the users in this group to export export custom codes" -COM_COMPONENTBUILDER_CUSTOM_CODES_IMPORT="Custom Codes Import" -COM_COMPONENTBUILDER_CUSTOM_CODES_IMPORT_DESC="Allows the users in this group to import import custom codes" COM_COMPONENTBUILDER_CUSTOM_CODES_SUBMENU="Custom Codes Submenu" COM_COMPONENTBUILDER_CUSTOM_CODES_SUBMENU_DESC="Allows the users in this group to submenu of custom code" COM_COMPONENTBUILDER_CUSTOM_CODE_RUN_EXPANSION_BUTTON_ACCESS="Custom Code Run Expansion Button Access" @@ -528,10 +504,6 @@ COM_COMPONENTBUILDER_DYNAMIC_GETS_EDIT_STATE="Dynamic Gets Edit State" COM_COMPONENTBUILDER_DYNAMIC_GETS_EDIT_STATE_DESC="Allows the users in this group to update the state of the dynamic get" COM_COMPONENTBUILDER_DYNAMIC_GETS_EDIT_VERSION="Dynamic Gets Edit Version" COM_COMPONENTBUILDER_DYNAMIC_GETS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version dynamic gets" -COM_COMPONENTBUILDER_DYNAMIC_GETS_EXPORT="Dynamic Gets Export" -COM_COMPONENTBUILDER_DYNAMIC_GETS_EXPORT_DESC="Allows the users in this group to export export dynamic gets" -COM_COMPONENTBUILDER_DYNAMIC_GETS_IMPORT="Dynamic Gets Import" -COM_COMPONENTBUILDER_DYNAMIC_GETS_IMPORT_DESC="Allows the users in this group to import import dynamic gets" COM_COMPONENTBUILDER_DYNAMIC_GETS_SUBMENU="Dynamic Gets Submenu" COM_COMPONENTBUILDER_DYNAMIC_GETS_SUBMENU_DESC="Allows the users in this group to submenu of dynamic get" COM_COMPONENTBUILDER_DYNAMIC_GET_RUN_EXPANSION_BUTTON_ACCESS="Dynamic Get Run Expansion Button Access" @@ -542,8 +514,6 @@ COM_COMPONENTBUILDER_EDIT_CREATED_DATE="Edit Created Date" COM_COMPONENTBUILDER_EDIT_CREATED_DATE_DESC="Allows users in this group to edit created date." COM_COMPONENTBUILDER_EDIT_VERSIONS="Edit Version" COM_COMPONENTBUILDER_EDIT_VERSIONS_DESC="Allows users in this group to edit versions." -COM_COMPONENTBUILDER_EXPORT_DATA="Export Data" -COM_COMPONENTBUILDER_EXPORT_DATA_DESC="Allows users in this group to export data." COM_COMPONENTBUILDER_FIELDS_ACCESS="Fields Access" COM_COMPONENTBUILDER_FIELDS_ACCESS_DESC="Allows the users in this group to access access fields" COM_COMPONENTBUILDER_FIELDS_BATCH_USE="Fields Batch Use" @@ -564,10 +534,6 @@ COM_COMPONENTBUILDER_FIELDS_EDIT_STATE="Fields Edit State" COM_COMPONENTBUILDER_FIELDS_EDIT_STATE_DESC="Allows the users in this group to update the state of the field" COM_COMPONENTBUILDER_FIELDS_EDIT_VERSION="Fields Edit Version" COM_COMPONENTBUILDER_FIELDS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version fields" -COM_COMPONENTBUILDER_FIELDS_EXPORT="Fields Export" -COM_COMPONENTBUILDER_FIELDS_EXPORT_DESC="Allows the users in this group to export export fields" -COM_COMPONENTBUILDER_FIELDS_IMPORT="Fields Import" -COM_COMPONENTBUILDER_FIELDS_IMPORT_DESC="Allows the users in this group to import import fields" COM_COMPONENTBUILDER_FIELDS_SUBMENU="Fields Submenu" COM_COMPONENTBUILDER_FIELDS_SUBMENU_DESC="Allows the users in this group to submenu of field" COM_COMPONENTBUILDER_FIELDTYPES_ACCESS="Fieldtypes Access" @@ -588,10 +554,6 @@ COM_COMPONENTBUILDER_FIELDTYPES_EDIT_STATE="Fieldtypes Edit State" COM_COMPONENTBUILDER_FIELDTYPES_EDIT_STATE_DESC="Allows the users in this group to update the state of the fieldtype" COM_COMPONENTBUILDER_FIELDTYPES_EDIT_VERSION="Fieldtypes Edit Version" COM_COMPONENTBUILDER_FIELDTYPES_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version fieldtypes" -COM_COMPONENTBUILDER_FIELDTYPES_EXPORT="Fieldtypes Export" -COM_COMPONENTBUILDER_FIELDTYPES_EXPORT_DESC="Allows the users in this group to export export fieldtypes" -COM_COMPONENTBUILDER_FIELDTYPES_IMPORT="Fieldtypes Import" -COM_COMPONENTBUILDER_FIELDTYPES_IMPORT_DESC="Allows the users in this group to import import fieldtypes" COM_COMPONENTBUILDER_FIELDTYPES_SUBMENU="Fieldtypes Submenu" COM_COMPONENTBUILDER_FIELDTYPES_SUBMENU_DESC="Allows the users in this group to submenu of fieldtype" COM_COMPONENTBUILDER_FIELD_RUN_EXPANSION_BUTTON_ACCESS="Field Run Expansion Button Access" @@ -600,8 +562,6 @@ COM_COMPONENTBUILDER_GET_SNIPPETS_ACCESS="Get Snippets Access" COM_COMPONENTBUILDER_GET_SNIPPETS_ACCESS_DESC="Allows the users in this group to access get snippets." COM_COMPONENTBUILDER_GET_SNIPPETS_CUSTOM_ADMIN_VIEWS_BUTTON_ACCESS="Get Snippets Custom Admin Views Button Access" COM_COMPONENTBUILDER_GET_SNIPPETS_CUSTOM_ADMIN_VIEWS_BUTTON_ACCESS_DESC="Allows the users in this group to access the custom admin views button." -COM_COMPONENTBUILDER_GET_SNIPPETS_DASHBOARD_LIST="Get Snippets Dashboard List" -COM_COMPONENTBUILDER_GET_SNIPPETS_DASHBOARD_LIST_DESC="Allows the users in this group to dashboard list of Get Snippets" COM_COMPONENTBUILDER_GET_SNIPPETS_LAYOUTS_BUTTON_ACCESS="Get Snippets Layouts Button Access" COM_COMPONENTBUILDER_GET_SNIPPETS_LAYOUTS_BUTTON_ACCESS_DESC="Allows the users in this group to access the layouts button." COM_COMPONENTBUILDER_GET_SNIPPETS_LIBRARIES_BUTTON_ACCESS="Get Snippets Libraries Button Access" @@ -610,8 +570,6 @@ COM_COMPONENTBUILDER_GET_SNIPPETS_SITE_VIEWS_BUTTON_ACCESS="Get Snippets Site Vi COM_COMPONENTBUILDER_GET_SNIPPETS_SITE_VIEWS_BUTTON_ACCESS_DESC="Allows the users in this group to access the site views button." COM_COMPONENTBUILDER_GET_SNIPPETS_SNIPPETS_BUTTON_ACCESS="Get Snippets Snippets Button Access" COM_COMPONENTBUILDER_GET_SNIPPETS_SNIPPETS_BUTTON_ACCESS_DESC="Allows the users in this group to access the snippets button." -COM_COMPONENTBUILDER_GET_SNIPPETS_SUBMENU="Get Snippets Submenu" -COM_COMPONENTBUILDER_GET_SNIPPETS_SUBMENU_DESC="Allows the users in this group to submenu of Get Snippets" COM_COMPONENTBUILDER_GET_SNIPPETS_TEMPLATES_BUTTON_ACCESS="Get Snippets Templates Button Access" COM_COMPONENTBUILDER_GET_SNIPPETS_TEMPLATES_BUTTON_ACCESS_DESC="Allows the users in this group to access the templates button." COM_COMPONENTBUILDER_HELP_DOCUMENTS_ACCESS="Help Documents Access" @@ -632,14 +590,8 @@ COM_COMPONENTBUILDER_HELP_DOCUMENTS_EDIT_STATE="Help Documents Edit State" COM_COMPONENTBUILDER_HELP_DOCUMENTS_EDIT_STATE_DESC="Allows the users in this group to update the state of the help document" COM_COMPONENTBUILDER_HELP_DOCUMENTS_EDIT_VERSION="Help Documents Edit Version" COM_COMPONENTBUILDER_HELP_DOCUMENTS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version help documents" -COM_COMPONENTBUILDER_HELP_DOCUMENTS_EXPORT="Help Documents Export" -COM_COMPONENTBUILDER_HELP_DOCUMENTS_EXPORT_DESC="Allows the users in this group to export export help documents" -COM_COMPONENTBUILDER_HELP_DOCUMENTS_IMPORT="Help Documents Import" -COM_COMPONENTBUILDER_HELP_DOCUMENTS_IMPORT_DESC="Allows the users in this group to import import help documents" COM_COMPONENTBUILDER_HELP_DOCUMENTS_SUBMENU="Help Documents Submenu" COM_COMPONENTBUILDER_HELP_DOCUMENTS_SUBMENU_DESC="Allows the users in this group to submenu of help document" -COM_COMPONENTBUILDER_IMPORT_DATA="Import Data" -COM_COMPONENTBUILDER_IMPORT_DATA_DESC="Allows users in this group to import data." COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_ACCESS="Joomla Components Access" COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_ACCESS_DESC="Allows the users in this group to access access joomla components" COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_BATCH_USE="Joomla Components Batch Use" @@ -664,18 +616,8 @@ COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_VERSION="Joomla Components Edit Vers COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version joomla components" COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_SUBMENU="Joomla Components Submenu" COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_SUBMENU_DESC="Allows the users in this group to submenu of joomla component" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BACKUP_BUTTON_ACCESS="Joomla Component Backup Button Access" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BACKUP_BUTTON_ACCESS_DESC="Allows the users in this group to access the backup button." COM_COMPONENTBUILDER_JOOMLA_COMPONENT_CLEAR_TMP_BUTTON_ACCESS="Joomla Component Clear tmp Button Access" COM_COMPONENTBUILDER_JOOMLA_COMPONENT_CLEAR_TMP_BUTTON_ACCESS_DESC="Allows the users in this group to access the clear tmp button." -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_CLONE_BUTTON_ACCESS="Joomla Component Clone Button Access" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_CLONE_BUTTON_ACCESS_DESC="Allows the users in this group to access the clone button." -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_JCB_PACKAGES_BUTTON_ACCESS="Joomla Component Export JCB Packages Button Access" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_JCB_PACKAGES_BUTTON_ACCESS_DESC="Allows the users in this group to access the export jcb packages button." -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_IMPORT_JCB_PACKAGES_BUTTON_ACCESS="Joomla Component Import JCB Packages Button Access" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_IMPORT_JCB_PACKAGES_BUTTON_ACCESS_DESC="Allows the users in this group to access the import jcb packages button." -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_RUN_EXPANSION_BUTTON_ACCESS="Joomla Component Run Expansion Button Access" -COM_COMPONENTBUILDER_JOOMLA_COMPONENT_RUN_EXPANSION_BUTTON_ACCESS_DESC="Allows the users in this group to access the run expansion button." COM_COMPONENTBUILDER_JOOMLA_MODULES_ACCESS="Joomla Modules Access" COM_COMPONENTBUILDER_JOOMLA_MODULES_ACCESS_DESC="Allows the users in this group to access access joomla modules" COM_COMPONENTBUILDER_JOOMLA_MODULES_BATCH_USE="Joomla Modules Batch Use" @@ -698,8 +640,6 @@ COM_COMPONENTBUILDER_JOOMLA_MODULES_EDIT_STATE="Joomla Modules Edit State" COM_COMPONENTBUILDER_JOOMLA_MODULES_EDIT_STATE_DESC="Allows the users in this group to update the state of the joomla module" COM_COMPONENTBUILDER_JOOMLA_MODULES_EDIT_VERSION="Joomla Modules Edit Version" COM_COMPONENTBUILDER_JOOMLA_MODULES_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version joomla modules" -COM_COMPONENTBUILDER_JOOMLA_MODULES_EXPORT="Joomla Modules Export" -COM_COMPONENTBUILDER_JOOMLA_MODULES_EXPORT_DESC="Allows the users in this group to export export joomla modules" COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_ACCESS="Joomla Modules Files Folders Urls Access" COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_ACCESS_DESC="Allows the users in this group to access access joomla modules files folders urls" COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_BATCH_USE="Joomla Modules Files Folders Urls Batch Use" @@ -720,8 +660,6 @@ COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_EDIT_STATE="Joomla Module COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_EDIT_STATE_DESC="Allows the users in this group to update the state of the joomla module files folders urls" COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_EDIT_VERSION="Joomla Modules Files Folders Urls Edit Version" COM_COMPONENTBUILDER_JOOMLA_MODULES_FILES_FOLDERS_URLS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version joomla modules files folders urls" -COM_COMPONENTBUILDER_JOOMLA_MODULES_IMPORT="Joomla Modules Import" -COM_COMPONENTBUILDER_JOOMLA_MODULES_IMPORT_DESC="Allows the users in this group to import import joomla modules" COM_COMPONENTBUILDER_JOOMLA_MODULES_SUBMENU="Joomla Modules Submenu" COM_COMPONENTBUILDER_JOOMLA_MODULES_SUBMENU_DESC="Allows the users in this group to submenu of joomla module" COM_COMPONENTBUILDER_JOOMLA_MODULES_UPDATES_ACCESS="Joomla Modules Updates Access" @@ -858,6 +796,8 @@ COM_COMPONENTBUILDER_LANGUAGES_BATCH_USE="Languages Batch Use" COM_COMPONENTBUILDER_LANGUAGES_BATCH_USE_DESC="Allows the users in this group to use batch copy/update method of batch languages" COM_COMPONENTBUILDER_LANGUAGES_CREATE="Languages Create" COM_COMPONENTBUILDER_LANGUAGES_CREATE_DESC="Allows the users in this group to create create languages" +COM_COMPONENTBUILDER_LANGUAGES_DASHBOARD_LIST="Languages Dashboard List" +COM_COMPONENTBUILDER_LANGUAGES_DASHBOARD_LIST_DESC="Allows the users in this group to dashboard list of language" COM_COMPONENTBUILDER_LANGUAGES_DELETE="Languages Delete" COM_COMPONENTBUILDER_LANGUAGES_DELETE_DESC="Allows the users in this group to delete delete languages" COM_COMPONENTBUILDER_LANGUAGES_EDIT="Languages Edit" @@ -868,10 +808,6 @@ COM_COMPONENTBUILDER_LANGUAGES_EDIT_STATE="Languages Edit State" COM_COMPONENTBUILDER_LANGUAGES_EDIT_STATE_DESC="Allows the users in this group to update the state of the language" COM_COMPONENTBUILDER_LANGUAGES_EDIT_VERSION="Languages Edit Version" COM_COMPONENTBUILDER_LANGUAGES_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version languages" -COM_COMPONENTBUILDER_LANGUAGES_EXPORT="Languages Export" -COM_COMPONENTBUILDER_LANGUAGES_EXPORT_DESC="Allows the users in this group to export export languages" -COM_COMPONENTBUILDER_LANGUAGES_IMPORT="Languages Import" -COM_COMPONENTBUILDER_LANGUAGES_IMPORT_DESC="Allows the users in this group to import import languages" COM_COMPONENTBUILDER_LANGUAGES_SUBMENU="Languages Submenu" COM_COMPONENTBUILDER_LANGUAGES_SUBMENU_DESC="Allows the users in this group to submenu of language" COM_COMPONENTBUILDER_LANGUAGE_BUILD_BUTTON_ACCESS="Language Build Button Access" @@ -894,10 +830,6 @@ COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_STATE="Language Translations Edi COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_STATE_DESC="Allows the users in this group to update the state of the language translation" COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_VERSION="Language Translations Edit Version" COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version language translations" -COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EXPORT="Language Translations Export" -COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EXPORT_DESC="Allows the users in this group to export export language translations" -COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_IMPORT="Language Translations Import" -COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_IMPORT_DESC="Allows the users in this group to import import language translations" COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_SUBMENU="Language Translations Submenu" COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_SUBMENU_DESC="Allows the users in this group to submenu of language translation" COM_COMPONENTBUILDER_LAYOUTS_ACCESS="Layouts Access" @@ -918,10 +850,6 @@ COM_COMPONENTBUILDER_LAYOUTS_EDIT_STATE="Layouts Edit State" COM_COMPONENTBUILDER_LAYOUTS_EDIT_STATE_DESC="Allows the users in this group to update the state of the layout" COM_COMPONENTBUILDER_LAYOUTS_EDIT_VERSION="Layouts Edit Version" COM_COMPONENTBUILDER_LAYOUTS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version layouts" -COM_COMPONENTBUILDER_LAYOUTS_EXPORT="Layouts Export" -COM_COMPONENTBUILDER_LAYOUTS_EXPORT_DESC="Allows the users in this group to export export layouts" -COM_COMPONENTBUILDER_LAYOUTS_IMPORT="Layouts Import" -COM_COMPONENTBUILDER_LAYOUTS_IMPORT_DESC="Allows the users in this group to import import layouts" COM_COMPONENTBUILDER_LAYOUTS_SUBMENU="Layouts Submenu" COM_COMPONENTBUILDER_LAYOUTS_SUBMENU_DESC="Allows the users in this group to submenu of layout" COM_COMPONENTBUILDER_LAYOUT_GET_SNIPPETS_BUTTON_ACCESS="Layout Get Snippets Button Access" @@ -997,18 +925,19 @@ COM_COMPONENTBUILDER_MENU_DASHBOARD="Dashboard" COM_COMPONENTBUILDER_MENU_DYNAMIC_GETS="Dynamic Gets" COM_COMPONENTBUILDER_MENU_FIELDS="Fields" COM_COMPONENTBUILDER_MENU_FIELDTYPES="Fieldtypes" -COM_COMPONENTBUILDER_MENU_GET_SNIPPETS="Get Snippets" COM_COMPONENTBUILDER_MENU_HELP_DOCUMENTS="Help Documents" COM_COMPONENTBUILDER_MENU_JOOMLA_COMPONENTS="Joomla Components" COM_COMPONENTBUILDER_MENU_JOOMLA_MODULES="Joomla Modules" COM_COMPONENTBUILDER_MENU_JOOMLA_PLUGINS="Joomla Plugins" COM_COMPONENTBUILDER_MENU_JOOMLA_POWERS="Joomla Powers" +COM_COMPONENTBUILDER_MENU_LANGUAGES="Languages" COM_COMPONENTBUILDER_MENU_LANGUAGE_TRANSLATIONS="Language Translations" COM_COMPONENTBUILDER_MENU_LAYOUTS="Layouts" COM_COMPONENTBUILDER_MENU_LIBRARIES="Libraries" COM_COMPONENTBUILDER_MENU_PLACEHOLDERS="Placeholders" COM_COMPONENTBUILDER_MENU_POWERS="Powers" COM_COMPONENTBUILDER_MENU_SEARCH="Search" +COM_COMPONENTBUILDER_MENU_SERVERS="Servers" COM_COMPONENTBUILDER_MENU_SITE_VIEWS="Site Views" COM_COMPONENTBUILDER_MENU_SNIPPETS="Snippets" COM_COMPONENTBUILDER_MENU_TEMPLATES="Templates" @@ -1031,10 +960,6 @@ COM_COMPONENTBUILDER_PLACEHOLDERS_EDIT_STATE="Placeholders Edit State" COM_COMPONENTBUILDER_PLACEHOLDERS_EDIT_STATE_DESC="Allows the users in this group to update the state of the placeholder" COM_COMPONENTBUILDER_PLACEHOLDERS_EDIT_VERSION="Placeholders Edit Version" COM_COMPONENTBUILDER_PLACEHOLDERS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version placeholders" -COM_COMPONENTBUILDER_PLACEHOLDERS_EXPORT="Placeholders Export" -COM_COMPONENTBUILDER_PLACEHOLDERS_EXPORT_DESC="Allows the users in this group to export export placeholders" -COM_COMPONENTBUILDER_PLACEHOLDERS_IMPORT="Placeholders Import" -COM_COMPONENTBUILDER_PLACEHOLDERS_IMPORT_DESC="Allows the users in this group to import import placeholders" COM_COMPONENTBUILDER_PLACEHOLDERS_SUBMENU="Placeholders Submenu" COM_COMPONENTBUILDER_PLACEHOLDERS_SUBMENU_DESC="Allows the users in this group to submenu of placeholder" COM_COMPONENTBUILDER_POWERS_ACCESS="Powers Access" @@ -1097,10 +1022,6 @@ COM_COMPONENTBUILDER_SERVERS_EDIT_STATE="Servers Edit State" COM_COMPONENTBUILDER_SERVERS_EDIT_STATE_DESC="Allows the users in this group to update the state of the server" COM_COMPONENTBUILDER_SERVERS_EDIT_VERSION="Servers Edit Version" COM_COMPONENTBUILDER_SERVERS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version servers" -COM_COMPONENTBUILDER_SERVERS_EXPORT="Servers Export" -COM_COMPONENTBUILDER_SERVERS_EXPORT_DESC="Allows the users in this group to export export servers" -COM_COMPONENTBUILDER_SERVERS_IMPORT="Servers Import" -COM_COMPONENTBUILDER_SERVERS_IMPORT_DESC="Allows the users in this group to import import servers" COM_COMPONENTBUILDER_SERVERS_SUBMENU="Servers Submenu" COM_COMPONENTBUILDER_SERVERS_SUBMENU_DESC="Allows the users in this group to submenu of server" COM_COMPONENTBUILDER_SITE_VIEWS_ACCESS="Site Views Access" @@ -1121,10 +1042,6 @@ COM_COMPONENTBUILDER_SITE_VIEWS_EDIT_STATE="Site Views Edit State" COM_COMPONENTBUILDER_SITE_VIEWS_EDIT_STATE_DESC="Allows the users in this group to update the state of the site view" COM_COMPONENTBUILDER_SITE_VIEWS_EDIT_VERSION="Site Views Edit Version" COM_COMPONENTBUILDER_SITE_VIEWS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version site views" -COM_COMPONENTBUILDER_SITE_VIEWS_EXPORT="Site Views Export" -COM_COMPONENTBUILDER_SITE_VIEWS_EXPORT_DESC="Allows the users in this group to export export site views" -COM_COMPONENTBUILDER_SITE_VIEWS_IMPORT="Site Views Import" -COM_COMPONENTBUILDER_SITE_VIEWS_IMPORT_DESC="Allows the users in this group to import import site views" COM_COMPONENTBUILDER_SITE_VIEWS_SUBMENU="Site Views Submenu" COM_COMPONENTBUILDER_SITE_VIEWS_SUBMENU_DESC="Allows the users in this group to submenu of site view" COM_COMPONENTBUILDER_SITE_VIEW_GET_SNIPPETS_BUTTON_ACCESS="Site View Get Snippets Button Access" @@ -1147,10 +1064,6 @@ COM_COMPONENTBUILDER_SNIPPETS_EDIT_STATE="Snippets Edit State" COM_COMPONENTBUILDER_SNIPPETS_EDIT_STATE_DESC="Allows the users in this group to update the state of the snippet" COM_COMPONENTBUILDER_SNIPPETS_EDIT_VERSION="Snippets Edit Version" COM_COMPONENTBUILDER_SNIPPETS_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version snippets" -COM_COMPONENTBUILDER_SNIPPETS_EXPORT="Snippets Export" -COM_COMPONENTBUILDER_SNIPPETS_EXPORT_DESC="Allows the users in this group to export export snippets" -COM_COMPONENTBUILDER_SNIPPETS_IMPORT="Snippets Import" -COM_COMPONENTBUILDER_SNIPPETS_IMPORT_DESC="Allows the users in this group to import import snippets" COM_COMPONENTBUILDER_SNIPPETS_SUBMENU="Snippets Submenu" COM_COMPONENTBUILDER_SNIPPETS_SUBMENU_DESC="Allows the users in this group to submenu of snippet" COM_COMPONENTBUILDER_SNIPPET_GET_SNIPPETS_BUTTON_ACCESS="Snippet Get Snippets Button Access" @@ -1193,10 +1106,6 @@ COM_COMPONENTBUILDER_TEMPLATES_EDIT_STATE="Templates Edit State" COM_COMPONENTBUILDER_TEMPLATES_EDIT_STATE_DESC="Allows the users in this group to update the state of the template" COM_COMPONENTBUILDER_TEMPLATES_EDIT_VERSION="Templates Edit Version" COM_COMPONENTBUILDER_TEMPLATES_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version templates" -COM_COMPONENTBUILDER_TEMPLATES_EXPORT="Templates Export" -COM_COMPONENTBUILDER_TEMPLATES_EXPORT_DESC="Allows the users in this group to export export templates" -COM_COMPONENTBUILDER_TEMPLATES_IMPORT="Templates Import" -COM_COMPONENTBUILDER_TEMPLATES_IMPORT_DESC="Allows the users in this group to import import templates" COM_COMPONENTBUILDER_TEMPLATES_SUBMENU="Templates Submenu" COM_COMPONENTBUILDER_TEMPLATES_SUBMENU_DESC="Allows the users in this group to submenu of template" COM_COMPONENTBUILDER_TEMPLATE_GET_SNIPPETS_BUTTON_ACCESS="Template Get Snippets Button Access" @@ -1221,10 +1130,6 @@ COM_COMPONENTBUILDER_VALIDATION_RULES_EDIT_STATE="Validation Rules Edit State" COM_COMPONENTBUILDER_VALIDATION_RULES_EDIT_STATE_DESC="Allows the users in this group to update the state of the validation rule" COM_COMPONENTBUILDER_VALIDATION_RULES_EDIT_VERSION="Validation Rules Edit Version" COM_COMPONENTBUILDER_VALIDATION_RULES_EDIT_VERSION_DESC="Allows the users in this group to edit versions of version validation rules" -COM_COMPONENTBUILDER_VALIDATION_RULES_EXPORT="Validation Rules Export" -COM_COMPONENTBUILDER_VALIDATION_RULES_EXPORT_DESC="Allows the users in this group to export export validation rules" -COM_COMPONENTBUILDER_VALIDATION_RULES_IMPORT="Validation Rules Import" -COM_COMPONENTBUILDER_VALIDATION_RULES_IMPORT_DESC="Allows the users in this group to import import validation rules" COM_COMPONENTBUILDER_VALIDATION_RULES_SUBMENU="Validation Rules Submenu" COM_COMPONENTBUILDER_VALIDATION_RULES_SUBMENU_DESC="Allows the users in this group to submenu of validation rule" COM_COMPONENTBUILDER_VALIDATION_RULE_RUN_EXPANSION_BUTTON_ACCESS="Validation Rule Run Expansion Button Access" diff --git a/admin/layouts/fieldtype/fields_fullwidth.php b/admin/layouts/fieldtype/fields_fullwidth.php index 9fdf70192..9e81f88e1 100644 --- a/admin/layouts/fieldtype/fields_fullwidth.php +++ b/admin/layouts/fieldtype/fields_fullwidth.php @@ -20,7 +20,7 @@ use VDM\Joomla\Utilities\ArrayHelper; defined('_JEXEC') or die; // set the defaults -$items = $displayData->vxtfields; +$items = $displayData->vxsfields; $user = Factory::getApplication()->getIdentity(); $id = $displayData->item->id; // set the edit URL diff --git a/admin/layouts/server/linked_components_fullwidth.php b/admin/layouts/server/linked_components_fullwidth.php index b3ce94f3c..56499febe 100644 --- a/admin/layouts/server/linked_components_fullwidth.php +++ b/admin/layouts/server/linked_components_fullwidth.php @@ -13,261 +13,17 @@ use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; -use VDM\Joomla\Utilities\StringHelper; -use VDM\Joomla\Utilities\ArrayHelper; -use VDM\Joomla\Utilities\GetHelper; // No direct access to this file defined('_JEXEC') or die; // set the defaults -$items = $displayData->vydlinked_components; +$items = $displayData->vyclinked_components; $user = Factory::getApplication()->getIdentity(); $id = $displayData->item->id; -// set the edit URL -$edit = "index.php?option=com_componentbuilder&view=joomla_components&task=joomla_component.edit"; -// set a return value -$return = ($id) ? "index.php?option=com_componentbuilder&view=server&layout=edit&id=" . $id : ""; -// check for a return value -$jinput = Factory::getApplication()->input; -if ($_return = $jinput->get('return', null, 'base64')) -{ - $return .= "&return=" . $_return; -} -// check if return value was set -if (StringHelper::check($return)) -{ - // set the referral values - $ref = ($id) ? "&ref=server&refid=" . $id . "&return=" . urlencode(base64_encode($return)) : "&return=" . urlencode(base64_encode($return)); -} -else -{ - $ref = ($id) ? "&ref=server&refid=" . $id : ""; -} + ?>
- - - - - - - - - - - - - - $item): ?> - authorise('core.manage', 'com_checkin') || $item->checked_out == $user->id || $item->checked_out == 0; - $userChkOut = Factory::getContainer()-> - get(\Joomla\CMS\User\UserFactoryInterface::class)-> - loadUserById($item->checked_out); - $canDo = ComponentbuilderHelper::getActions('joomla_component',$item,'joomla_components'); - ?> - - - - - - published == 1): ?> - - published == 0): ?> - - published == 2): ?> - - published == -2): ?> - - - - - - -
- - - - - - - - - - - -
-
- get('joomla_component.edit')): ?> - escape($item->system_name); ?> - checked_out): ?> - name, $item->checked_out_time, 'joomla_components.', $canCheckin); ?> - - - escape($item->system_name); ?> - - - escape($item->component_version); ?> -
- return_here is set - if (!isset($this->return_here)) - { - $this->return_here = urlencode(base64_encode((string) Uri::getInstance())); - } - // setup the buttons - if (!isset($_buttons) || !ArrayHelper::check($_buttons)) - { - $_buttons = array(); - $_buttons[0] = array( - array( - 'view' => 'component_admin_views', - 'views' => 'components_admin_views', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_ADMIN_VIEWS'), - 'icon' => 'stack'), - array( - 'view' => 'component_custom_admin_views', - 'views' => 'components_custom_admin_views', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_CUSTOM_ADMIN_VIEWS'), - 'icon' => 'screen'), - array( - 'view' => 'component_site_views', - 'views' => 'components_site_views', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_SITE_VIEWS'), - 'icon' => 'palette'), - array( - 'view' => 'component_router', - 'views' => 'components_routers', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_SITE_ROUTER'), - 'icon' => 'tree-2'), - array( - 'view' => 'component_config', - 'views' => 'components_config', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_CONFIG'), - 'icon' => 'options') - ); - $_buttons[1] = array( - array( - 'view' => 'component_placeholders', - 'views' => 'components_placeholders', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_PLACEHOLDERS'), - 'icon' => 'search'), - array( - 'view' => 'component_updates', - 'views' => 'components_updates', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_UPDATES'), - 'icon' => 'database'), - array( - 'view' => 'component_mysql_tweaks', - 'views' => 'components_mysql_tweaks', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_MYSQL_TWEAKS'), - 'icon' => 'screwdriver'), - array( - 'view' => 'component_files_folders', - 'views' => 'components_files_folders', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_FILES_FOLDERS'), - 'icon' => 'briefcase') - ); - $_buttons[2] = array( - array( - 'view' => 'component_custom_admin_menus', - 'views' => 'components_custom_admin_menus', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_CUSTOM_ADMIN_MENUS'), - 'icon' => 'plus'), - array( - 'view' => 'component_dashboard', - 'views' => 'components_dashboard', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_DASHBOARD'), - 'icon' => 'dashboard'), - array( - 'view' => 'component_modules', - 'views' => 'components_modules', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_MODULES'), - 'icon' => 'cube'), - array( - 'view' => 'component_plugins', - 'views' => 'components_plugins', - 'title' => Text::_('COM_COMPONENTBUILDER_THE_COMPONENT_PLUGINS'), - 'icon' => 'power-cord') - ); - } - ?> -
- - get($_button['view'].'.edit') && ($id = GetHelper::var($_button['view'], $item->id, 'joomla_component', 'id')) !== false): ?> - - get($_button['view'].'.create')): ?> - - - - -
-
-
- escape($item->name_code); ?> -
-
- - get($_button['view'].'.edit') && ($id = GetHelper::var($_button['view'], $item->id, 'joomla_component', 'id')) !== false): ?> - - get($_button['view'].'.create')): ?> - - - -
-
-
- escape($item->short_description); ?> -
-
- - get($_button['view'].'.edit') && ($id = GetHelper::var($_button['view'], $item->id, 'joomla_component', 'id')) !== false): ?> - - get($_button['view'].'.create')): ?> - - - -
-
-
escape($item->companyname); ?>
- author)) : ?> - escape($item->author); ?>
- - email) && StringHelper::check($item->author)) : ?> - - escape($item->email); ?> - -
- - website) && StringHelper::check($item->author)) : ?> - - escape($item->website); ?> - - -
-
- - - - - - - - - - - - - - - - - id; ?> -
- -
- -
- +oops! error.....
diff --git a/admin/services/provider.php b/admin/services/provider.php index 9b7515aa2..ae44b3e45 100644 --- a/admin/services/provider.php +++ b/admin/services/provider.php @@ -9,7 +9,7 @@ * @license GNU General Public License version 2 or later; see LICENSE.txt */ -// The power autoloader for this project admin area. +// The power autoloader for this project (JPATH_ADMINISTRATOR) area. $power_autoloader = JPATH_ADMINISTRATOR . '/components/com_componentbuilder/src/Helper/PowerloaderHelper.php'; if (file_exists($power_autoloader)) { diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql index 6c450c082..4aac1cae4 100644 --- a/admin/sql/install.mysql.utf8.sql +++ b/admin/sql/install.mysql.utf8.sql @@ -2048,7 +2048,90 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_plugin_files_folders_urls -- INSERT INTO `#__componentbuilder_joomla_component` (`id`, `add_admin_event`, `add_backup_folder_path`, `add_css_admin`, `add_css_site`, `add_email_helper`, `add_git_folder_path`, `add_javascript`, `add_license`, `add_menu_prefix`, `add_namespace_prefix`, `add_php_helper_admin`, `add_php_helper_both`, `add_php_helper_site`, `add_php_method_uninstall`, `add_php_postflight_install`, `add_php_postflight_update`, `add_php_preflight_install`, `add_php_preflight_update`, `add_placeholders`, `add_powers`, `add_sales_server`, `add_site_event`, `add_sql`, `add_sql_uninstall`, `add_update_server`, `addcontributors`, `addfootable`, `addreadme`, `adduikit`, `assets_table_fix`, `author`, `backup_folder_path`, `bom`, `buildcomp`, `buildcompsql`, `companyname`, `component_version`, `copyright`, `created`, `creatuserhelper`, `crowdin_account_api_key`, `crowdin_project_api_key`, `crowdin_project_identifier`, `crowdin_username`, `css_admin`, `css_site`, `dashboard`, `dashboard_type`, `debug_linenr`, `description`, `email`, `emptycontributors`, `export_buy_link`, `export_key`, `git_folder_path`, `guid`, `image`, `javascript`, `joomla_source_link`, `license`, `license_type`, `menu_prefix`, `modified`, `mvc_versiondate`, `name`, `name_code`, `namespace_prefix`, `number`, `php_admin_event`, `php_helper_admin`, `php_helper_both`, `php_helper_site`, `php_method_uninstall`, `php_postflight_install`, `php_postflight_update`, `php_preflight_install`, `php_preflight_update`, `php_site_event`, `readme`, `remove_line_breaks`, `sales_server`, `short_description`, `sql`, `sql_uninstall`, `system_name`, `toignore`, `translation_tool`, `update_server`, `update_server_target`, `update_server_url`, `website`, `whmcs_buy_link`, `whmcs_key`, `whmcs_url`, `params`, `published`, `version`, `hits`, `access`, `ordering`) VALUES -(25, '', '', '', '', '', '', '', '', 1, '', '', '', 1, '', 1, '', '', '', '', 1, '', '', '', '', 1, '{}', '', 1, 1, 3, 'Llewellyn van der Merwe', '', 'default.txt', '', '', 'Vast Development Method', '2.1.0', 'Copyright (C) 2015. All Rights Reserved', '2016-10-18 11:44:09', '', 'mvVkzmHCEIoBhzD3gR3uTzXRGwNVNRWw8Hr1vrXxb+I=', 'BbloLSYT6Yup6v3I/YNmrdOwzjbI4BGfDvJSB82N9DU=', '', 'VtSt2RMz+AHCrwc7jk1G70t83ZwZsNp2upqfzMyaVHE=', '', '', '', 1, '', 'Just a basic demo of the most basic implementations of the [Joomla](http://www.joomla.org) Component Builder\'s ability.', 'joomla@vdm.io', '', '', 'nZDegSPK87rXA4KMC6P8I6zEldjVIJpPYGRPZlKBI+U=', '', 'efde995e-60aa-4b39-b644-44349dfb660d', 'images/vdm/demo500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Demo-Component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2024-01-19 11:57:08', '', 'Demo', 'demo', 'JCB', 4, '', '', '', 'CS8qKg0KCSAqCUNoYW5nZSB0byBuaWNlIGZhbmN5IGRhdGUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhbmN5RGF0ZSgkZGF0ZSkNCgl7DQoJCWlmICghc2VsZjo6aXNWYWxpZFRpbWVTdGFtcCgkZGF0ZSkpDQoJCXsNCgkJCSRkYXRlID0gc3RydG90aW1lKCRkYXRlKTsNCgkJfQ0KCQlyZXR1cm4gZGF0ZSgnalMgXG9cZiBGIFknLCRkYXRlKTsNCgl9DQoNCgkvKioNCgkgKglDaGFuZ2UgdG8gbmljZSBmYW5jeSB0aW1lIGFuZCBkYXRlDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYW5jeURhdGVUaW1lKCR0aW1lKQ0KCXsNCgkJaWYgKCFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCR0aW1lKSkNCgkJew0KCQkJJHRpbWUgPSBzdHJ0b3RpbWUoJHRpbWUpOw0KCQl9DQoJCXJldHVybiBkYXRlKCcoRzppKSBqUyBcb1xmIEYgWScsJHRpbWUpOw0KCX0NCg0KCS8qKg0KCSAqCUNoYW5nZSB0byBuaWNlIGhvdXI6bWludXRlcyB0aW1lDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYW5jeVRpbWUoJHRpbWUpDQoJew0KCQlpZiAoIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJHRpbWUpKQ0KCQl7DQoJCQkkdGltZSA9IHN0cnRvdGltZSgkdGltZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJ0c6aScsJHRpbWUpOw0KCX0NCg0KCS8qKg0KCSAqCUNoZWNrIGlmIHN0cmluZyBpcyBhIHZhbGlkIHRpbWUgc3RhbXANCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzVmFsaWRUaW1lU3RhbXAoJHRpbWVzdGFtcCkNCgl7DQoJCXJldHVybiAoKGludCkgJHRpbWVzdGFtcCA9PT0gJHRpbWVzdGFtcCkNCgkJJiYgKCR0aW1lc3RhbXAgPD0gUEhQX0lOVF9NQVgpDQoJCSYmICgkdGltZXN0YW1wID49IH5QSFBfSU5UX01BWCk7DQoJfQ0K', '', 'CQkvLyBHZXQgQXBwbGljYXRpb24gb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnVGhpcyBpcyBhIGRlbW8gY29tcG9uZW50IGRldmVsb3BlZCBpbiA8YSBocmVmPSJodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyIiB0YWdldD0iX2JhbG5rIiB0aXRsZT0iSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIj5KQ0I8L2E+ISBZb3UgY2FuIGJ1aWxkIG1vcmUgY29tcG9uZW50cyBsaWtlIHRoaXMgd2l0aCBKQ0IsIGNoZWNrb3V0IG91ciBwYWdlIG9uIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyIiB0YWdldD0iX2JhbG5rIiB0aXRsZT0iSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIj5naXRodWI8L2E+IGZvciBtb3JlIGluZm8uIFRoZSBmdXR1cmUgb2YgPGEgaHJlZj0iaHR0cDovL3ZkbS5iei9jb21wb25lbnQtYnVpbGRlciIgdGFnZXQ9Il9iYWxuayIgdGl0bGU9Ikpvb21sYSBDb21wb25lbnQgQnVpbGRlciI+Sm9vbWxhIENvbXBvbmVudCBEZXZlbG9wbWVudDwvYT4gaXMgSGVyZSEnLCAnSW5mbycpOw==', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIVsjIyNDb21wb25lbnRfbmFtZSMjIyBpbWFnZV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25hbWliaWEvZGVtby1qb29tbGEtMy1jb21wb25lbnQvbWFzdGVyL2FkbWluL2Fzc2V0cy9pbWFnZXMvdmRtLWNvbXBvbmVudC5qcGcgIlRoZSAjIyNDb21wb25lbnRfbmFtZSMjIyIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKSkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gbmV2ZXIgbWFraW5nIG9uZSBtaXN0YWtlIG9yIHRha2luZyBhbnkgY29mZmVlIGJyZWFrLikNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KKiojIyNhY3R1YWxIb3Vyc1NwZW50IyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxEYXlzU3BlbnQjIyMgRWlnaHQgSG91ciBEYXlzKiogKHRoZSBhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNwZW50KQ0KDQo+ICh3aXRoIHRoZSBmb2xsb3dpbmcgYnJlYWsgZG93bjoNCj4gKipkZWJ1Z2dpbmcgQCMjI2RlYnVnZ2luZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA0Ow0KPiAqKnBsYW5uaW5nIEAjIyNwbGFubmluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA3Ow0KPiAqKm1hcHBpbmcgQCMjI21hcHBpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gMTA7DQo+ICoqb2ZmaWNlIEAjIyNvZmZpY2VIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNjspDQoNCioqIyMjYWN0dWFsVG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsVG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqDQooYSB0b3RhbCBvZiB0aGUgcmVhbGlzdGljIHRpbWUgZnJhbWUgZm9yIHRoaXMgcHJvamVjdCkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gd2l0aCB0aGUgbm9ybWFsIGV2ZXJ5ZGF5IHJlYWxpdGllcyBhdCB0aGUgb2ZmaWNlLCB0aGF0IGluY2x1ZGVzIHRoZSBjb21wb25lbnQgcGxhbm5pbmcsIG1hcHBpbmcgJiBkZWJ1Z2dpbmcuKQ0KDQpQcm9qZWN0IGR1cmF0aW9uOiAqKiMjI3Byb2plY3RXZWVrVGltZSMjIyB3ZWVrcyoqIG9yICoqIyMjcHJvamVjdE1vbnRoVGltZSMjIyBtb250aHMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCltDVVNUT01DT0RFPXJlYWRNRWNvbnRyaWJ1dG9yc10=', '', '', 'Demo Component', '', '', 'Demo (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/namibia/demo-joomla-3-component/master/demo_updateserver.xml', 'https://www.vdm.io/', '', '6GeGhXcYZEQosGCi0ZXeuAj3oXBwARl7OnRm9h3rxPQ=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 54, '', 1, 10); +(1, '', '', '', '', 1, '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', '', '', 1, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '3.2.10', 'Copyright (C) 2015. All Rights Reserved', '2015-03-20 15:27:13', 1, 'mIu5D5hcoKG7Qwq9t9+EbeIDz5myyqPT+Y9gfumTOnU=', 'ASZTKYzZpIKCLc9tWjeUim24yOLGP/P7x7ltY1+yCeQ=', '', 'kEHnfNOmA6lJcwrJs2YKnN6cupuqs/W9lZPuNJQfNJw=', '', '', '', 1, '', 'The Basic Learning Management System for Joomla.', 'info@vdm.io', 1, '', '0wpowsjavpfWE8NBDaANtTAa2HI1HwCS0MeJ0cJvu1C0O9lituow6lJ5QS5burG5YtvM0v0pJgKRnah0ucjLsw==', '', '90f80dee-d3d8-487d-a6c4-5627cb317824', 'images/vdm/LMS500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2023-09-28 06:26:25', 1, 'Learning Management', 'learningmanager', '', 4, '', '', 'CS8qKg0KCSogCVNob3VsZCBEcm9wYm94IGJlIHVwZGF0ZWQNCgkqKi8NCglwdWJsaWMgc3RhdGljICR1cGRhdGVfZHJvcGJveCA9IGZhbHNlOw0KDQoJLyoqDQoJKiAJVGhlIGRyb3Bib3ggbGlua3MNCgkqKi8NCglwdWJsaWMgc3RhdGljICRsaW5rc19kcm9wYm94Ow0KDQoJLyoqDQoJKiAJVXNlIGNvdW50ZXIgdG8gaW5zdXJlIGNvZGUgcnVuIG9uY2UNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICR1cGRhdGVfZHJvcGJveF9jb3VudGVyID0gMDsNCg0KCS8qKg0KCSAqCWNoZWNrIGlmIHRoaXMgc2Vzc2lvbiBoYXMgYSBkb3dubG9hZCBhdHRhY2hlZA0KCSAqCXZpYSBkcm9wYm94DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoYXNEb3dubG9hZCgkc2Vzc2lvbiwkZGF0ZSkNCgl7DQoJCS8vIHNldCB0aGUgZHJvcGJveCBsaW5rcw0KCQlzZWxmOjpnZXREcm9wYm94KCk7DQoJCS8vIGNoZWNrIGlmIGl0IHdhcyBzZXQNCgkJaWYoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGxpbmtzX2Ryb3Bib3gpKQ0KCQl7DQoJCQkvLyBidWxkIHRoZSBsaW5rIGZyb20gc2Vzc2lvbiBpZA0KCQkJJGxpbmsgPSBzZWxmOjpnZXRTZXNzaW9uRHJvcGJveExpbmsoJHNlc3Npb24pOw0KCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGxpbmspKQ0KCQkJew0KCQkJCSRsaW5rID0gc3RydG9sb3dlcigkbGluayk7DQoJCQkJZm9yZWFjaCAoc2VsZjo6JGxpbmtzX2Ryb3Bib3ggYXMgJGZvbGRlciA9PiAkZGJfbGluaykNCgkJCQl7DQoJCQkJCSRmb2xkZXIgPSBzdHJ0b2xvd2VyKCRmb2xkZXIpOw0KCQkJCQlpZiAoc3RycG9zKCRmb2xkZXIsJGxpbmspICE9PSBmYWxzZSkNCgkJCQkJew0KCQkJCQkJJGZpbGVOYW1lID0gc3RyX3JlcGxhY2UoJGxpbmssICcnLCAkZm9sZGVyKTsNCgkJCQkJCSRidWNrZXRbJGZpbGVOYW1lXSA9ICRkYl9saW5rOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGNoZWNrIGlmIHdlIGZvdW5kIHNvbSBmaWxlcw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVja2V0KSkNCgkJCQl7DQoJCQkJCS8vIGdldCBUb2tlbiENCgkJCQkJJHRva2VuID0gSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpOw0KCQkJCQkvLyBhbmQgdXNlcg0KCQkJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJCQkJZm9yZWFjaCAoJGJ1Y2tldCBhcyAkZmlsZW5hbWUgPT4gJGtleUxpbmspDQoJCQkJCXsNCgkJCQkJCSRmaWxlZGF0ZSA9IDA7DQoJCQkJCQlsaXN0KCRuYW1lLCRleHQpID0gZXhwbG9kZSgnLicsJGZpbGVuYW1lKTsNCgkJCQkJCSRrZXkgPSAkbmFtZTsNCgkJCQkJCS8vIGNoZWNrIGZvciBuYW1lcyB3aXRoIGRhdGUNCgkJCQkJCWlmIChzdHJwb3MoJG5hbWUsJ19fJykgIT09IGZhbHNlKQ0KCQkJCQkJew0KCQkJCQkJCWxpc3QoJG5hbWUsJGZpbGVkYXRlKSA9IGV4cGxvZGUoJ19fJywkbmFtZSk7DQoJCQkJCQkJLy8gY2hlY2sgaWYgd2Ugc2hvdWxkIHVzZSB0aGlzIGZpbGUNCgkJCQkJCQkkZmlsZWRhdGUgPSBzdHJ0b3RpbWUoJGZpbGVkYXRlKTsNCgkJCQkJCX0NCgkJCQkJCS8vIHNldHVwIHRoZSBuYW1lDQoJCQkJCQlpZiAoc3RycG9zKCRuYW1lLCdfJykgIT09IGZhbHNlKQ0KCQkJCQkJew0KCQkJCQkJCSRuYW1lID0gZXhwbG9kZSgnXycsJG5hbWUpOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZWlmIChzdHJwb3MoJG5hbWUsJy0nKSAhPT0gZmFsc2UpDQoJCQkJCQl7DQoJCQkJCQkJJG5hbWUgPSBleHBsb2RlKCctJywkbmFtZSk7DQoJCQkJCQl9DQoJCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG5hbWUpKQ0KCQkJCQkJew0KCQkJCQkJCSRuYW1lID0gdWN3b3JkcyhzdHJ0b2xvd2VyKGltcGxvZGUoJyAnLCRuYW1lKSkpOw0KCQkJCQkJfQ0KCQkJCQkJLy8gYnVpbGQgbGluaw0KCQkJCQkJJGRyb3Bib3hMaW5rID0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWRvd25sb2FkLmZpbGUmdG9rZW49Jy4kdG9rZW4uJyZmaWxlbmFtZT0nLiRmaWxlbmFtZS4nJmtleT0nLiR1c2VyLT5pZC4nYmEmbGluaz0nLiRrZXlMaW5rKTsNCgkJCQkJCWlmICgkZmlsZWRhdGUgPT0gJGRhdGUpDQoJCQkJCQl7DQoJCQkJCQkJJGZvdW5kWyRrZXldID0gJzxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstYnV0dG9uLXNtYWxsIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20iIGhyZWY9IicuJGRyb3Bib3hMaW5rLiciIHRpdGxlPSInLiRmaWxlbmFtZS4nIj48aSBjbGFzcz0idWstaWNvbi1kb3dubG9hZCI+PC9pPiBEb3dubG9hZCAnLiRuYW1lLicgKCcuJGV4dC4nKSA8ZW0+ZXhjbHVzaXZlPC9lbT48L2E+JzsNCgkJCQkJCX0NCgkJCQkJCWVsc2VpZiAoJGZpbGVkYXRlID09IDApDQoJCQkJCQl7DQoJCQkJCQkJJGZvdW5kWyRrZXldID0gJzxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstYnV0dG9uLXNtYWxsIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20iIGhyZWY9IicuJGRyb3Bib3hMaW5rLiciIHRpdGxlPSInLiRmaWxlbmFtZS4nIj48aSBjbGFzcz0idWstaWNvbi1kb3dubG9hZCI+PC9pPiBEb3dubG9hZCAnLiRuYW1lLicgKCcuJGV4dC4nKTwvYT4nOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIG9ubHkgZ3JvdXAgYnV0dG9uIGlmIG1vcmUgdGhlbiBvbmUgaXMgc2V0DQoJCQkJCWlmIChjb3VudCgkZm91bmQpID4gMSkNCgkJCQkJew0KCQkJCQkJcmV0dXJuICc8ZGl2IGNsYXNzPSJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsIj4nLmltcGxvZGUoJycsICRmb3VuZCkuJzwvZGl2PjxkaXYgY2xhc3M9InVrLXZpc2libGUtc21hbGwiPicuaW1wbG9kZSgnJywgJGZvdW5kKS4nPC9kaXY+JzsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCXJldHVybiBpbXBsb2RlKCcnLCAkZm91bmQpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiAnPHNtYWxsPk5vIGRvd25sb2FkcyBmb3VuZCBmb3IgdGhpcyBzZXNzaW9uIGF0IHRoaXMgdGltZS48L3NtYWxsPic7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRTZXNzaW9uRHJvcGJveExpbmsoJHNlc3Npb24pDQoJew0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnYS5hbGlhcycsJ2MuYWxpYXMnLCdwLmFjcm9ueW0nKSxhcnJheSgnc2Vzc2lvbicsJ2NvdXJzZScsJ3Byb2dyYW0nKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9zZXNzaW9uJywgJ2EnKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcHJvZ3JhbScsICdwJykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EucHJvZ3JhbScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgncC5pZCcpIC4gJyknKTsNCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3Vyc2UnLCAnYycpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmNvdXJzZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnYy5pZCcpIC4gJyknKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcuKGludCkgJHNlc3Npb24pOw0KCQkvLyBlY2hvIG5sMmJyKHN0cl9yZXBsYWNlKCcjX18nLCdjYl8nLCRxdWVyeSkpOyBkaWU7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJHJlc3VsdCA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJLy8gY29uc3RydWN0IHRoZSBzZWFyY2ggc3RyaW5nIGZvciB0aGUgbGlua3MNCgkJCXJldHVybiAnVkRNX3BMZUtfaDB1RXIvJy4kcmVzdWx0LT5wcm9ncmFtLicvJy4kcmVzdWx0LT5jb3Vyc2UuJy8nLiRyZXN1bHQtPnNlc3Npb24uJy8nOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldERyb3Bib3goKQ0KCXsNCgkJLy8gR2V0IG1haW4gdXJsDQoJCSRtYWluVXJsID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2Ryb3Bib3gnLCBudWxsKTsNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRtYWluVXJsKSAmJiBzZWxmOjokdXBkYXRlX2Ryb3Bib3hfY291bnRlciA9PSAwKQ0KCQl7DQoJCQkvLyBHZXQgdXBkYXRlIHRpbWVyIHRpbWUNCgkJCSR0aW1lciA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdkcm9wYm94X3RpbWVyJywgJzYwJyk7DQoJCQkvLyBHZXQgdGhlIFRpbWUgZm9yIE5vdw0KCQkJJG5vd1RpbWUgPSB0aW1lKCk7DQoJCQkvLyBHZXQgTmV4dCBVcGRhdGUgVGltZQ0KCQkJJG5leHR1cGRhdGUgPSBzdHJ0b3RpbWUoJysnLiR0aW1lci4nIG1pbnV0ZXMnLCAkbm93VGltZSk7DQoJCQkvLyB1cGRhdGUgZmlsZW5hbWUNCgkJCSRpbmZvRmlsZSA9IEpQQVRIX0NPTVBPTkVOVF9TSVRFLicvaGVscGVycy8nLm1kNSgkbWFpblVybC4naW5mbycpOw0KCQkJLy8gZ2V0IGxhc3QgdXBkYXRlIGluZm8NCgkJCSR1cGRhdGVJbmZvTm93ID0gZmFsc2U7DQoJCQlpZiAoKCRqc29uID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRpbmZvRmlsZS4iLmpzb24iKSkgIT09IEZBTFNFKQ0KCQkJew0KCQkJCSR1cGRhdGVJbmZvID0ganNvbl9kZWNvZGUoJGpzb24sdHJ1ZSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHVwZGF0ZUluZm8gPSBhcnJheSgnbmV4dHVwZGF0ZScgPT4gJG5leHR1cGRhdGUsICd1cGRhdGVhY3RpdmUnID0+IGZhbHNlLCAndXBkYXRlbm93JyA9PiBmYWxzZSk7DQoJCQkJJHVwZGF0ZUluZm9Ob3cgPSB0cnVlOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgd2Ugc2hvdWxkIHVwZGF0ZSB0aGUgbG9jYWwgc2V0IG9mIGxpbmtzDQoJCQlpZiAoJHVwZGF0ZUluZm9bJ25leHR1cGRhdGUnXSA8ICRub3dUaW1lICYmICEkdXBkYXRlSW5mb1sndXBkYXRlYWN0aXZlJ10pDQoJCQl7DQoJCQkJc2VsZjo6JHVwZGF0ZV9kcm9wYm94ID0gdHJ1ZTsNCgkJCQkkdXBkYXRlSW5mbyA9IGFycmF5KCduZXh0dXBkYXRlJyA9PiAkbmV4dHVwZGF0ZSwgJ3VwZGF0ZWFjdGl2ZScgPT4gZmFsc2UsICd1cGRhdGVub3cnID0+IHRydWUpOw0KCQkJCSR1cGRhdGVJbmZvTm93ID0gdHJ1ZTsNCgkJCX0NCgkJCS8vIHVwZGF0ZSBpbmZvIG5vdw0KCQkJaWYgKCR1cGRhdGVJbmZvTm93KQ0KCQkJew0KCQkJCS8vIHNhdmUgdGhlIHVwZGF0ZSBpbmZvIGZvciBuZXh0IHJ1bg0KCQkJCXNlbGY6OnNhdmVKc29uKGpzb25fZW5jb2RlKCR1cGRhdGVJbmZvKSwkaW5mb0ZpbGUpOw0KCQkJfQ0KCQkJLy8gR2V0IGxvY2FsIGtleQ0KCQkJJGxvY2Fsa2V5ID0gbWQ1KEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdiYXNpY19rZXknLCAnbG9jYWxLZXkzNGZkV0VrbCcpKTsNCgkJCS8vIGxpbmtzIGZpbGVuYW1lDQoJCQkkbGlua0ZpbGUgPSBKUEFUSF9DT01QT05FTlRfU0lURS4nL2hlbHBlcnMvJy5tZDUoJG1haW5VcmwuJ2xpbmtzJyk7DQoJCQkvLyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IHJ1biBvbmNlIHBlciBleGN1dGlvbg0KCQkJc2VsZjo6JHVwZGF0ZV9kcm9wYm94X2NvdW50ZXIrKzsNCgkJCS8vIGdldCB0aGUgbG9jYWwgbGlua3MNCgkJCWlmICgoJGpzb25saW5rcyA9IEBmaWxlX2dldF9jb250ZW50cygkbGlua0ZpbGUuIi5qc29uIikpICE9PSBGQUxTRSAmJiAhU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGxpbmtzX2Ryb3Bib3gpKQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkanNvbmxpbmtzKSkNCgkJCQl7DQoJCQkJCS8vIGdldCBzYXZlZCBsaW5rcw0KCQkJCQkkc3RvcmVhZ2UgPSBqc29uX2RlY29kZSgkanNvbmxpbmtzLHRydWUpOw0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHN0b3JlYWdlKSkNCgkJCQkJew0KCQkJCQkJLy8gZ2V0IHNhdmVkIGxpbmtzDQoJCQkJCQlzZWxmOjokbGlua3NfZHJvcGJveCA9ICRzdG9yZWFnZTsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCWlmICggISR1cGRhdGVJbmZvWyd1cGRhdGVhY3RpdmUnXSkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JHVwZGF0ZV9kcm9wYm94ID0gdHJ1ZTsNCgkJCQkJCSR1cGRhdGVJbmZvID0gYXJyYXkoJ25leHR1cGRhdGUnID0+ICRuZXh0dXBkYXRlLCAndXBkYXRlYWN0aXZlJyA9PiBmYWxzZSwgJ3VwZGF0ZW5vdycgPT4gdHJ1ZSk7DQoJCQkJCQlzZWxmOjpzYXZlSnNvbihqc29uX2VuY29kZSgkdXBkYXRlSW5mbyksJGluZm9GaWxlKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVEcm9wYm94KCkNCgl7DQoJCS8vIEdldCBtYWluIHVybA0KCQkkbWFpblVybCA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdkcm9wYm94JywgbnVsbCk7DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkbWFpblVybCkpDQoJCXsNCgkJCS8vIGRvbnQgYWxsb3cgb3RoZXIgdXBkYXRlcw0KCQkJc2VsZjo6JHVwZGF0ZV9kcm9wYm94ID0gZmFsc2U7DQoJCQkvLyB1cGRhdGUgZmlsZW5hbWUNCgkJCSRpbmZvRmlsZSA9IEpQQVRIX0NPTVBPTkVOVF9TSVRFLicvaGVscGVycy8nLm1kNSgkbWFpblVybC4naW5mbycpOw0KCQkJaWYgKCgkanNvbiA9IEBmaWxlX2dldF9jb250ZW50cygkaW5mb0ZpbGUuIi5qc29uIikpICE9PSBGQUxTRSkNCgkJCXsNCgkJCQkkdXBkYXRlSW5mbyA9IGpzb25fZGVjb2RlKCRqc29uLHRydWUpOw0KCQkJCWlmICghJHVwZGF0ZUluZm9bJ3VwZGF0ZWFjdGl2ZSddICYmICR1cGRhdGVJbmZvWyd1cGRhdGVub3cnXSkNCgkJCQl7DQoJCQkJCSR1cGRhdGVJbmZvWyd1cGRhdGVhY3RpdmUnXSA9IHRydWU7DQoJCQkJCSR1cGRhdGVJbmZvWyd1cGRhdGVub3cnXSA9IGZhbHNlOw0KCQkJCQkvLyBzYXZlIHRoZSB1cGRhdGUgaW5mbyBmb3IgbmV4dCBydW4NCgkJCQkJc2VsZjo6c2F2ZUpzb24oanNvbl9lbmNvZGUoJHVwZGF0ZUluZm8pLCRpbmZvRmlsZSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCS8vIHVwZGF0ZSBhbHJlYWR5IHJ1bm5pbmcNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBvb3BzIHNvbWV0aGluZyBpcyB3cm9uZw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCS8vIGxvYWQgdGhlIGZpbGUNCgkJCUpMb2FkZXI6OmltcG9ydCgnZHJvcGJveCcsIEpQQVRIX0NPTVBPTkVOVF9TSVRFLicvaGVscGVycycpOw0KCQkJLy8gdXBkYXRlIHRoZSBkcm9wYm94IGxpbmtzDQoJCQkkY29tcGlsZXJDb25maWcgPSBhcnJheSgnc2F2ZScgPT4gZmFsc2UsICdkb3dubG9hZCcgPT4gZmFsc2UpOw0KCQkJJGRyb3Bib3ggPSBuZXcgRHJvcGJveCgkbWFpblVybCwgJGNvbXBpbGVyQ29uZmlnKTsNCgkJCS8vIHNldHVwIHRoZSBsaW5rcw0KCQkJc2VsZjo6JGxpbmtzX2Ryb3Bib3ggPSAkZHJvcGJveC0+ZmlsZXM7DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGxpbmtzX2Ryb3Bib3gpKQ0KCQkJew0KCQkJCS8vIEdldCBsb2NhbCBrZXkNCgkJCQkkbG9jYWxrZXkgPSBtZDUoSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2Jhc2ljX2tleScsICdsb2NhbEtleTM0ZmRXRWtsJykpOw0KCQkJCS8vIGxpbmtzIGZpbGVuYW1lDQoJCQkJJGxpbmtGaWxlID0gSlBBVEhfQ09NUE9ORU5UX1NJVEUuJy9oZWxwZXJzLycubWQ1KCRtYWluVXJsLidsaW5rcycpOw0KCQkJCS8vIGVuY3J5cHQgdGhlIHVybHMNCgkJCQkkbG9ja2VyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAyNTYpOw0KCQkJCWZvcmVhY2ggKHNlbGY6OiRsaW5rc19kcm9wYm94IGFzICRmb2xkZXIgPT4gJGxpbmspDQoJCQkJew0KCQkJCQkkc3RvcmVhZ2VbJGZvbGRlcl0gPSBiYXNlNjRfZW5jb2RlKCRsb2NrZXItPmVuY3J5cHRTdHJpbmcoJGxpbmspKTsNCgkJCQl9DQoJCQkJLy8gc2F2ZSB0aGUgdXBkYXRlIGxpbmtzIGZvciBuZXh0IHRpbWUNCgkJCQlzZWxmOjpzYXZlSnNvbihqc29uX2VuY29kZSgkc3RvcmVhZ2UpLCRsaW5rRmlsZSk7DQoJCQkJJHVwZGF0ZUluZm9bJ3VwZGF0ZWFjdGl2ZSddID0gZmFsc2U7DQoJCQkJLy8gc2F2ZSB0aGUgdXBkYXRlIGluZm8gZm9yIG5leHQgcnVuDQoJCQkJc2VsZjo6c2F2ZUpzb24oanNvbl9lbmNvZGUoJHVwZGF0ZUluZm8pLCRpbmZvRmlsZSk7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2F2ZUpzb24oJGRhdGEsJGZpbGVuYW1lKQ0KCXsNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJew0KCQkJJGZwID0gZm9wZW4oJGZpbGVuYW1lLicuanNvbicsICd3Jyk7DQoJCQlmd3JpdGUoJGZwLCAkZGF0YSk7DQoJCQlmY2xvc2UoJGZwKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSogCUlzIHVzZXIgYSBGYWN1bHR5bWVtYmVyDQoJKiovDQoJcHVibGljIHN0YXRpYyAkaXNGYWN1bHR5bWVtYmVyID0gZmFsc2U7DQoNCgkvKioNCgkqIAlJcyB1c2VyIGEgRmFjaWxpdGF0b3INCgkqKi8NCglwdWJsaWMgc3RhdGljICRpc0ZhY2lsaXRhdG9yID0gZmFsc2U7DQoNCgkvKioNCgkqIAlJcyB1c2VyIGEgU3R1ZGVudA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJGlzU3R1ZGVudCA9IGZhbHNlOw0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1c2VySXMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCX0NCgkJLy8gc2V0IHBhcmFtcw0KCQlpZiAoZW1wdHkoc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gZ2V0IHRoaXMgdXNlciBncm91cHMNCgkJJGdyb3VwcyA9IChhcnJheSkgJHVzZXItPmdldCgnZ3JvdXBzJyk7DQoJCS8vIEdldCBmYWN1bHR5IG1lbWJlciBncm91cHMNCgkJJGZhY3VsdHltZW1iZXJHcm91cHMgPSAoYXJyYXkpIHNlbGY6OiRwYXJhbXMtPmdldCgnZmFjdWx0eW1lbWJlcnVzZXInKTsNCgkJLy8gR2V0IGZhY2lsaXRhdG9yIGdyb3Vwcw0KCQkkZmFjaWxpdGF0b3JHcm91cHMgPSAoYXJyYXkpIHNlbGY6OiRwYXJhbXMtPmdldCgnZmFjaWxpdGF0b3J1c2VyJyk7DQoJCS8vIEdldCBzdHVkZW50IGdyb3Vwcw0KCQkkc3R1ZGVudEdyb3VwcyA9IChhcnJheSkgc2VsZjo6JHBhcmFtcy0+Z2V0KCdzdHVkZW50dXNlcicpOw0KCQkvLyBub3cgY2hlY2sgaWYgdXNlciBpcyBpbiBncm91cA0KCQlpZiAoYXJyYXlfaW50ZXJzZWN0KCRmYWN1bHR5bWVtYmVyR3JvdXBzLCAkZ3JvdXBzKSkNCgkJew0KCQkJLy8gaXMgRmFjdWx0eW1lbWJlcg0KCQkJc2VsZjo6JGlzRmFjdWx0eW1lbWJlciA9IHRydWU7DQoJCX0NCgkJaWYgKGFycmF5X2ludGVyc2VjdCgkZmFjaWxpdGF0b3JHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBGYWNpbGl0YXRvcg0KCQkJc2VsZjo6JGlzRmFjaWxpdGF0b3IgPSB0cnVlOw0KCQl9DQoJCWlmIChhcnJheV9pbnRlcnNlY3QoJHN0dWRlbnRHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBTdHVkZW50DQoJCQlzZWxmOjokaXNTdHVkZW50ID0gdHJ1ZTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqCWNoZWNrIGF0dGVuZGFuY2Ugb2YgdGhpcyByZWxhdGlvbg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tBdHRlbmRhbmNlKCRldmVudCwgJHByb2dyYW0sICRjb3Vyc2UgPSBudWxsLCAkc2Vzc2lvbiA9IG51bGwsICR1c2VySWQgPSBudWxsLCAkd2hhdCA9ICdpZCcpDQoJew0KCQkvLyBzZXQgdXNlciB0byB0YXJnZXQNCgkJaWYoISR1c2VySWQpDQoJCXsNCgkJCSR1c2VySWQgPSBzZWxmOjokdXNlci0+aWQ7DQoJCX0NCgkJDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgkd2hhdCkpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fYXR0ZW5kYW5jZScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc3R1ZGVudHVzZXInKSAuICcgPSAnLiAoaW50KSR1c2VySWQpOw0KCQlpZiAoJHNlc3Npb24pDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3Nlc3Npb24nKSAuICcgPSAnLiAoaW50KSRzZXNzaW9uKTsNCgkJfQ0KCQlpZiAoJGNvdXJzZSkNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnY291cnNlJykgLiAnID0gJy4gKGludCkkY291cnNlKTsNCgkJfQ0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwcm9ncmFtJykgLiAnID0gJy4gKGludCkkcHJvZ3JhbSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2V2ZW50JykgLiAnID0gJy4gKGludCkkZXZlbnQpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCS8qKg0KCSAqCWNoZWNrIGF0dGVuZGFuY2Ugb2YgYW55IGdpdmVuIHNwZWN0DQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBjaGVja0F0dGVuZGFuY2VEeW5hbWljKCRkYXRhKQ0KCXsNCgkJJGF0dGVuZGFuY2UgPSBmYWxzZTsNCgkJLy8gc3dpdGNoIG9uIGFjdGl2ZSB0eXBlcw0KCQlzd2l0Y2ggKCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfcmVsZWFzZV90eXBlKQ0KCQl7DQoJCQljYXNlIDA6DQoJCQkJLy8gaW1tZWRpYXRseQ0KCQkJCSRhdHRlbmRhbmNlID0gc2VsZjo6Y2hlY2tBdHRlbmRhbmNlKCRkYXRhLT5ldmVudF9pZCwkZGF0YS0+cHJvZ3JhbSk7DQoJCQkJYnJlYWs7DQoJCQljYXNlIDI6DQoJCQkJLy8gYWZ0ZXIgdGFyZ2V0DQoJCQljYXNlIDM6DQoJCQkJLy8gb24gdGFyZ2V0DQoJCQkJc3dpdGNoICgkZGF0YS0+YXNzZXNzbWVudF90eXBlX3JlbGVhc2VfdGFyZ2V0KQ0KCQkJCXsNCgkJCQkJY2FzZSAxOg0KCQkJCQkJLy8gU2Vzc2lvbg0KCQkJCQkJJGF0dGVuZGFuY2UgPSBzZWxmOjpjaGVja0F0dGVuZGFuY2UoJGRhdGEtPmV2ZW50X2lkLCRkYXRhLT5wcm9ncmFtLCRkYXRhLT5jb3Vyc2UsJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV9yZWxlYXNlX3Nlc3Npb24pOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgMjoNCgkJCQkJCS8vIERheQ0KCQkJCQkJJHNlc3Npb25zID0gc2VsZjo6Z2V0U2Vzc2lvbnMoJGRhdGEtPnByb2dyYW0sJGRhdGEtPmNvdXJzZSwkZGF0YS0+ZGF5KTsNCgkJCQkJCS8vIG5vdyBjaGVjayBpZiBhbnkgYXR0YW5kZWFuY2UgZm9yIHRoaXMgZGF5IHdhcyBsb2dlZA0KCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXNzaW9ucykpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoJHNlc3Npb25zIGFzICRzZXNzaW9uKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGF0dGVuZGFuY2UgPSBzZWxmOjpjaGVja0F0dGVuZGFuY2UoJGRhdGEtPmV2ZW50X2lkLCRkYXRhLT5wcm9ncmFtLCRkYXRhLT5jb3Vyc2UsJHNlc3Npb24pOw0KCQkJCQkJCQkvLyBpZiBvbmUgaXMgZm91bmQgYnJlYWsNCgkJCQkJCQkJaWYgKCRhdHRlbmRhbmNlKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlicmVhazsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlIDM6DQoJCQkJCQkvLyBDb3Vyc2UNCgkJCQkJCSRhdHRlbmRhbmNlID0gc2VsZjo6Y2hlY2tBdHRlbmRhbmNlKCRkYXRhLT5ldmVudF9pZCwkZGF0YS0+cHJvZ3JhbSwkZGF0YS0+Y291cnNlKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlIDQ6DQoJCQkJCQkvLyBQcm9ncmFtDQoJCQkJCQkkYXR0ZW5kYW5jZSA9IHNlbGY6OmNoZWNrQXR0ZW5kYW5jZSgkZGF0YS0+ZXZlbnRfaWQsJGRhdGEtPnByb2dyYW0pOw0KCQkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJZGVmYXVsdCA6DQoJCQkJLy8gdGhlIGRlZmF1bHQNCgkJCQkkYXR0ZW5kYW5jZSA9IGZhbHNlOw0KCQkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiAkYXR0ZW5kYW5jZTsNCgl9DQoJDQoJLyoqDQoJICoJY2hlY2sgc2Vzc2lvbnMgb2YgdGhpcyByZWxhdGlvbg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbnMoJHByb2dyYW0sICRjb3Vyc2UgPSBudWxsLCAkZGF5ID0gbnVsbCkNCgl7DQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9zZXNzaW9uJykpOw0KCQlpZiAoJGNvdXJzZSkNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnY291cnNlJykgLiAnID0gJy4gKGludCkkY291cnNlKTsNCgkJfQ0KCQlpZiAoJGRheSkNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZGF5JykgLiAnID0gJy4gKGludCkkZGF5KTsNCgkJfQ0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwcm9ncmFtJykgLiAnID0gJy4gKGludCkkcHJvZ3JhbSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gJGRiLT5sb2FkQ29sdW1uKCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCVRoZSB0YXJnZXQgdXNlci9zdHVkZW50DQoJKiovDQoJcHVibGljIHN0YXRpYyAkdXNlcjsNCg0KCS8qKg0KCSogCVRoZSBBc3Nlc3NtZW50cw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJGFzc2Vzc21lbnRzID0gYXJyYXkoKTsNCgkNCgkvKioNCgkqIAlUaGUgYnVpbGQgY2hlY2tpbmcgZGF0ZXMNCgkqKi8NCglwdWJsaWMgc3RhdGljICRub3REYXRlX29uZTsNCgkNCgkvKioNCgkgKglHZXQgQXNzZXNzbWVudHMNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFzc2Vzc21lbnRzKCRkYXRhID0gbnVsbCwgJHVzZXJJZCA9IG51bGwpDQoJew0KCQkvLyBzZXQgdGhlIGNoZWNoaW5nIHRpbWUNCgkJc2VsZjo6JG5vdERhdGVfb25lID0gc3RydG90aW1lKCcwMDAwLTAwLTAwJyk7DQoJCS8vIHNldCB1c2VyIHRvIHRhcmdldA0KCQlpZigkdXNlcklkKQ0KCQl7DQoJCQlzZWxmOjokdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlzZWxmOjokdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJfQ0KCQkvLyBtYWtlIHN1cmUgdGhpcyBpcyBhIHN0dWRlbnQNCgkJc2VsZjo6dXNlcklzKHNlbGY6OiR1c2VyLT5pZCk7DQoJCWlmIChzZWxmOjokaXNTdHVkZW50KQ0KCQl7DQoJCQkvLyBzZXQgYXZhaWxhYmxlIGFzc2Vzc21lbnRzDQoJCQkkYXZhbGlhYmxlID0gc2VsZjo6Z2V0QXZhbGlhYmxlQXNzZXNzbWVudHMoJGRhdGEpOw0KCQkJLy8gc2V0IGFzc2Vzc21lbnRzIHN0YXRlDQoJCQlzZWxmOjpzZXRBc3Nlc3NtZW50c1N0YXRlKCRhdmFsaWFibGUpOw0KCQkJLy8gcmV0dXJuIHRoZSBhc3Nlc3NtZW50cw0KCQkJcmV0dXJuIHNlbGY6OiRhc3Nlc3NtZW50czsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCS8qKg0KCSAqCXNldCBhc3Nlc3NtZW50cyBzdGF0ZQ0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QXNzZXNzbWVudHNTdGF0ZSgkYXNzZXNzbWVudHMpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGFzc2Vzc21lbnRzKSkNCgkJew0KCQkJLy8gYWx3YXlzIHJlc2V0DQoJCQkkYXNzZXNzbWVudHNfYnVja2V0ID0gYXJyYXkoKTsNCgkJCS8vIGJ1aWxkIHJldHVybiBhcnJheQ0KCQkJc2VsZjo6JGFzc2Vzc21lbnRzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRhc3Nlc3NtZW50cyBhcyAka2V5ID0+ICRkYXlzKQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGF5cykpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkZGF5cyBhcyAkZGF5ID0+ICR0eXBlcykNCgkJCQkJew0KCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0eXBlcykpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoJHR5cGVzIGFzICR0eXBlID0+ICRkYXRhKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gY2hlY2sgaWYgZGF0YSBpcyByZWxlYXNlZCAmIGFjdGl2ZSAmIGdldCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhc3Nlc3NtZW50DQoJCQkJCQkJCSRyYSA9IHNlbGY6OmdldEFzc2Vzc21lbnRTdGF0dXMoJGRhdGEpOw0KCQkJCQkJCQkkZGF0YS0+a2V5ID0gJHJhWydpZCddOw0KCQkJCQkJCQkkZGF0YS0+b3JkZXIgPSAgJHJhWydzdGFydCddOw0KCQkJCQkJCQkkZGF0YS0+YWN0aXZlID0gJHJhWydzdGF0dXMnXTsNCgkJCQkJCQkJJGRhdGEtPnN0YXJ0ID0gZGF0ZSgibCBqUyBcb2YgRiBZIiwkcmFbJ3N0YXJ0J10pOw0KCQkJCQkJCQkkZGF0YS0+ZW5kID0gKCRyYVsnZW5kJ10gIT0gc2VsZjo6JG5vdERhdGVfb25lICYmICRyYVsnZW5kJ10pID8gZGF0ZSgibCBqUyBcb2YgRiBZIiwkcmFbJ2VuZCddKTpmYWxzZTsNCgkJCQkJCQkJJGRhdGEtPmNvdXJzZV9uYW1lID0gc2VsZjo6Z2V0VmFyKCdjb3Vyc2UnLCRkYXRhLT5jb3Vyc2UsJ2lkJywnbmFtZScpOw0KCQkJCQkJCQkkZGF0YS0+ZGF5X25hbWUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRkYXRhLT5kYXksJ1d3Jyk7DQoJCQkJCQkJCS8vIGZpcnN0IGluc3VyZSB0aGF0IHRoZXJlIGlzIG5vdCBhbm90aGVyIGV2ZW50IHdpdGggdGhlIHNhbWUgbmFtZQ0KCQkJCQkJCQkkZGF0YS0+ZXZlbnRfbmFtZSA9IHNlbGY6OmdldEV2ZW50VW5pcXVlTmFtZSgkZGF0YS0+ZXZlbnRfbmFtZSwgJGRhdGEtPmV2ZW50X2lkKTsNCgkJCQkJCQkJaWYgKCFpc3NldChzZWxmOjokYXNzZXNzbWVudHNbJGRhdGEtPmV2ZW50X25hbWVdWydwcm9ncmFtX25hbWUnXSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skZGF0YS0+ZXZlbnRfbmFtZV1bJ3Byb2dyYW1fbmFtZSddID0gJGRhdGEtPnByb2dyYW1fbmFtZTsNCgkJCQkJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skZGF0YS0+ZXZlbnRfbmFtZV1bJ3Byb2dyYW1fYWNyb255bSddID0gJGRhdGEtPnByb2dyYW1fYWNyb255bTsNCgkJCQkJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skZGF0YS0+ZXZlbnRfbmFtZV1bJ3Byb2dyYW1faWNvbiddID0gJGRhdGEtPnByb2dyYW1faWNvbjsNCgkJCQkJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skZGF0YS0+ZXZlbnRfbmFtZV1bJ3Byb2dyYW1fY3JlZGl0X3N5c3RlbSddID0gJGRhdGEtPnByb2dyYW1fY3JlZGl0X3N5c3RlbTsNCgkJCQkJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skZGF0YS0+ZXZlbnRfbmFtZV1bJ2lkJ10gPSAkZGF0YS0+ZXZlbnRfaWQ7DQoJCQkJCQkJCQlzZWxmOjokYXNzZXNzbWVudHNbJGRhdGEtPmV2ZW50X25hbWVdWydldmVudF9uYW1lJ10gPSAkZGF0YS0+ZXZlbnRfbmFtZTsNCgkJCQkJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skZGF0YS0+ZXZlbnRfbmFtZV1bJ2FjdGl2ZSddID0gMDsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBsb2FkIGFzc2Vzc21lbnRzDQoJCQkJCQkJCSRhc3Nlc3NtZW50c19idWNrZXRbXSA9ICRkYXRhOwkNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJDQoJCS8vIGxldHMgc29ydCB0aGVzZSBhc3Nlc3NtZW50cw0KCQlpZiAoaXNzZXQoJGFzc2Vzc21lbnRzX2J1Y2tldCkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGFzc2Vzc21lbnRzX2J1Y2tldCkpDQoJCXsNCgkJCXNlbGY6OnNvcnRfYXNzZXNzbWVudHMoJGFzc2Vzc21lbnRzX2J1Y2tldCwgYXJyYXkoJ2RheScsJ29yZGVyJykpOw0KCQkJZm9yZWFjaCAoJGFzc2Vzc21lbnRzX2J1Y2tldCBhcyAkdmFsdWUpDQoJCQl7DQoJCQkJc2VsZjo6JGFzc2Vzc21lbnRzWyR2YWx1ZS0+ZXZlbnRfbmFtZV1bJ3ZhbHVlcyddWyR2YWx1ZS0+Y291cnNlX25hbWVdWyRkYXRhLT5kYXlfbmFtZV1bJHZhbHVlLT5hc3Nlc3NtZW50X3R5cGVfbmFtZV1bJHZhbHVlLT5rZXldID0gJHZhbHVlOw0KCQkJCS8vIGNvdW50IHRoZSBudW1iZXIgb2YgYWN0aXZlIHBlciBldmVudA0KCQkJCWlmICgkdmFsdWUtPmFjdGl2ZSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skdmFsdWUtPmV2ZW50X25hbWVdWydhY3RpdmUnXSsrOw0KCQkJCX0NCgkJCX0NCgkJCXNlbGY6OnNvcnRfYXNzZXNzbWVudHMoJGFzc2Vzc21lbnRzX2J1Y2tldCwgYXJyYXkoJ29yZGVyJywnYXNzZXNzbWVudF90eXBlX25hbWUnKSk7DQoJCQlmb3JlYWNoICgkYXNzZXNzbWVudHNfYnVja2V0IGFzICR2YWx1ZSkNCgkJCXsNCgkJCQkkbW9udGggPSBkYXRlKCJGIFkiLCR2YWx1ZS0+b3JkZXIpOw0KCQkJCSR2YWx1ZS0+c3RhcnRfZGF5ID0gZGF0ZSgibCBqUyIsJHZhbHVlLT5vcmRlcik7DQoJCQkJc2VsZjo6JGFzc2Vzc21lbnRzWyR2YWx1ZS0+ZXZlbnRfbmFtZV1bJ2NhbGVuZGVyJ11bJG1vbnRoXVskdmFsdWUtPnN0YXJ0X2RheV1bJHZhbHVlLT5rZXldID0gJHZhbHVlOw0KCQkJCXNlbGY6OiRhc3Nlc3NtZW50c1skdmFsdWUtPmV2ZW50X25hbWVdWyd0eXBlcyddWyR2YWx1ZS0+YXNzZXNzbWVudF90eXBlX2lkXSA9ICR2YWx1ZS0+YXNzZXNzbWVudF90eXBlX25hbWU7DQoJCQl9DQoJCQl1bnNldCgkYXNzZXNzbWVudHNfYnVja2V0KTsNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJGV2ZW50VW5pcXVlTmFtZSA9IGFycmF5KCk7DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50VW5pcXVlTmFtZSgkbmFtZSwgJGlkKQ0KCXsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgb3RoZXIgZXZlbnRzIHdpdGggc2FtZSBuYW1lIGV4aXN0DQoJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50VW5pcXVlTmFtZVskbmFtZV1bJGlkXSkpDQoJCXsNCgkJCSRuciA9IDA7ICRuZXcgPSAnJzsNCgkJCWlmIChpc3NldChzZWxmOjokZXZlbnRVbmlxdWVOYW1lWyRuYW1lXSkpDQoJCQl7DQoJCQkJJG5yID0gY291bnQoc2VsZjo6JGV2ZW50VW5pcXVlTmFtZVskbmFtZV0pOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXNlbGY6OiRldmVudFVuaXF1ZU5hbWVbJG5hbWVdID0gYXJyYXkoKTsNCgkJCX0NCgkJCWlmICgwICE9ICRucikNCgkJCXsNCgkJCQkkbnIrKzsNCgkJCQkkbmV3ID0gJyAoJyAuICRuciAuICcpJzsNCgkJCX0NCgkJCXNlbGY6OiRldmVudFVuaXF1ZU5hbWVbJG5hbWVdWyRpZF0gPSAkbmFtZSAuICRuZXc7IA0KCQl9DQoJCXJldHVybiBzZWxmOjokZXZlbnRVbmlxdWVOYW1lWyRuYW1lXVskaWRdOw0KCX0NCgkNCgkvKioNCgkgKglzb3J0IGFzc2Vzc21lbnRzIGJ5IGRheSBhbmQgZGF0ZS9vcmRlcg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc29ydF9hc3Nlc3NtZW50cygmJGFzc2Vzc21lbnRzLCAkcHJvcHMpDQoJew0KCQl1c29ydCgkYXNzZXNzbWVudHMsIGZ1bmN0aW9uKCRhLCAkYikgdXNlICgkcHJvcHMpIHsNCgkJCWlmKCRhLT4kcHJvcHNbMF0gPT0gJGItPiRwcm9wc1swXSkNCgkJCXsNCgkJCQlyZXR1cm4gJGEtPiRwcm9wc1sxXSA+ICRiLT4kcHJvcHNbMV0gPyAxIDogLTE7DQoJCQl9DQoJCQlyZXR1cm4gJGEtPiRwcm9wc1swXSA+ICRiLT4kcHJvcHNbMF0gPyAxIDogLTE7DQoJCX0pOw0KCX0NCgkNCgkvKioNCgkgKglzZXQgYXNzZXNzbWVudCBzdGF0ZSBpbiBEQg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QXNzZXNzbWVudFN0YXRlKCRyZWxlYXNlZEFjdGl2ZSwgJGRiX3JlbGVhc2VkQWN0aXZlLCAkZXZlbnQsICRwcm9ncmFtLCAkY291cnNlLCAkZGF5LCAkYXNzZXNzbWVudF90eXBlLCAkdXNlcklkID0gbnVsbCkNCgl7DQoJCSRzdGF0dXMgPSAwOw0KCQkkY2hlY2sgPSAwOw0KCQkvLyBmaXJzdCBjaGVjayBpZiB1cGRhdGUgaXMgbmVlZGVkDQoJCWlmICgkcmVsZWFzZWRBY3RpdmVbJ3N0YXR1cyddKQ0KCQl7DQoJCQkkY2hlY2sgPSAyOw0KCQkJKyskc3RhdHVzOw0KCQl9DQoJCWlmICgkZGJfcmVsZWFzZWRBY3RpdmVbJ3N0YXR1cyddKQ0KCQl7DQoJCQkkY2hlY2sgPSAyOw0KCQkJKyskc3RhdHVzOw0KCQl9DQoJCWlmICghaXNzZXQoJGRiX3JlbGVhc2VkQWN0aXZlWydpZCddKSB8fCAkc3RhdHVzICE9ICRjaGVjayB8fCAkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10gIT0gJGRiX3JlbGVhc2VkQWN0aXZlWydzdGFydCddIHx8ICRyZWxlYXNlZEFjdGl2ZVsnZW5kJ10gIT0gJGRiX3JlbGVhc2VkQWN0aXZlWydlbmQnXSkNCgkJew0KCQkJLy8gc2V0IHVzZXIgdG8gdGFyZ2V0DQoJCQlpZighJHVzZXJJZCkNCgkJCXsNCgkJCQkkdXNlcklkID0gc2VsZjo6JHVzZXItPmlkOw0KCQkJfQ0KCQkJLy8gc2V0IHRoZSBkYXRlIG9iamVjdA0KCQkJJGRhdGUgPSBGYWN0b3J5OjpnZXREYXRlKCk7DQoJCQkvLyBzZXQgdGhlIHN0YXJ0IGRhdGUgdG8gc3FsIGlmIHNldA0KCQkJJHN0YXJ0ID0gZmFsc2U7DQoJCQlpZiAoJHJlbGVhc2VkQWN0aXZlWydzdGFydCddICE9IHNlbGY6OiRub3REYXRlX29uZSAmJiAkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10pDQoJCQl7DQoJCQkJJHJlbGVhc2VkQWN0aXZlWydzdGFydCddID0gZGF0ZSgiWS1tLWQgSDppOnMiLCAkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10pOw0KCQkJCSRzdGFydCA9IHRydWU7DQoJCQl9DQoJCQkvLyBzZXQgdGhlIGVuZCBkYXRlIHRvIHNxbCBpZiBzZXQNCgkJCSRlbmQgPSBmYWxzZTsNCgkJCWlmICgkcmVsZWFzZWRBY3RpdmVbJ2VuZCddICE9IHNlbGY6OiRub3REYXRlX29uZSAmJiAkcmVsZWFzZWRBY3RpdmVbJ2VuZCddKQ0KCQkJew0KCQkJCSRyZWxlYXNlZEFjdGl2ZVsnZW5kJ10gPSBkYXRlKCJZLW0tZCBIOmk6cyIsICRyZWxlYXNlZEFjdGl2ZVsnZW5kJ10pOw0KCQkJCSRlbmQgPSB0cnVlOw0KCQkJfQ0KCQkJLy8gY29udmVydCB0byAxIG9yIDANCgkJCWlmICgkcmVsZWFzZWRBY3RpdmVbJ3N0YXR1cyddKQ0KCQkJew0KCQkJCSRyZWxlYXNlZEFjdGl2ZVsnc3RhdHVzJ10gPSAxOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRyZWxlYXNlZEFjdGl2ZVsnc3RhdHVzJ10gPSAwOw0KCQkJfQ0KCQkJLy8gZ2V0IGJhdGFiYXNlIG9iamVjdA0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQlpZiAoaXNzZXQoJGRiX3JlbGVhc2VkQWN0aXZlWydpZCddKSAmJiAkZGJfcmVsZWFzZWRBY3RpdmVbJ2lkJ10pDQoJCQl7DQoJCQkJJGRiX3JlbGVhc2VkQWN0aXZlWyd2ZXJzaW9uJ10rKzsNCgkJCQkvLyB1cGRhdGUgZW50cnkNCgkJCQkkb2JqZWN0ID0gbmV3IFxzdGRDbGFzcygpOw0KCQkJCS8vIE11c3QgYmUgYSB2YWxpZCBwcmltYXJ5IGtleSB2YWx1ZS4NCgkJCQkkb2JqZWN0LT5pZCA9ICRkYl9yZWxlYXNlZEFjdGl2ZVsnaWQnXTsNCgkJCQlpZiAoJHN0YXJ0KQ0KCQkJCXsNCgkJCQkJJG9iamVjdC0+cmVsZWFzZV9kYXRlCT0gJHJlbGVhc2VkQWN0aXZlWydzdGFydCddOw0KCQkJCX0NCgkJCQlpZiAoJGVuZCkNCgkJCQl7DQoJCQkJCSRvYmplY3QtPmFjdGl2ZV9kYXRlCT0gJHJlbGVhc2VkQWN0aXZlWydlbmQnXTsNCgkJCQl9DQoJCQkJJG9iamVjdC0+YWN0aXZlCQkJPSAkcmVsZWFzZWRBY3RpdmVbJ3N0YXR1cyddOw0KCQkJCSRvYmplY3QtPm1vZGlmaWVkCQk9ICRkYXRlLT50b1NxbCgpOw0KCQkJCSRvYmplY3QtPm1vZGlmaWVkX2J5CQk9ICR1c2VySWQ7DQoJCQkJJG9iamVjdC0+dmVyc2lvbgkJPSAkZGJfcmVsZWFzZWRBY3RpdmVbJ3ZlcnNpb24nXTsNCgkJCQkvLyBVcGRhdGUgdGhlaXIgZGV0YWlscyBpbiB0aGUgdXNlcnMgdGFibGUgdXNpbmcgaWQgYXMgdGhlIHByaW1hcnkga2V5Lg0KCQkJCSRkb25lID0gJGRiLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9hc3Nlc3NtZW50X3N0YXR1cycsICRvYmplY3QsICdpZCcpOw0KCQkJCS8vIGlmIGRvbmUgcmV0dXJuIGxhc3QgdXNlZCBpZA0KCQkJCWlmICgkZG9uZSkNCgkJCQl7DQoJCQkJCXJldHVybiAkb2JqZWN0LT5pZDsNCgkJCQl9DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gY3JlYXRlIGVudHJ5DQoJCQkJJG9iamVjdCA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQlpZiAoJHN0YXJ0KQ0KCQkJCXsNCgkJCQkJJG9iamVjdC0+cmVsZWFzZV9kYXRlID0gJHJlbGVhc2VkQWN0aXZlWydzdGFydCddOw0KCQkJCX0NCgkJCQlpZiAoJGVuZCkNCgkJCQl7DQoJCQkJCSRvYmplY3QtPmFjdGl2ZV9kYXRlID0gJHJlbGVhc2VkQWN0aXZlWydlbmQnXTsNCgkJCQl9DQoJCQkJJG9iamVjdC0+YWN0aXZlCQkJPSAkcmVsZWFzZWRBY3RpdmVbJ3N0YXR1cyddOw0KCQkJCSRvYmplY3QtPnN0dWRlbnR1c2VyCQk9ICR1c2VySWQ7DQoJCQkJJG9iamVjdC0+YXNzZXNzbWVudF90eXBlCT0gJGFzc2Vzc21lbnRfdHlwZTsNCgkJCQkkb2JqZWN0LT5jb3Vyc2UJCQk9ICRjb3Vyc2U7DQoJCQkJJG9iamVjdC0+ZGF5CQkJPSAkZGF5Ow0KCQkJCSRvYmplY3QtPmV2ZW50CQkJPSAkZXZlbnQ7DQoJCQkJJG9iamVjdC0+cHJvZ3JhbQkJPSAkcHJvZ3JhbTsNCgkJCQkkb2JqZWN0LT5jcmVhdGVkCQk9ICRkYXRlLT50b1NxbCgpOw0KCQkJCSRvYmplY3QtPmNyZWF0ZWRfYnkJCT0gJHVzZXJJZDsNCgkJCQkkb2JqZWN0LT52ZXJzaW9uCQk9IDE7DQoJCQkJJG9iamVjdC0+YWNjZXNzCQk9IDE7IC8vIFRPRE8gc2hvdWxkIGJlIHRoZSByZWdpc3RlcmVkIHZpZXcgYWNjZXNzDQoJCQkJLy8gSW5zZXJ0IHRoZSBvYmplY3QgaW50byB0aGUgdXNlciBwcm9maWxlIHRhYmxlLg0KCQkJCSRkb25lID0gJGRiLT5pbnNlcnRPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9hc3Nlc3NtZW50X3N0YXR1cycsICRvYmplY3QpOw0KCQkJCS8vIGlmIGRvbmUgcmV0dXJuIGxhc3QgdXNlZCBpZA0KCQkJCWlmICgkZG9uZSkNCgkJCQl7DQoJCQkJCSRuZXdJZCA9ICAkZGItPmluc2VydGlkKCk7DQoJCQkJCS8vIG1ha2Ugc3VyZSB0aGUgYWNjZXNzIG9mIGFzc2V0IGlzIHNldA0KCQkJCQlzZWxmOjpzZXRBc3NldCgkbmV3SWQsJ2Fzc2Vzc21lbnRfc3RhdHVzJyk7DQoJCQkJCXJldHVybiAkbmV3SWQ7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmIChpc3NldCgkZGJfcmVsZWFzZWRBY3RpdmVbJ2lkJ10pKQ0KCQl7DQoJCQlyZXR1cm4gJGRiX3JlbGVhc2VkQWN0aXZlWydpZCddOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLyoqDQoJICoJY2hlY2sgaWYgYXNzZXNzbWVudHMgYXJlIHJlbGVhc2VkIGFuZCBhY3RpdmUNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEFzc2Vzc21lbnRTdGF0dXMoJiRkYXRhKQ0KCXsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBhc3Nlc21lbnQgd2FzIGFscmVhZHkgc2V0DQoJCSRkYl9yZWxlYXNlZEFjdGl2ZQkJPSBzZWxmOjpkYkFzc2Vzc21lbnRTdGF0dXMoJGRhdGEpOw0KCQkkZGJfcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10JPSBzdHJ0b3RpbWUoJGRiX3JlbGVhc2VkQWN0aXZlWydzdGFydCddKTsNCgkJJGRiX3JlbGVhc2VkQWN0aXZlWydlbmQnXQk9IHN0cnRvdGltZSgkZGJfcmVsZWFzZWRBY3RpdmVbJ2VuZCddKTsNCgkJLy8gZGVmYXVsdHMNCgkJJGFjdGl2ZQkJPSB0cnVlOw0KCQkkcmVsZWFzZQk9IGZhbHNlOw0KCQkkcmVsZWFzZWRBY3RpdmUgPSBhcnJheSgnc3RhdHVzJyA9PiBmYWxzZSwgJ3N0YXJ0JyA9PiBzdHJ0b3RpbWUoJzAwMDAtMDAtMDAnKSwgJ2VuZCcgPT4gc3RydG90aW1lKCcwMDAwLTAwLTAwJykpOw0KCQkkZGF0YS0+bm90X3JlbGVhc2Vfbm90ZSA9IG51bGw7DQoJCSRkYXRhLT5ub3RfYWN0aXZlX25vdGUgPSBudWxsOw0KCQkkYXBwbGljYXRpb24JPSBzZWxmOjpjaGVja0V2ZW50QXBwbGljYXRpb24oJGRhdGEtPmV2ZW50X2lkKTsNCgkJLy8gc2V0IHRoZSBkYXRlIGZvciBub3cNCgkJJGRhdGEtPnRvZGF5CT0gRmFjdG9yeTo6Z2V0RGF0ZSgpLT50b1VuaXgoKTsNCgkJLy8gY2hlY2sgaWYgc3VibWlzdGlvbiB3YXMgYWxyZWFkeSBtYWRlDQoJCSRkYXRhLT5zdWJtaXNzaW9uID0gc2VsZjo6Y2hlY2tTdWJtaXNzaW9uKCRkYXRhLT5ldmVudF9pZCwkZGF0YS0+cHJvZ3JhbSwkZGF0YS0+Y291cnNlLCRkYXRhLT5kYXksJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV9pZCk7DQoJCS8vIGFkZCB0aGUgYXR0ZW5kYW5jZSBzd2l0Y2gNCgkJJGRhdGEtPmF0dGVuZGFuY2UgPSAoJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV9hdHRlbmRhbmNlID09IDEpID8gc2VsZjo6Y2hlY2tBdHRlbmRhbmNlRHluYW1pYygkZGF0YSk6dHJ1ZTsNCgkJLy8gb25seSBjaGVjayBpZiBub3QgcmVsZWFzZWQNCgkJaWYgKCRkYl9yZWxlYXNlZEFjdGl2ZVsnc3RhdHVzJ10gIT0gMSkNCgkJew0KCQkJLy8gY2hlY2sgaWYgdGhlIHJlbGVhc2UgYWN0aXZlIHN0YXJ0IHNob3VsZCBiZSBzZXQNCgkJCWlmICgkZGJfcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10gPT0gc2VsZjo6JG5vdERhdGVfb25lIHx8ICEkZGJfcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10pDQoJCQl7DQoJCQkJJGdldERhdGUgPSB0cnVlOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRnZXREYXRlID0gZmFsc2U7DQoJCQl9DQoJCQkvLyBzd2l0Y2ggb24gcmVsZWFzZSB0eXBlcw0KCQkJc3dpdGNoICgkZGF0YS0+YXNzZXNzbWVudF90eXBlX3JlbGVhc2VfdHlwZSkNCgkJCXsNCgkJCQljYXNlIDA6DQoJCQkJCS8vIGltbWVkaWF0bHkNCgkJCQkJJHJlbGVhc2UgPSAoJGRhdGEtPmF0dGVuZGFuY2UpID8gJGFwcGxpY2F0aW9uOiRkYXRhLT5hdHRlbmRhbmNlOw0KCQkJCQlpZiAoISRyZWxlYXNlKQ0KCQkJCQl7DQoJCQkJCQkkZGF0YS0+bm90X3JlbGVhc2Vfbm90ZSA9ICdub19hdHRlbmRhbmNlJzsNCgkJCQkJfQ0KCQkJCQkvLyBzZXQgc3RhcnQNCgkJCQkJaWYgKCRnZXREYXRlKQ0KCQkJCQl7DQoJCQkJCQkkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10gPSBzZWxmOjokZXZlbnRGaXJzdERhdGU7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10gPSAkZGJfcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAxOg0KCQkJCQkvLyBiZWZvcmUgdGFyZ2V0DQoJCQkJCWlmICgkZ2V0RGF0ZSkNCgkJCQkJew0KCQkJCQkJJHJlbGVhc2VkQWN0aXZlWydzdGFydCddID0gc2VsZjo6Z2V0VGFyZ2V0UmVsZWFzZURhdGUoJGRhdGEsJ2JlZm9yZScpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJHJlbGVhc2VkQWN0aXZlWydzdGFydCddID0gJGRiX3JlbGVhc2VkQWN0aXZlWydzdGFydCddOw0KCQkJCQl9DQoJCQkJCWlmICgkYXBwbGljYXRpb24gJiYgJGRhdGEtPmF0dGVuZGFuY2UpDQoJCQkJCXsNCgkJCQkJCWlmICgkZGF0YS0+dG9kYXkgPiAkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10pDQoJCQkJCQl7DQoJCQkJCQkJJHJlbGVhc2UgPSB0cnVlOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCSRkYXRhLT5ub3RfcmVsZWFzZV9ub3RlID0gJ2JlZm9yZV9vcGVuX2RhdGUnOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGRhdGEtPm5vdF9yZWxlYXNlX25vdGUgPSAnbm9fYXR0ZW5kYW5jZSc7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAyOg0KCQkJCQkvLyBhZnRlciB0YXJnZXQNCgkJCQkJaWYgKCRnZXREYXRlKQ0KCQkJCQl7DQoJCQkJCQkkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10gPSBzZWxmOjpnZXRUYXJnZXRSZWxlYXNlRGF0ZSgkZGF0YSwnYWZ0ZXInKTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSRyZWxlYXNlZEFjdGl2ZVsnc3RhcnQnXSA9ICRkYl9yZWxlYXNlZEFjdGl2ZVsnc3RhcnQnXTsNCgkJCQkJfQ0KCQkJCQlpZiAoJGFwcGxpY2F0aW9uICYmICRkYXRhLT5hdHRlbmRhbmNlKQ0KCQkJCQl7DQoJCQkJCQlpZiAoJGRhdGEtPnRvZGF5ID4gJHJlbGVhc2VkQWN0aXZlWydzdGFydCddKQ0KCQkJCQkJew0KCQkJCQkJCSRyZWxlYXNlID0gdHJ1ZTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkkZGF0YS0+bm90X3JlbGVhc2Vfbm90ZSA9ICdiZWZvcmVfb3Blbl9kYXRlJzsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSRkYXRhLT5ub3RfcmVsZWFzZV9ub3RlID0gJ25vX2F0dGVuZGFuY2UnOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgMzoNCgkJCQkJLy8gb24gdGFyZ2V0DQoJCQkJCWlmICgkZ2V0RGF0ZSkNCgkJCQkJew0KCQkJCQkJJHJlbGVhc2VkQWN0aXZlWydzdGFydCddID0gc2VsZjo6Z2V0VGFyZ2V0UmVsZWFzZURhdGUoJGRhdGEsJ29uJyk7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10gPSAkZGJfcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J107DQoJCQkJCX0NCgkJCQkJaWYgKCRhcHBsaWNhdGlvbiAmJiAkZGF0YS0+YXR0ZW5kYW5jZSkNCgkJCQkJew0KCQkJCQkJaWYgKCRkYXRhLT50b2RheSA+ICRyZWxlYXNlZEFjdGl2ZVsnc3RhcnQnXSkNCgkJCQkJCXsNCgkJCQkJCQkkcmVsZWFzZSA9IHRydWU7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJJGRhdGEtPm5vdF9yZWxlYXNlX25vdGUgPSAnYmVmb3JlX29wZW5fZGF0ZSc7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkZGF0YS0+bm90X3JlbGVhc2Vfbm90ZSA9ICdub19hdHRlbmRhbmNlJzsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRyZWxlYXNlID0gdHJ1ZTsNCgkJCSRyZWxlYXNlZEFjdGl2ZVsnc3RhcnQnXSA9ICRkYl9yZWxlYXNlZEFjdGl2ZVsnc3RhcnQnXTsNCgkJfQ0KCQkvLyBvbmx5IGNoZWNrIGlmIGFjdGl2ZQ0KCQlpZiAoJGRiX3JlbGVhc2VkQWN0aXZlWydzdGF0dXMnXSA9PSAxIHx8ICRyZWxlYXNlKQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB0aGUgcmVsZWFzZSBhY3RpdmUgc3RhcnQgc2hvdWxkIGJlIHNldA0KCQkJaWYgKCRkYl9yZWxlYXNlZEFjdGl2ZVsnZW5kJ10gPT0gc2VsZjo6JG5vdERhdGVfb25lIHx8ICEkZGJfcmVsZWFzZWRBY3RpdmVbJ2VuZCddKQ0KCQkJew0KCQkJCSRnZXREYXRlID0gdHJ1ZTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkZ2V0RGF0ZSA9IGZhbHNlOw0KCQkJfQ0KCQkJLy8gc3dpdGNoIG9uIGFjdGl2ZSB0eXBlDQoJCQlzd2l0Y2ggKCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfYWN0aXZlX3R5cGUpDQoJCQl7DQoJCQkJY2FzZSAxOg0KCQkJCQkvLyB1bnRpbCBzdWJtaXNzaW9uDQoJCQkJCWlmICgkZGF0YS0+c3VibWlzc2lvbikNCgkJCQkJew0KCQkJCQkJJGFjdGl2ZSA9IGZhbHNlOw0KCQkJCQkJJGRhdGEtPm5vdF9hY3RpdmVfbm90ZSA9ICdzdWJtaXR0ZWQnOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgMjoNCgkJCQkJLy8gdW50aWwgc3VibWlzc2lvbiBvciBwZXJpb2QgYWZ0ZXIgdGFyZ2V0DQoJCQkJCWlmICgkZ2V0RGF0ZSkNCgkJCQkJew0KCQkJCQkJJHJlbGVhc2VkQWN0aXZlWydlbmQnXSA9IHNlbGY6OmdldFRhcmdldEFjdGl2ZURhdGUoJGRhdGEsICdhZnRlcicsJHJlbGVhc2VkQWN0aXZlWydzdGFydCddKTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCS8vIG11c3QgYmUgY2hlY2tlZCBldmVyeSB0aW1lIHNpbmNlIGl0IGlzIGR5bmFtaWMNCgkJCQkJCWlmICg2ID09ICRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfYWN0aXZlX3RhcmdldCkNCgkJCQkJCXsNCgkJCQkJCQkkcmVsZWFzZWRBY3RpdmVbJ2VuZCddID0gc2VsZjo6Z2V0VGFyZ2V0QWN0aXZlRGF0ZSgkZGF0YSwgJ2FmdGVyJywkcmVsZWFzZWRBY3RpdmVbJ3N0YXJ0J10pOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCSRyZWxlYXNlZEFjdGl2ZVsnZW5kJ10gPSAkZGJfcmVsZWFzZWRBY3RpdmVbJ2VuZCddOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWlmICgkZGF0YS0+c3VibWlzc2lvbikNCgkJCQkJew0KCQkJCQkJJGFjdGl2ZSA9IGZhbHNlOw0KCQkJCQkJJGRhdGEtPm5vdF9hY3RpdmVfbm90ZSA9ICdzdWJtaXR0ZWQnOw0KCQkJCQl9DQoJCQkJCWVsc2VpZiAoJGRhdGEtPnRvZGF5ID4gJHJlbGVhc2VkQWN0aXZlWydlbmQnXSkNCgkJCQkJew0KCQkJCQkJJGFjdGl2ZSA9IGZhbHNlOw0KCQkJCQkJJGRhdGEtPm5vdF9hY3RpdmVfbm90ZSA9ICdwYXN0X2Nsb3NlX2RhdGUnOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgMzoNCgkJCQkJLy8gcGVyaW9kIGFmdGVyIHRhcmdldA0KCQkJCQlpZiAoJGdldERhdGUpDQoJCQkJCXsNCgkJCQkJCSRyZWxlYXNlZEFjdGl2ZVsnZW5kJ10gPSBzZWxmOjpnZXRUYXJnZXRBY3RpdmVEYXRlKCRkYXRhLCAnYWZ0ZXInLCRyZWxlYXNlZEFjdGl2ZVsnc3RhcnQnXSk7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkvLyBtdXN0IGJlIGNoZWNrZWQgZXZlcnkgdGltZSBzaW5jZSBpdCBpcyBkeW5hbWljDQoJCQkJCQlpZiAoNiA9PSAkZGF0YS0+YXNzZXNzbWVudF90eXBlX2FjdGl2ZV90YXJnZXQpDQoJCQkJCQl7DQoJCQkJCQkJJHJlbGVhc2VkQWN0aXZlWydlbmQnXSA9IHNlbGY6OmdldFRhcmdldEFjdGl2ZURhdGUoJGRhdGEsICdhZnRlcicsJHJlbGVhc2VkQWN0aXZlWydzdGFydCddKTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkkcmVsZWFzZWRBY3RpdmVbJ2VuZCddID0gJGRiX3JlbGVhc2VkQWN0aXZlWydlbmQnXTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQlpZiAoJGRhdGEtPnRvZGF5ID4gJHJlbGVhc2VkQWN0aXZlWydlbmQnXSkNCgkJCQkJew0KCQkJCQkJJGFjdGl2ZSA9IGZhbHNlOw0KCQkJCQkJJGRhdGEtPm5vdF9hY3RpdmVfbm90ZSA9ICdwYXN0X2Nsb3NlX2RhdGUnOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHJlbGVhc2VkQWN0aXZlWydlbmQnXSA9ICRkYl9yZWxlYXNlZEFjdGl2ZVsnZW5kJ107DQoJCX0NCgkJLy8gc2V0IGdsb2JhbGx5IHJlbGVhc2Ugb2YgdGhpcyBhc3Nlc3NtZW50DQoJCWlmICgkcmVsZWFzZSAmJiAkYWN0aXZlKQ0KCQl7DQoJCQkkcmVsZWFzZWRBY3RpdmVbJ3N0YXR1cyddID0gdHJ1ZTsNCgkJCS8vIHNldCB0aGUgZGF0YWJhc2UgaWYgbmVlZGVkDQoJCQkkcmVsZWFzZWRBY3RpdmVbJ2lkJ10gPSBzZWxmOjpzZXRBc3Nlc3NtZW50U3RhdGUoJHJlbGVhc2VkQWN0aXZlLCRkYl9yZWxlYXNlZEFjdGl2ZSwkZGF0YS0+ZXZlbnRfaWQsJGRhdGEtPnByb2dyYW0sJGRhdGEtPmNvdXJzZSwkZGF0YS0+ZGF5LCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfaWQpOw0KCQl9DQoJCS8vIHNldCBnbG9iYWxseSBpbmFjdGl2aXR5IG9mIHRoaXMgYXNzZXNzbWVudA0KCQllbHNlDQoJCXsNCgkJCSRyZWxlYXNlZEFjdGl2ZVsnc3RhdHVzJ10gPSBmYWxzZTsNCgkJCS8vIHNldCB0aGUgZGF0YWJhc2UgaWYgbmVlZGVkDQoJCQkkcmVsZWFzZWRBY3RpdmVbJ2lkJ10gPSBzZWxmOjpzZXRBc3Nlc3NtZW50U3RhdGUoJHJlbGVhc2VkQWN0aXZlLCRkYl9yZWxlYXNlZEFjdGl2ZSwkZGF0YS0+ZXZlbnRfaWQsJGRhdGEtPnByb2dyYW0sJGRhdGEtPmNvdXJzZSwkZGF0YS0+ZGF5LCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfaWQpOw0KCQl9DQoJCXJldHVybiAkcmVsZWFzZWRBY3RpdmU7DQoJfQ0KCQ0KCS8qKg0KCSAqCWNoZWNrIGlmIGFzc2Vzc21lbnRzIGFscmVhZHkgc2V0IGluIERCDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBkYkFzc2Vzc21lbnRTdGF0dXMoJGRhdGEsJHVzZXJJZCA9IG51bGwpDQoJew0KCQkvLyBzZXQgdXNlciB0byB0YXJnZXQNCgkJaWYoISR1c2VySWQpDQoJCXsNCgkJCSR1c2VySWQgPSBzZWxmOjokdXNlci0+aWQ7DQoJCX0NCgkJDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCWFycmF5KCdpZCcsJ2FjdGl2ZScsJ3JlbGVhc2VfZGF0ZScsJ2FjdGl2ZV9kYXRlJywndmVyc2lvbicpLA0KCQkJYXJyYXkoJ2lkJywnc3RhdHVzJywnc3RhcnQnLCdlbmQnLCd2ZXJzaW9uJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fYXNzZXNzbWVudF9zdGF0dXMnKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3N0dWRlbnR1c2VyJykgLiAnID0gJy4gKGludCkkdXNlcklkKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYXNzZXNzbWVudF90eXBlJykgLiAnID0gJy4gKGludCkkZGF0YS0+YXNzZXNzbWVudF90eXBlX2lkKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnY291cnNlJykgLiAnID0gJy4gKGludCkkZGF0YS0+Y291cnNlKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZGF5JykgLiAnID0gJy4gKGludCkkZGF0YS0+ZGF5KTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHJvZ3JhbScpIC4gJyA9ICcuIChpbnQpJGRhdGEtPnByb2dyYW0pOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdldmVudCcpIC4gJyA9ICcuIChpbnQpJGRhdGEtPmV2ZW50X2lkKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gJGRiLT5sb2FkQXNzb2MoKTsNCgkJfQ0KCQlyZXR1cm4gYXJyYXkoJ3N0YXR1cycgPT4gMCwgJ3N0YXJ0JyA9PiAnMDAwMC0wMC0wMCcsICdlbmQnID0+ICcwMDAwLTAwLTAwJyk7DQoJfQ0KCQ0KCS8qKg0KCSAqCVRhcmdldCBSZWxlYXNlIERhdGUNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFRhcmdldFJlbGVhc2VEYXRlKCYkZGF0YSwkYWN0aW9uKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IHRoZSB0YXJnZXQgc3RhcnQgZGF0ZQ0KCQkkdGFnZXRTdGFydERhdGUgPSBmYWxzZTsNCgkJc3dpdGNoICgkZGF0YS0+YXNzZXNzbWVudF90eXBlX3JlbGVhc2VfdGFyZ2V0KQ0KCQl7DQoJCQljYXNlIDE6DQoJCQkJLy8gU2Vzc2lvbg0KCQkJCSRkYXkgPSBzZWxmOjpnZXRWYXIoJ3Nlc3Npb24nLCAkZGF0YS0+YXNzZXNzbWVudF90eXBlX3JlbGVhc2Vfc2Vzc2lvbiwgJ2lkJywgJ2RheScpOw0KCQkJCSRjb3Vyc2UgPSBzZWxmOjpnZXRWYXIoJ3Nlc3Npb24nLCAkZGF0YS0+YXNzZXNzbWVudF90eXBlX3JlbGVhc2Vfc2Vzc2lvbiwgJ2lkJywgJ2NvdXJzZScpOw0KCQkJCWlmICgnYWZ0ZXInID09ICRhY3Rpb24pDQoJCQkJew0KCQkJCQkkdGFnZXRTdGFydERhdGUgPSBzdHJ0b3RpbWUoc2VsZjo6Y2hlY2tBdHRlbmRhbmNlKCRkYXRhLT5ldmVudF9pZCwkZGF0YS0+cHJvZ3JhbSwkY291cnNlLCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfcmVsZWFzZV9zZXNzaW9uLHNlbGY6OiR1c2VyLT5pZCwnZGF0ZScpKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHRhZ2V0U3RhcnREYXRlID0gKGlzc2V0KHNlbGY6OiRjb3Vyc2VCdWNrZXRbJGRhdGEtPmV2ZW50X2lkXVskY291cnNlXVskZGF5XSkpID8gKHNlbGY6OiRjb3Vyc2VCdWNrZXRbJGRhdGEtPmV2ZW50X2lkXVskY291cnNlXVskZGF5XSk6ZmFsc2U7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAyOg0KCQkJCS8vIERheQ0KCQkJCSR0YWdldFN0YXJ0RGF0ZSA9IChpc3NldChzZWxmOjokY291cnNlQnVja2V0WyRkYXRhLT5ldmVudF9pZF1bJGRhdGEtPmNvdXJzZV1bJGRhdGEtPmRheV0pKSA/IChzZWxmOjokY291cnNlQnVja2V0WyRkYXRhLT5ldmVudF9pZF1bJGRhdGEtPmNvdXJzZV1bJGRhdGEtPmRheV0pOmZhbHNlOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAzOg0KCQkJCS8vIENvdXJzZQ0KCQkJCSR0YWdldFN0YXJ0RGF0ZSA9IChpc3NldChzZWxmOjokY291cnNlRmlyc3REYXRlWyRkYXRhLT5jb3Vyc2VdKSkgPyAoc2VsZjo6JGNvdXJzZUZpcnN0RGF0ZVskZGF0YS0+Y291cnNlXSk6ZmFsc2U7DQoJCQkJYnJlYWs7DQoJCQljYXNlIDQ6DQoJCQkJLy8gUHJvZ3JhbQ0KCQkJCSR0YWdldFN0YXJ0RGF0ZSA9IChpc3NldChzZWxmOjokZXZlbnRGaXJzdERhdGUpKSA/IChzZWxmOjokZXZlbnRGaXJzdERhdGUpOmZhbHNlOw0KCQkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBzZWxmOjpnZXRUYWdldERhdGUoJGRhdGEsJHRhZ2V0U3RhcnREYXRlLCdyZWxlYXNlJywkYWN0aW9uKTsNCgkJDQoJfQ0KCQ0KCS8qKg0KCSAqCVRhcmdldCBBY3RpdmUgVW50aWwgRGF0ZQ0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFyZ2V0QWN0aXZlRGF0ZSgmJGRhdGEsJGFjdGlvbiwkcmVsZWFzZURhdGUpDQoJew0KCQkvLyBmaXJzdCBnZXQgdGhlIHRhcmdldCBzdGFydCBkYXRlDQoJCSR0YWdldFN0YXJ0RGF0ZSA9IGZhbHNlOw0KCQlzd2l0Y2ggKCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfYWN0aXZlX3RhcmdldCkNCgkJew0KCQkJY2FzZSAxOg0KCQkJCS8vIFJlbGVhc2UNCgkJCQkkdGFnZXRTdGFydERhdGUgPSAkcmVsZWFzZURhdGU7DQoJCQkJYnJlYWs7DQoJCQljYXNlIDI6DQoJCQkJLy8gU2Vzc2lvbg0KCQkJCSRkYXkgPSBzZWxmOjpnZXRWYXIoJ3Nlc3Npb24nLCAkZGF0YS0+YXNzZXNzbWVudF90eXBlX2FjdGl2ZV9zZXNzaW9uLCAnaWQnLCAnZGF5Jyk7DQoJCQkJJGNvdXJzZSA9IHNlbGY6OmdldFZhcignc2Vzc2lvbicsICRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfYWN0aXZlX3Nlc3Npb24sICdpZCcsICdjb3Vyc2UnKTsNCgkJCQlpZiAoJ2FmdGVyJyA9PSAkYWN0aW9uKQ0KCQkJCXsNCgkJCQkJJHRhZ2V0U3RhcnREYXRlID0gc3RydG90aW1lKHNlbGY6OmNoZWNrQXR0ZW5kYW5jZSgkZGF0YS0+ZXZlbnRfaWQsJGRhdGEtPnByb2dyYW0sJGNvdXJzZSwkZGF0YS0+YXNzZXNzbWVudF90eXBlX2FjdGl2ZV9zZXNzaW9uLHNlbGY6OiR1c2VyLT5pZCwnZGF0ZScpKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHRhZ2V0U3RhcnREYXRlID0gKGlzc2V0KHNlbGY6OiRjb3Vyc2VCdWNrZXRbJGRhdGEtPmV2ZW50X2lkXVskY291cnNlXVskZGF5XSkpID8gKHNlbGY6OiRjb3Vyc2VCdWNrZXRbJGRhdGEtPmV2ZW50X2lkXVskY291cnNlXVskZGF5XSk6ZmFsc2U7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAzOg0KCQkJCS8vIERheQ0KCQkJCSR0YWdldFN0YXJ0RGF0ZSA9IChpc3NldChzZWxmOjokY291cnNlQnVja2V0WyRkYXRhLT5ldmVudF9pZF1bJGRhdGEtPmNvdXJzZV1bJGRhdGEtPmRheV0pKSA/IChzZWxmOjokY291cnNlQnVja2V0WyRkYXRhLT5ldmVudF9pZF1bJGRhdGEtPmNvdXJzZV1bJGRhdGEtPmRheV0pOmZhbHNlOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSA0Og0KCQkJCS8vIENvdXJzZQ0KCQkJCSR0YWdldFN0YXJ0RGF0ZSA9IChpc3NldChzZWxmOjokY291cnNlRmlyc3REYXRlWyRkYXRhLT5jb3Vyc2VdKSkgPyAoc2VsZjo6JGNvdXJzZUZpcnN0RGF0ZVskZGF0YS0+Y291cnNlXSk6ZmFsc2U7DQoJCQkJYnJlYWs7DQoJCQljYXNlIDU6DQoJCQkJLy8gUHJvZ3JhbQ0KCQkJCSR0YWdldFN0YXJ0RGF0ZSA9IChpc3NldChzZWxmOjokZXZlbnRGaXJzdERhdGUpKSA/IChzZWxmOjokZXZlbnRGaXJzdERhdGUpOmZhbHNlOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSA2Og0KCQkJCS8vIE9wZW5lZCB0aGUgYXNzZXNzbWVudCAtIHVzZSBub3cgd2l0aCBhZGRlZCB0aW1lDQoJCQkJJHRhZ2V0U3RhcnREYXRlID0gRmFjdG9yeTo6Z2V0RGF0ZSgpLT50b1VuaXgoKTsNCgkJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6Z2V0VGFnZXREYXRlKCRkYXRhLCR0YWdldFN0YXJ0RGF0ZSwnYWN0aXZlJywkYWN0aW9uKTsNCgkJDQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnZXREYXRlKCRkYXRhLCR0YWdldFN0YXJ0RGF0ZSwkdHlwZSwkYWN0aW9uKQ0KCXsNCgkJJHRhZ2V0RGF0ZSA9IHN0cnRvdGltZSgnMDAwMC0wMC0wMCcpOw0KCQkvLyBpZiB0YXJnZXQgc3RhcnQgZGF0ZSB3YXMgZm91bmQNCgkJaWYgKCR0YWdldFN0YXJ0RGF0ZSkNCgkJew0KCQkJaWYgKCRhY3Rpb24gIT0gJ29uJykNCgkJCXsNCgkJCQkvLyBzZXQgb3BlcmF0b3INCgkJCQkkb3BlcmF0b3IgPSAnKyc7DQoJCQkJaWYgKCRhY3Rpb24gPT0gJ2JlZm9yZScpDQoJCQkJew0KCQkJCQkkb3BlcmF0b3IgPSAnLSc7DQoJCQkJfQ0KCQkJCS8vIGdldCBwZXJpb2QgbGVuZ3RoDQoJCQkJc3dpdGNoICgkZGF0YS0+eydhc3Nlc3NtZW50X3R5cGVfJy4kdHlwZS4nX3BlcmlvZF90eXBlJ30pDQoJCQkJew0KCQkJCQljYXNlIDE6DQoJCQkJCQkvLyBtaW51dGVzDQoJCQkJCQkkdGFnZXREYXRlID0gc3RydG90aW1lKCRvcGVyYXRvci4kZGF0YS0+eydhc3Nlc3NtZW50X3R5cGVfJy4kdHlwZS4nX3BlcmlvZF9sZW5ndGgnfS4nIG1pbnV0ZXMnLCAkdGFnZXRTdGFydERhdGUpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgMjoNCgkJCQkJCS8vIGhvdXJzDQoJCQkJCQkkdGFnZXREYXRlID0gc3RydG90aW1lKCRvcGVyYXRvci4kZGF0YS0+eydhc3Nlc3NtZW50X3R5cGVfJy4kdHlwZS4nX3BlcmlvZF9sZW5ndGgnfS4nIGhvdXJzJywgJHRhZ2V0U3RhcnREYXRlKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlIDM6DQoJCQkJCQkvLyBkYXlzDQoJCQkJCQkkdGFnZXREYXRlID0gc3RydG90aW1lKCRvcGVyYXRvci4kZGF0YS0+eydhc3Nlc3NtZW50X3R5cGVfJy4kdHlwZS4nX3BlcmlvZF9sZW5ndGgnfS4nIGRheXMnLCAkdGFnZXRTdGFydERhdGUpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgNDoNCgkJCQkJCS8vIHNldmVuIGRheXMvd2Vla3MNCgkJCQkJCSR0YWdldERhdGUgPSBzdHJ0b3RpbWUoJG9wZXJhdG9yLiRkYXRhLT57J2Fzc2Vzc21lbnRfdHlwZV8nLiR0eXBlLidfcGVyaW9kX2xlbmd0aCd9Licgd2Vla3MnLCAkdGFnZXRTdGFydERhdGUpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgNToNCgkJCQkJCS8vIHRoaXJ0eSBkYXlzL21vbnRocw0KCQkJCQkJJHRhZ2V0RGF0ZSA9IHN0cnRvdGltZSgkb3BlcmF0b3IuJGRhdGEtPnsnYXNzZXNzbWVudF90eXBlXycuJHR5cGUuJ19wZXJpb2RfbGVuZ3RoJ30uJyBtb250aHMnLCAkdGFnZXRTdGFydERhdGUpOwkJCQkJCQ0KCQkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXJldHVybiAkdGFnZXRTdGFydERhdGU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICR0YWdldERhdGU7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkYXNzZXNzbWVudHNPdXRzdGFuZGluZyA9IGFycmF5KCk7DQoJDQoJLyoqDQoJICoJc2V0IEFzc2Vzc21lbnQgQ29tcGxldGlvbiBOb3Rlcw0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QXNzZXNzbWVudHNPdXRzdGFuZGluZygkYXNzZXNzbWVudCwgJGV2ZW50X25hbWUsICRhZGQgPSBmYWxzZSkNCgl7DQoJCS8vIGNoZWNrIGlmIHRoaXMgYXNzZXNzbWVudCBoYXMgYmVlbiBkb25lDQoJCWlmICgkYWRkIHx8ICEkYXNzZXNzbWVudC0+c3VibWlzc2lvbikNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokYXNzZXNzbWVudHNPdXRzdGFuZGluZ1skZXZlbnRfbmFtZV0pKQ0KCQkJew0KCQkJCXNlbGY6OiRhc3Nlc3NtZW50c091dHN0YW5kaW5nWyRldmVudF9uYW1lXSA9IGFycmF5KCk7DQoJCQl9DQoJCQlzZWxmOjokYXNzZXNzbWVudHNPdXRzdGFuZGluZ1skZXZlbnRfbmFtZV1bXSA9ICRhc3Nlc3NtZW50LT5hc3Nlc3NtZW50X3R5cGVfbmFtZSAuICcgJyAuIFRleHQ6Ol8oJ2ZvcicpIC4gJyAnLiAkYXNzZXNzbWVudC0+Y291cnNlX25hbWU7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCS8qKg0KCSAqCWdldCBBc3Nlc3NtZW50IENvbXBsZXRpb24gTm90ZXMNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEFzc2Vzc21lbnRzT3V0c3RhbmRpbmcoJGV2ZW50X25hbWUpDQoJew0KCQkvLyBjaGVjayBpZiB0aGlzIGV2ZW50IGhhcyBhbnkgbm90ZXMNCgkJaWYgKGlzc2V0KHNlbGY6OiRhc3Nlc3NtZW50c091dHN0YW5kaW5nWyRldmVudF9uYW1lXSkpDQoJCXsNCgkJCXJldHVybiAnPHVsIGNsYXNzPSJ1ay1saXN0Ij48bGk+JyAuIGltcGxvZGUoJzwvbGk+PGxpPicsIHNlbGY6OiRhc3Nlc3NtZW50c091dHN0YW5kaW5nWyRldmVudF9uYW1lXSkgLiAnPC9saT48L3VsPic7DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCgkNCgkvKioNCgkgKgljaGVjayBzdWJtaXNzaW9uDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja1N1Ym1pc3Npb24oJGV2ZW50LCRwcm9ncmFtLCRjb3Vyc2UsJGRheSwkYXNzZXNzbWVudCwkdXNlcklkID0gbnVsbCkNCgl7DQoJCS8vIHNldCB1c2VyIHRvIHRhcmdldA0KCQlpZighJHVzZXJJZCkNCgkJew0KCQkJJHVzZXJJZCA9IHNlbGY6OiR1c2VyLT5pZDsNCgkJfQ0KCQkNCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2Fzc2Vzc21lbnQnKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3N0dWRlbnR1c2VyJykgLiAnID0gJy4gKGludCkkdXNlcklkKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYXNzZXNzbWVudF90eXBlJykgLiAnID0gJy4gKGludCkkYXNzZXNzbWVudCk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2NvdXJzZScpIC4gJyA9ICcuIChpbnQpJGNvdXJzZSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2RheScpIC4gJyA9ICcuIChpbnQpJGRheSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3Byb2dyYW0nKSAuICcgPSAnLiAoaW50KSRwcm9ncmFtKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZXZlbnQnKSAuICcgPSAnLiAoaW50KSRldmVudCk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gJGRiLT5sb2FkUmVzdWx0KCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCgkvKioNCgkqIAlUaGUgQ291cnNlIHRlbXAvQnVja2V0DQoJKiovDQoJcHVibGljIHN0YXRpYyAkY291cnNlQnVja2V0ID0gYXJyYXkoKTsNCgkNCgkvKioNCgkqIAlUaGUgRXZlbnQgRmlyc3QgRGF0ZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJGV2ZW50Rmlyc3REYXRlOw0KCQ0KCS8qKg0KCSogCVRoZSBDb3Vyc2UgRmlyc3QgRGF0ZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJGNvdXJzZUZpcnN0RGF0ZSA9IGFycmF5KCk7DQoJDQoJLyoqDQoJICoJc2V0IGF2YWlsYWJsZSBhc3Nlc3NtZW50cw0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0QXZhbGlhYmxlQXNzZXNzbWVudHMoJGRhdGEpDQoJew0KCQlpZiAoIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJew0KCQkJLy8gbG9hZCBwcm9maWxlIG1vZGVsDQoJCQkkbW9kZWwgPSBzZWxmOjpnZXRNb2RlbCgncHJvZmlsZScsIEpQQVRIX0NPTVBPTkVOVF9TSVRFKTsNCgkJCS8vIGxvYWQgZGF0YSBpZiBub25lIGdpdmVuDQoJCQkkZGF0YSA9ICRtb2RlbC0+Z2V0QXNzZXNzbWVudHMoKTsNCgkJfQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQl7DQoJCQkkYXNzZXNzbWVudHMgPSBhcnJheSgpOw0KCQkJLy8gc29ydCB0aGUgZGF0YQ0KCQkJZm9yZWFjaCAoJGRhdGEgYXMgJGV2ZW50KQ0KCQkJew0KCQkJCS8vIHNldCB0aGUgY291cnNlcyBpbmZvDQoJCQkJJGNvdXJzZUJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRldmVudC0+ZXZlbnRfY291cnNlX2RhdGUpKQ0KCQkJCXsNCgkJCQkJLy8gY29udmVydCB0byBhbiBhcnJheQ0KCQkJCQkkZXZlbnRfY291cnNlX2RhdGUgPSBqc29uX2RlY29kZSgkZXZlbnQtPmV2ZW50X2NvdXJzZV9kYXRlKTsNCgkJCQkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRldmVudF9jb3Vyc2VfZGF0ZSkpDQoJCQkJCXsNCgkJCQkJCSRldmVudC0+ZXZlbnRfY291cnNlX2RhdGUgPSBhcnJheSgpOw0KCQkJCQkJJGZpcnN0Q291cnNlID0gOTk5Ow0KCQkJCQkJJGZpcnN0RGF5ID0gOTk5Ow0KCQkJCQkJLy8gc2V0IHRoZSBjb3Vyc2VzIHRvIGRheXMNCgkJCQkJCWZvcmVhY2ggKCRldmVudF9jb3Vyc2VfZGF0ZSBhcyAka2V5ID0+ICR2YWx1ZXMpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2YWx1ZXMpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJZm9yZWFjaCgkdmFsdWVzIGFzICRuciA9PiAkdmFsdWUpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRldmVudC0+ZXZlbnRfY291cnNlX2RhdGVbJG5yXVska2V5XSA9ICR2YWx1ZTsNCgkJCQkJCQkJCS8vIHNldCBmaXJzdCBjb3Vyc2UgKFRPRE8pIHNob3VsZCB1c2Ugb3JkZXIgaW5zdGVhZA0KCQkJCQkJCQkJaWYgKCRrZXkgPT0gJ2NvdXJzZScpDQoJCQkJCQkJCQl7CQ0KCQkJCQkJCQkJCWlmICgkZmlyc3RDb3Vyc2UgPiAkdmFsdWUpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkkZmlyc3RDb3Vyc2UgPSAkdmFsdWU7DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJLy8gc2V0IGZpcnN0IGRheSAoc2hvdWxkIGFsd2F5cyBiZSAxIGJ1dCBqdXN0IGluY2FzZSkNCgkJCQkJCQkJCWlmICgka2V5ID09ICdkYXknKQ0KCQkJCQkJCQkJewkNCgkJCQkJCQkJCQlpZiAoJGZpcnN0RGF5ID4gJHZhbHVlKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJJGZpcnN0RGF5ID0gJHZhbHVlOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkvLyBidWlsZCBzZWFyY2ggYnVja2V0DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZXZlbnQtPmV2ZW50X2NvdXJzZV9kYXRlKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCAoJGV2ZW50LT5ldmVudF9jb3Vyc2VfZGF0ZSBhcyAkdmFsKQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRjb3Vyc2VCdWNrZXRbJGV2ZW50LT5ldmVudF9pZF1bJHZhbFsnY291cnNlJ11dWyR2YWxbJ2RheSddXSA9IHN0cnRvdGltZSgkdmFsWydkYXRlJ10pOw0KCQkJCQkJCS8vIHNldCBmaXJzdCBkYXkgb2YgZXZlbnQvcHJvZ3JhbQ0KCQkJCQkJCWlmICgkdmFsWydkYXknXSA9PSAkZmlyc3REYXkgJiYgJHZhbFsnY291cnNlJ10gPT0gJGZpcnN0Q291cnNlICYmICR2YWxbJ2RhdGUnXSkNCgkJCQkJCQl7DQoJCQkJCQkJCXNlbGY6OiRldmVudEZpcnN0RGF0ZSA9IHN0cnRvdGltZSgkdmFsWydkYXRlJ10pOw0KCQkJCQkJCX0NCgkJCQkJCQkvLyBzZXQgZWFjaCBjb3Vyc2UgZmlyc3QgZGF5DQoJCQkJCQkJaWYgKCR2YWxbJ2RheSddID09ICRmaXJzdERheSAmJiAkdmFsWydkYXRlJ10pDQoJCQkJCQkJew0KCQkJCQkJCQlzZWxmOjokY291cnNlRmlyc3REYXRlWyR2YWxbJ2NvdXJzZSddXSA9IHN0cnRvdGltZSgkdmFsWydkYXRlJ10pOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBzZXQgdGhlIGFzc2Vzc21lbnRzIGF2YWlsYWJsZQ0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZXZlbnQtPmlkUHJvZ3JhbVF1ZXN0aW9uREQpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJGV2ZW50LT5pZFByb2dyYW1RdWVzdGlvbkREIGFzICRxdWVzdGlvbikNCgkJCQkJew0KCQkJCQkJaWYgKCFpc3NldCgkYXNzZXNzbWVudHMNCgkJCQkJCQkJWydwcm9ncmFtXycuc3RyX3BhZCgkcXVlc3Rpb24tPnByb2dyYW0sIDMsICcwJyxTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkgICAgJ19fZXZlbnRfJy5zdHJfcGFkKCRldmVudC0+ZXZlbnRfaWQsIDMsICcwJyxTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkgICAgJ19fY291cnNlXycuc3RyX3BhZCgkcXVlc3Rpb24tPmNvdXJzZSwgMywgJzAnLFNUUl9QQURfTEVGVCldDQoJCQkJCQkJCVsnZGF5Xycuc3RyX3BhZCgkcXVlc3Rpb24tPmRheSwgMywgJzAnLFNUUl9QQURfTEVGVCldDQoJCQkJCQkJCVsnYXNzZXNzbWVudHR5cGVfJy5zdHJfcGFkKCRxdWVzdGlvbi0+YXNzZXNzbWVudF90eXBlX2lkLCAzLCAnMCcsU1RSX1BBRF9MRUZUKV0pKQ0KCQkJCQkJew0KCQkJCQkJCS8vIGxpbnVwIHRoZSBkYXRhDQoJCQkJCQkJJHF1ZXN0aW9uLT5ldmVudF9pZCA9ICRldmVudC0+ZXZlbnRfaWQ7DQoJCQkJCQkJJHF1ZXN0aW9uLT5ldmVudF9uYW1lID0gJGV2ZW50LT5ldmVudF9uYW1lOw0KCQkJCQkJCSRxdWVzdGlvbi0+ZXZlbnRfZ3JvdXBzID0gJGV2ZW50LT5ldmVudF9ncm91cHM7DQoJCQkJCQkJJHF1ZXN0aW9uLT5wcm9ncmFtX25hbWUgPSAkZXZlbnQtPnByb2dyYW1fbmFtZTsNCgkJCQkJCQkkcXVlc3Rpb24tPnByb2dyYW1fYWNyb255bSA9ICRldmVudC0+cHJvZ3JhbV9hY3JvbnltOw0KCQkJCQkJCSRxdWVzdGlvbi0+cHJvZ3JhbV9pY29uID0gJGV2ZW50LT5wcm9ncmFtX2ljb247DQoJCQkJCQkJJHF1ZXN0aW9uLT5wcm9ncmFtX2NyZWRpdF9zeXN0ZW0gPSAkZXZlbnQtPnByb2dyYW1fY3JlZGl0X3N5c3RlbTsNCgkJCQkJCQkkcXVlc3Rpb24tPmRheV9kYXRlID0gKGlzc2V0KHNlbGY6OiRjb3Vyc2VCdWNrZXRbJGV2ZW50LT5ldmVudF9pZF1bJHF1ZXN0aW9uLT5jb3Vyc2VdWyRxdWVzdGlvbi0+ZGF5XSkpID8gc2VsZjo6JGNvdXJzZUJ1Y2tldFskZXZlbnQtPmV2ZW50X2lkXVskcXVlc3Rpb24tPmNvdXJzZV1bJHF1ZXN0aW9uLT5kYXldIDogbnVsbDsNCgkJCQkJCQkvLyBzZXR1cCB0aGUgc3RvcmFnZSBvYmplY3QNCgkJCQkJCQkkYXNzZXNzbWVudHMNCgkJCQkJCQkJWydwcm9ncmFtXycuc3RyX3BhZCgkcXVlc3Rpb24tPnByb2dyYW0sIDMsICcwJyxTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkgICAgJ19fZXZlbnRfJy5zdHJfcGFkKCRldmVudC0+ZXZlbnRfaWQsIDMsICcwJyxTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkgICAgJ19fY291cnNlXycuc3RyX3BhZCgkcXVlc3Rpb24tPmNvdXJzZSwgMywgJzAnLFNUUl9QQURfTEVGVCldDQoJCQkJCQkJCVsnZGF5Xycuc3RyX3BhZCgkcXVlc3Rpb24tPmRheSwgMywgJzAnLFNUUl9QQURfTEVGVCldDQoJCQkJCQkJCVsnYXNzZXNzbWVudHR5cGVfJy5zdHJfcGFkKCRxdWVzdGlvbi0+YXNzZXNzbWVudF90eXBlX2lkLCAzLCAnMCcsU1RSX1BBRF9MRUZUKV0gPSAkcXVlc3Rpb247DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gJGFzc2Vzc21lbnRzOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKgljaGVjayBpZiB1c2VycyBjYW4gYWNjZXNzIGEgZ2l2ZW4gYXJlYQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FuQWNjZXNzKCRpZCwkdHlwZSA9ICdldmVudCcpDQoJew0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgJ2V2ZW50JzoNCgkJCQkvLyBjaGVjayBpZiB1c2VyIG1heSBhY2Nlc3MgZXZlbnQgZGF0YQ0KCQkJCWlmICgkaWQpDQoJCQkJew0KCQkJCQlyZXR1cm4gc2VsZjo6Y2hlY2tFdmVudEFwcGxpY2F0aW9uKCRpZCk7DQoJCQkJfQ0KDQoJCQlicmVhazsNCgkJCWNhc2UgJ2Fzc2Vzc21lbnQnOg0KCQkJCS8vIGNoZWNrIGlmIHVzZXIgbWF5IGFjY2VzcyBhc3Nlc3NtZW50IGRhdGENCg0KCQkJYnJlYWs7DQoJCQljYXNlICdtb2R1bGUnOg0KCQkJCS8vIGNoZWNrIGlmIHVzZXIgbWF5IGFjY2VzcyBhc3Nlc3NtZW50IGRhdGENCgkJCQlpZiAoJGlkKQ0KCQkJCXsNCgkJCQkJJGV2ZW50ID0gc2VsZjo6Z2V0RXZlbnRJZCgkaWQsJHR5cGUpOw0KCQkJCQlpZiAoJGV2ZW50KQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gc2VsZjo6Y2hlY2tFdmVudEFwcGxpY2F0aW9uKCRldmVudCk7DQoJCQkJCX0NCgkJCQl9DQoJCQlicmVhazsNCgkJCWNhc2UgJ3JlZ2lzdGVyJzoNCgkJCQkvLyBjaGVjayBpZiB1c2VyIGNhbiByZWdpc3Rlcg0KCQkJCWlmICgkaWQpDQoJCQkJew0KCQkJCQkkc3RhdHVzID0gc2VsZjo6Y2hlY2tFdmVudEFwcGxpY2F0aW9uKCRpZCx0cnVlKTsNCgkJCQkJc3dpdGNoICgkc3RhdHVzKQ0KCQkJCQl7DQoJCQkJCQljYXNlIDE6DQoJCQkJCQkJLy8gYWN0aXZlDQoJCQkJCQkJJHJlc3BvbnNlID0gYXJyYXkoJ2NhbicgPT4gZmFsc2UsICd3aHknID0+IFRleHQ6Ol8oJ1lvdXIgYXBwbGljYXRpb24gd2FzIGFwcHJvdmVkIGFuZCBpcyBhY3RpdmUuJykpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlIDI6DQoJCQkJCQkJLy8gcGVuZGluZw0KCQkJCQkJCSRyZXNwb25zZSA9IGFycmF5KCdjYW4nID0+IGZhbHNlLCAnd2h5JyA9PiBUZXh0OjpfKCdBcHBsaWNhdGlvbiBpcyBwZW5kaW5nIHJldmlldywgcGxlYXNlIGNvbnRhY3Qgb3VyIG9mZmljZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKSk7DQoJCQkJCQlicmVhazsNCgkJCQkJCWNhc2UgLTE6DQoJCQkJCQkJLy8gcmVqZWN0ZWQNCgkJCQkJCQkkcmVzcG9uc2UgPSBhcnJheSgnY2FuJyA9PiBmYWxzZSwgJ3doeScgPT4gVGV4dDo6XygnQXBwbGljYXRpb24gd2FzIHJlamVjdGVkLCBwbGVhc2UgY29udGFjdCBvdXIgb2ZmaWNlIGZvciBtb3JlIGluZm9ybWF0aW9uLicpKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQkJZGVmYXVsdCA6DQoJCQkJCQkJLy8gZ29vZCBoYXMgbm90IHJlZ2lzdHJhdGlvbg0KCQkJCQkJCSRyZXNwb25zZSA9IGFycmF5KCdjYW4nID0+IHRydWUpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQkJcmV0dXJuICRyZXNwb25zZTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICoJZ2V0IHRoZSBldmVudCBpZCBpbiByZWxhdGlvbiB0byB0aGUgdHlwZQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RXZlbnRJZCgkaWQsJHR5cGUpDQoJew0KCQlpZiAoJHR5cGUgPT0gJ21vZHVsZScpDQoJCXsNCgkJCS8vIGdldCBwcm9ncmFtIGlkDQoJCQkkcHJvZ3JhbSA9IHNlbGY6OmdldFZhcignbW9kdWxlJywgJGlkLCAnaWQnLCAncHJvZ3JhbScpOw0KCQkJaWYgKCRwcm9ncmFtKQ0KCQkJew0KCQkJCS8vIGdldCBldmVudCBpZA0KCQkJCXJldHVybiBzZWxmOjpnZXRWYXIoJ2V2ZW50JywgJHByb2dyYW0sICdwcm9ncmFtJywgJ2lkJyk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqCWdldCB0aGUgbm90ZSBmb3IgdGhpcyB1c2VyIGFuZCBzZXNzaW9uDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXROb3RlKCRzZXNzaW9uKQ0KCXsNCgkJJHVzZXJJZCA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdjb250ZW50JykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc3R1ZGVudF9ub3RlJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdzdHVkZW50dXNlcicpIC4gJyA9ICcuKGludCkgJHVzZXJJZCk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3Nlc3Npb24nKSAuICcgPSAnLihpbnQpICRzZXNzaW9uKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHVibGlzaGVkJykgLiAnID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJLyoqDQoJICoJZ2V0IHRoZSBhdHRlbmRhbmNlIGluIHJlbGF0aW9uIHRvIGEgc2Vzc2lvbg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QXR0ZW5kYW5jZUxpc3QoJHNlc3Npb24sJGNvdXJzZSwkcHJvZ3JhbSwkZXZlbnQpDQoJew0KCQlyZXR1cm4gZmFsc2U7IC8vIFRPRE8gSG1tbW0gbm90IHN1cmUgd2hhdCBoYXBwZW5lZCBoZXJlDQoJfQ0KDQoJLyoqDQoJICoJY2hlY2sgaWYgdXNlcidzIGFwcGxpY2F0aW9uIHRvIGV2ZW50IGlzIGFwcHJvdmVkDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja0V2ZW50QXBwbGljYXRpb24oJGV2ZW50LCRyZXR1cm5TdGF0dXMgPSBmYWxzZSkNCgl7DQoJCSR1c2VySWQgPSBGYWN0b3J5OjpnZXRVc2VyKCktPmlkOw0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnc3RhdHVzJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fYXBwbGljYXRpb24nKSk7DQoJCWlmICghJHJldHVyblN0YXR1cykNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc3RhdHVzJykgLiAnID0gJy4oaW50KSAxKTsNCgkJfQ0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdzdHVkZW50dXNlcicpIC4gJyA9ICcuKGludCkgJHVzZXJJZCk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2V2ZW50JykgLiAnID0gJy4oaW50KSAkZXZlbnQpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwdWJsaXNoZWQnKSAuICcgPSAxJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLyoqDQoJICoJc2V0IGdyb3VwcyBuYW1lcw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0R3JvdXBOYW1lcygkZ3JvdXBzKQ0KCXsNCgkJLy8gY2hhbmdlIGFycmF5IG9mIGdyb3VwIGlkcyB0byBzdHJpbmcgb2YgZ3JvdXAgbmFtZXMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRncm91cHMpKQ0KCQl7DQoJCQkkZ3JvdXBzTmFtZXMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGdyb3VwcyBhcyAkZ3JvdXApDQoJCQl7DQoJCQkJJGdyb3Vwc05hbWVzW10gPSBzZWxmOjpnZXRHcm91cE5hbWUoJGdyb3VwKTsNCgkJCX0NCgkJCXJldHVybiBpbXBsb2RlKCcsICcsJGdyb3Vwc05hbWVzKTsNCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJLyoqDQoJICoJQ2hhbmdlIHRvIG5pY2UgZmFuY3kgZGF0ZQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmFuY3lEYXRlKCRkYXRlKQ0KCXsNCgkJaWYgKCFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCRkYXRlKSkNCgkJew0KCQkJJGRhdGUgPSBzdHJ0b3RpbWUoJGRhdGUpOw0KCQl9DQoJCXJldHVybiBkYXRlKCdqUyBcb1xmIEYgWScsJGRhdGUpOw0KCX0NCg0KCS8qKg0KCSAqCUNoYW5nZSB0byBuaWNlIGZhbmN5IHRpbWUgYW5kIGRhdGUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhbmN5RGF0ZVRpbWUoJHRpbWUpDQoJew0KCQlpZiAoIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJHRpbWUpKQ0KCQl7DQoJCQkkdGltZSA9IHN0cnRvdGltZSgkdGltZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJyhHOmkpIGpTIFxvXGYgRiBZJywkdGltZSk7DQoJfQ0KDQoJLyoqDQoJICoJQ2hhbmdlIHRvIG5pY2UgaG91cjptaW51dGVzIHRpbWUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhbmN5VGltZSgkdGltZSkNCgl7DQoJCWlmICghc2VsZjo6aXNWYWxpZFRpbWVTdGFtcCgkdGltZSkpDQoJCXsNCgkJCSR0aW1lID0gc3RydG90aW1lKCR0aW1lKTsNCgkJfQ0KCQlyZXR1cm4gZGF0ZSgnRzppJywkdGltZSk7DQoJfQ0KDQoJLyoqDQoJICoJQ2hlY2sgaWYgc3RyaW5nIGlzIGEgdmFsaWQgdGltZSBzdGFtcA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNWYWxpZFRpbWVTdGFtcCgkdGltZXN0YW1wKQ0KCXsNCgkJcmV0dXJuICgoaW50KSAkdGltZXN0YW1wID09PSAkdGltZXN0YW1wKQ0KCQkmJiAoJHRpbWVzdGFtcCA8PSBQSFBfSU5UX01BWCkNCgkJJiYgKCR0aW1lc3RhbXAgPj0gflBIUF9JTlRfTUFYKTsNCgl9DQoNCgkvKioNCgkgKglQcmVwYXJlIHRoZSBxdWVzdGlvbnMNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHByZXBRdWVzdGlvbnMoJiRkYXRhLCRxdWVzdGlvbnNLZXkpDQoJewkNCgkJLy8gYnVpbGQgcXVlc3Rpb24gdHlwZXMgYXJyYXkNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRhLT4kcXVlc3Rpb25zS2V5KSkNCgkJew0KCQkJLy8gdG8gaWRlbnRpZnkgdGhlIHR5cGVzDQoJCQkkdHlwZU5hbWUgPSBhcnJheSgNCgkJCQkxID0+IFRleHQ6Ol8oJ1llcyBObycpLA0KCQkJCTIgPT4gVGV4dDo6XygnU2VsZWN0aW9uJyksDQoJCQkJMyA9PiBUZXh0OjpfKCdNdWx0aSBTZWxlY3Rpb24nKSwNCgkJCQk0ID0+IFRleHQ6Ol8oJ1RleHQnKSwNCgkJCQk1ID0+IFRleHQ6Ol8oJ1RleHQgUGx1cycpKTsNCgkJCS8vIHNldCBzb21lIGRlZmF1bHRzDQoJCQkkcG9pbnRzCQk9IGFycmF5KCk7DQoJCQkkdG90YWwJCT0gMDsNCgkJCSRzdWJ0b3RhbAkJPSBhcnJheSgxPT4wLDI9PjAsMz0+MCw0PT4wLDU9PjApOw0KCQkJJGxvYWRlZAkJPSBhcnJheSgxPT4wLDI9PjAsMz0+MCw0PT4wLDU9PjApOw0KCQkJJGtlZXBlcgkJPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGRhdGEtPiRxdWVzdGlvbnNLZXkgYXMgJG5yID0+ICRvYmplY3QpDQoJCQl7DQoJCQkJJGZvdW5kID0gc2VsZjo6Z2V0QXZhaWxhYmxlUG9pbnQoJG9iamVjdCwgdHJ1ZSk7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRmb3VuZCkgJiYgaXNzZXQoJGZvdW5kWyd0eXBlJ10pICYmIGlzc2V0KCRmb3VuZFsncG9pbnQnXSkgJiYgJGZvdW5kWydwb2ludCddID4gMCkNCgkJCQl7DQoJCQkJCS8vIGJ1aWxkIHBvaW50cw0KCQkJCQkkdHlwZSA9ICRmb3VuZFsndHlwZSddOw0KCQkJCQkkcG9pbnRzWyR0eXBlXVskbnJdCT0gKGludCkgJGZvdW5kWydwb2ludCddOw0KCQkJCQkvLyBidWlsZCBzdWIgdG90YWwgdG8gc2VlIGlmIHdlIGhhdmUgZW5vdWdoIHBvaW50cyBmb3IgdGhlIHF1ZXN0aW9uIG1hcCByZWxhdGlvbiANCgkJCQkJJHN1YnRvdGFsWyR0eXBlXQkJPSBiY2FkZCgkc3VidG90YWxbJHR5cGVdLCAkcG9pbnRzWyR0eXBlXVskbnJdKTsNCgkJCQkJLy8gc2V0IHRoZSB0b3RhbCB0byBpbnN1cmUgd2UgaGF2ZSBlbm91Z2ggcXVlc3Rpb25zDQoJCQkJCSR0b3RhbAkJCT0gYmNhZGQoJHRvdGFsLCAkcG9pbnRzWyR0eXBlXVskbnJdKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB3ZSBoYXZlIGVub3VnaCBwb2ludHMNCgkJCWlmICgkdG90YWwgPCAkZGF0YS0+YXNzZXNzbWVudF90eXBlX3RvdGFsX3BvaW50cykNCgkJCXsNCgkJCQkvLyBzZXQgZXJyb3INCgkJCQlKRXJyb3I6OnJhaXNlV2FybmluZyg1MDAsIFRleHQ6Ol8oJ1RoZXJlIGlzIG5vdCBlbm91Z2ggcXVlc3Rpb24gKHBvaW50cykgaW4gdGhlIHN5c3RlbSwgcGxlYXNlIG5vdGlmeSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IuJykpOw0KCQkJCSRyZXR1cm4gPSBmYWxzZTsNCgkJCX0NCgkJCS8vIHNldCBuZWVkZWQgcG9pbnQgbWFwDQoJCQkkZHluYW1pY1NlbGVjdCA9IGpzb25fZGVjb2RlKCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfcXVlc3Rpb25fbWFwLCB0cnVlKTsNCgkJCSRjaGVja1BlcmNlbnQgPSAwOw0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkeW5hbWljU2VsZWN0KSkNCgkJCXsNCgkJCQkkbWFwVHlwZSA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGR5bmFtaWNTZWxlY3QgYXMgJGxhYmVsID0+ICR2YWx1cykNCgkJCQl7DQoJCQkJCWZvcmVhY2goJHZhbHVzIGFzICRnID0+ICR2YWx1KQ0KCQkJCQl7DQoJCQkJCQkkbWFwVHlwZVskZ11bJGxhYmVsXSA9ICR2YWx1Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGZpbmFsIHJ1biBvbiBtYXANCgkJCQlmb3JlYWNoICgkbWFwVHlwZSBhcyAkdmEpDQoJCQkJew0KCQkJCQkkbWFwWyR2YVsnYW5zd2VyX3R5cGUnXV0gPSAkdmFbJ3BlcmNlbnQnXTsNCgkJCQkJJGNoZWNrUGVyY2VudCA9IGJjYWRkKCRjaGVja1BlcmNlbnQsICR2YVsncGVyY2VudCddKTsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoJGNoZWNrUGVyY2VudCAhPSAxMDApDQoJCQl7DQoJCQkJLy8gc2V0IGVycm9yDQoJCQkJSkVycm9yOjpyYWlzZVdhcm5pbmcoNTAwLCBUZXh0OjpfKCdUaGUgcXVlc3Rpb24gcGVyY2VudCBicmVha2Rvd24gaXMgbm90IHNldHVwIGNvcnJlY3RseSwgcGxlYXNlIG5vdGlmeSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IuJykpOw0KCQkJCSRyZXR1cm4gPSBmYWxzZTsNCgkJCX0NCgkJCS8vIG5vdyB3b3JrIG91dCBob3cgbXVjaCBwb2ludHMgc2hvdWxkIGJlIGxvYWRlZCBmcm9tIGVhY2ggdHlwZQ0KCQkJJGdldCA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkbWFwIGFzICR0eXBlS2V5ID0+ICRwZXJjZW50KQ0KCQkJew0KCQkJCSRnZXRbJHR5cGVLZXldID0gYmNtdWwoYmNkaXYoJHBlcmNlbnQsICcxMDAnLCA1KSwgJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV90b3RhbF9wb2ludHMpOw0KCQkJCS8vIGNoZWNrIGlmIHRoZSB0eXBlIGhhcyBlbm91Z2ggcG9pbnRzDQoJCQkJaWYgKCRnZXRbJHR5cGVLZXldID4gJHN1YnRvdGFsWyR0eXBlS2V5XSkNCgkJCQl7DQoJCQkJCWlmICgkZ2V0WyR0eXBlS2V5XSAhPSAwICYmICRzdWJ0b3RhbFskdHlwZUtleV0gIT0gMCkNCgkJCQkJew0KCQkJCQkJLy8gZ2V0IHBlcnNlbnQgbWlzIG1hdGNoDQoJCQkJCQkkcGlsbyA9IGJjZGl2KCRnZXRbJHR5cGVLZXldLCBiY211bCgkc3VidG90YWxbJHR5cGVLZXldLCAxMCkpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJHBpbG8gPSAxOw0KCQkJCQl9DQoJCQkJCS8vIGFsbG93IGZvciBhc3Nlc3NtZW50X3R5cGVfbWlzbWF0Y2hfYnVmZmVyICUgcGxheSBpbiB0aGUgbWlzbWF0Y2gNCgkJCQkJaWYgKCRwaWxvID4gJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV9taXNtYXRjaF9idWZmZXIpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBlcnJvcg0KCQkJCQkJSkVycm9yOjpyYWlzZVdhcm5pbmcoNTAwLCBUZXh0OjpzcHJpbnRmKCdUaGVyZSBpcyBub3QgZW5vdWdoIHBvaW50cyBpbiAlcyBxdWVzdGlvbiB0eXBlLCBwbGVhc2Ugbm90aWZ5IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLCR0eXBlTmFtZVskdHlwZUtleV0pKTsNCgkJCQkJCSRyZXR1cm4gPSBmYWxzZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIGlmIHRoZSBicmFrZSBkb3duIGRvZXMgbm90IG1hdGNoIHVwLCBmaXggaXQNCgkJCSRnZXRUb3RhbCA9IGFycmF5X3N1bSgkZ2V0KTsNCgkJCWlmICgkZ2V0VG90YWwgIT0gJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV90b3RhbF9wb2ludHMpDQoJCQl7DQoJCQkJJHJlbW92ZSA9IDA7DQoJCQkJJGFkZCA9IDA7DQoJCQkJaWYgKCRnZXRUb3RhbCA+ICRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfdG90YWxfcG9pbnRzKQ0KCQkJCXsNCgkJCQkJJHJlbW92ZQk9IGJjc3ViKCRnZXRUb3RhbCwgJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV90b3RhbF9wb2ludHMpOw0KCQkJCQkvLyByZW1vdmUgZnJvbSB0aGUgZ2V0DQoJCQkJCWZvciAoJGkgPSAxOyAkaSA8PSAkcmVtb3ZlOyApIA0KCQkJCQl7DQoJCQkJCQkkdGZyb20gPSBhcnJheV9yYW5kKCRnZXQpOw0KCQkJCQkJaWYgKCRnZXRbJHRmcm9tXSA+IDIpDQoJCQkJCQl7DQoJCQkJCQkJJGdldFskdGZyb21dLS07DQoJCQkJCQkJJGkrKzsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKCRnZXRUb3RhbCA8ICRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfdG90YWxfcG9pbnRzKQ0KCQkJCXsNCgkJCQkJJGFkZAk9IGJjc3ViKCRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfdG90YWxfcG9pbnRzLCAkZ2V0VG90YWwpOw0KCQkJCQkvLyBhZGQgdG8gdGhlIGdldA0KCQkJCQlmb3IgKCRpID0gMTsgJGkgPD0gJGFkZDsgKSANCgkJCQkJew0KCQkJCQkJJHRmcm9tID0gYXJyYXlfcmFuZCgkZ2V0KTsNCgkJCQkJCWlmICgkZ2V0WyR0ZnJvbV0gPiAyKQ0KCQkJCQkJew0KCQkJCQkJCSRnZXRbJHRmcm9tXSsrOw0KCQkJCQkJCSRpKys7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkkbWF0Y2ggPSBzZWxmOjpxdWVzdGlvblNvcnRTZWxlY3Rpb24oJHBvaW50cywkZGF0YS0+YXNzZXNzbWVudF90eXBlX3RvdGFsX3BvaW50cywkc3VidG90YWwsJGdldCwkbG9hZGVkLCRrZWVwZXIpOw0KCQkJLy8gaWYgd2Ugc3RpbGwgZGlkIG5vdCBtYWtlIGl0IHNldCBlcnJvcg0KCQkJaWYgKCEkbWF0Y2gpDQoJCQl7DQoJCQkJLy8gc2V0IGVycm9yDQoJCQkJSkVycm9yOjpyYWlzZVdhcm5pbmcoNTAwLCBUZXh0OjpfKCdUaGVyZSBpcyBub3QgZW5vdWdoIHBvaW50cyBpbiBzeXN0ZW0gdG8gcmVhY2ggc2V0IHRvdGFsLCBwbGVhc2Ugbm90aWZ5IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nKSk7DQoJCQkJJHJldHVybiA9IGZhbHNlOw0KCQkJfQ0KCQkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgbm8gZXJyb3JzDQoJCQlpZiAoKCFpc3NldCgkcmV0dXJuKSB8fCAkcmV0dXJuKSAmJiBzZWxmOjpzaHVmZmxlQXJyYXkoJG1hdGNoKSkNCgkJCXsNCgkJCQkkYnVrZXQgPSBhcnJheSgpOw0KCQkJCS8vIHNldCB0aGUgcXVlc3Rpb25zIHRoYXQgc2hvdWxkIGJlIHVzZWQNCgkJCQlmb3JlYWNoICgkbWF0Y2ggYXMgJGlkID0+ICRwb2ludCkNCgkJCQl7DQoJCQkJCS8vIGZpcnN0IGxvYWQgdGhlIHBvaW50DQoJCQkJCSRkYXRhLT57JHF1ZXN0aW9uc0tleX1bJGlkXS0+cG9pbnQgPSAkcG9pbnQ7DQoJCQkJCS8vIHNldCB0aGUgdGV4dCBhcmVhIG1vZGUgYmFzZWQgb24gYXNzZXNzbWVudCB0eXBlIHN3aXRjaA0KCQkJCQlpZiAoJGRhdGEtPnskcXVlc3Rpb25zS2V5fVskaWRdLT5hbnN3ZXJfdHlwZSA9PSAzICYmICRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfdGV4dF9pbnB1dF9tb2RlID09IDEpDQoJCQkJCXsNCgkJCQkJCSRkYXRhLT57JHF1ZXN0aW9uc0tleX1bJGlkXS0+YW5zd2VyX3R5cGUgPSA0Ow0KCQkJCQl9DQoJCQkJCSRidWtldFtdID0gJGRhdGEtPnskcXVlc3Rpb25zS2V5fVskaWRdOw0KCQkJCX0NCgkJCQkvLyBzZXQgYnkgZGVmYXVsdCBvcmRlciBpZiBuZWVkZWQNCgkJCQlpZiAoIXNlbGY6OiRmaWVsZFNodWZmbGUpDQoJCQkJew0KCQkJCQl1c29ydCgkYnVrZXQsIGZ1bmN0aW9uKCRhLCAkYikgew0KCQkJCQkJcmV0dXJuICRhLT5vcmRlcmluZyAtICRiLT5vcmRlcmluZzsNCgkJCQkJfSk7DQoJCQkJfQ0KCQkJCS8vIHVwZGF0ZSBvbGQgc2V0DQoJCQkJJGRhdGEtPiRxdWVzdGlvbnNLZXkgPSAkYnVrZXQ7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJLy8gc2V0IGVycm9yDQoJCUpFcnJvcjo6cmFpc2VXYXJuaW5nKDUwMCwgVGV4dDo6XygnTm8gcXVlc3Rpb25zIHdlcmUgc2V0IGZvciB0aGlzIGFzc2Vzc21lbnQsIHBsZWFzZSBub3RpZnkgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yLicpKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCgkvKioNCgkqIAlUaGUgcmV0cnkgY291bnRlcg0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHJldHJ5ID0gMDsNCg0KCS8qKg0KCSAqCVNvcnQgdGhlIHNlbGVjdGlvbiBvZiBxdWVzdGlvbnMNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHF1ZXN0aW9uU29ydFNlbGVjdGlvbigkcG9pbnRzLCR0YXJnZXRUb3RhbCwkc3VidG90YWwsJGdldCwkbG9hZGVkLCRrZWVwZXIpDQoJew0KCQkkcmVfdHJ5ID0gJHBvaW50czsNCgkJJGdldFNvcnQgPSBmYWxzZTsNCgkJLy8gdXNlIHF1ZXN0aW9uIGdldCBtYXAgYW5kIHBvaW50IHRvIHNvcnQNCgkJZm9yZWFjaCAoJHBvaW50cyBhcyAkdHlwZSA9PiAkcG9pbnRfcykNCgkJew0KCQkJaWYgKGlzc2V0KCRnZXRbJHR5cGVdKSAmJiBpc3NldCgkc3VidG90YWxbJHR5cGVdKSAmJiBzZWxmOjpzaHVmZmxlQXJyYXkoJHBvaW50X3MpKQ0KCQkJew0KCQkJCWlmICgkZ2V0WyR0eXBlXSAhPSAkc3VidG90YWxbJHR5cGVdKQ0KCQkJCXsNCgkJCQkJLy8gYWRkIHVudGlsbCB3ZSByZWFjaCBvdXIgc3VtDQoJCQkJCWZvcmVhY2ggKCRwb2ludF9zIGFzICRpID0+ICRwb2luKQ0KCQkJCQl7DQoJCQkJCQkkY2hlY2tWYWx1ZSA9IGJjYWRkKCRsb2FkZWRbJHR5cGVdLCAkcG9pbik7DQoJCQkJCQlpZiAoJGNoZWNrVmFsdWUgPD0gJGdldFskdHlwZV0pDQoJCQkJCQl7DQoJCQkJCQkJJGtlZXBlclskaV0gPSAkcG9pbjsNCgkJCQkJCQkkbG9hZGVkWyR0eXBlXSA9IGJjYWRkKCRsb2FkZWRbJHR5cGVdLCAkcG9pbik7DQoJCQkJCQkJLy8gcmVtb3ZlIGZyb20gcG9pbnRzDQoJCQkJCQkJdW5zZXQoJHBvaW50c1skdHlwZV1bJGldKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKCRnZXRbJHR5cGVdID09ICRzdWJ0b3RhbFskdHlwZV0pDQoJCQkJew0KCQkJCQkvLyBqdXN0IGFkZCBhbGwgdW5sZXNzIHdlIGFyZSBmdWxsDQoJCQkJCSRub3dUb3RhbCA9IGFycmF5X3N1bSgka2VlcGVyKTsNCgkJCQkJZm9yZWFjaCAoJHBvaW50X3MgYXMgJGlkID0+ICRwb2ludCkNCgkJCQkJew0KCQkJCQkJJGNoZWNrVG90YWwgPSBiY2FkZCgkbm93VG90YWwsICRwb2ludCk7DQoJCQkJCQlpZiAoJGNoZWNrVG90YWwgPD0gJHRhcmdldFRvdGFsKQ0KCQkJCQkJew0KCQkJCQkJCSRrZWVwZXJbJGlkXSA9ICRwb2ludDsNCgkJCQkJCQkkbG9hZGVkWyR0eXBlXSA9IGJjYWRkKCRsb2FkZWRbJHR5cGVdLCAkcG9pbnQpOw0KCQkJCQkJCS8vIHJlbW92ZSBmcm9tIHBvaW50cw0KCQkJCQkJCXVuc2V0KCRwb2ludHNbJHR5cGVdWyRpZF0pOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgd2UgcmVhY2hlZCBvdXIgbnVtYmVyDQoJCQlpZiAoaXNzZXQoJGdldFskdHlwZV0pICYmIGlzc2V0KCRzdWJ0b3RhbFskdHlwZV0pICYmICRsb2FkZWRbJHR5cGVdICE9ICRnZXRbJHR5cGVdKQ0KCQkJew0KCQkJCSRnZXRTb3J0ID0gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQkvLyBkbyB3ZSBzdGlsbCBzaG9ydD8NCgkJaWYgKCRnZXRTb3J0ICYmIHNlbGY6OnNodWZmbGVBcnJheSgkcG9pbnRzKSkNCgkJew0KCQkJLy8gdHJ5IHRvIGxvYWQgbW9yZQ0KCQkJZm9yZWFjaCAoJHBvaW50cyBhcyAkdHlwZSA9PiAkcG9pbnRfcikNCgkJCXsNCgkJCQlpZiAoaXNzZXQoJGdldFskdHlwZV0pICYmIGlzc2V0KCRzdWJ0b3RhbFskdHlwZV0pICYmIHNlbGY6OnNodWZmbGVBcnJheSgkcG9pbnRfcikpDQoJCQkJew0KCQkJCQlpZiAoYXJyYXlfc3VtKCRrZWVwZXIpICE9ICR0YXJnZXRUb3RhbCkNCgkJCQkJew0KCQkJCQkJLy8gYWRkIHVudGlsbCB3ZSByZWFjaCBvdXIgc3VtDQoJCQkJCQlmb3JlYWNoICgkcG9pbnRfciBhcyAkaW4gPT4gJHBvaW5kKQ0KCQkJCQkJew0KCQkJCQkJCSRjaGVja1RvdGFsID0gYmNhZGQoYXJyYXlfc3VtKCRrZWVwZXIpLCAkcG9pbmQpOw0KCQkJCQkJCWlmICgkY2hlY2tUb3RhbCA8PSAkdGFyZ2V0VG90YWwpDQoJCQkJCQkJew0KCQkJCQkJCQkka2VlcGVyWyRpbl0gPSAkcG9pbmQ7DQoJCQkJCQkJCSRsb2FkZWRbJHR5cGVdID0gYmNhZGQoJGxvYWRlZFskdHlwZV0sICRwb2luZCk7DQoJCQkJCQkJCS8vIHJlbW92ZSBmcm9tIHBvaW50cw0KCQkJCQkJCQl1bnNldCgkcG9pbnRzWyR0eXBlXVskaW5dKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJaWYgKGFycmF5X3N1bSgka2VlcGVyKSA9PSAkdGFyZ2V0VG90YWwpDQoJCXsNCgkJCS8vIHJldHVybiB0aGUgaWRzIHRvIGtlZXANCgkJCXJldHVybiAka2VlcGVyOw0KCQl9DQoJCS8vIHdlIHJldHJ5IGEgZmV3IHRpbWVzDQoJCWlmIChzZWxmOjokcmV0cnkgPCA0MCkNCgkJew0KCQkJLy8gcmVzZXQgZmV3IGRlZmF1bHRzDQoJCQkkbG9hZGVkID0gYXJyYXkoMT0+MCwyPT4wLDM9PjAsND0+MCw1PT4wKTsNCgkJCSRrZWVwZXIgPSBhcnJheSgpOw0KCQkJLy8gaW5jcmVtZW50IGNvdW50ZXINCgkJCXNlbGY6OiRyZXRyeSsrOw0KCQkJLy8gbGV0cyB0cnkgYWdhaW4gPj4NCgkJCXJldHVybiBzZWxmOjpxdWVzdGlvblNvcnRTZWxlY3Rpb24oJHJlX3RyeSwkdGFyZ2V0VG90YWwsJHN1YnRvdGFsLCRnZXQsJGxvYWRlZCwka2VlcGVyKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICoJU2h1ZmZsZSBhcnJheSBidXQga2VlcCBrZXlzDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzaHVmZmxlQXJyYXkoJiRhcnJheSkgDQoJew0KCQlpZiAoaXNzZXQoJGFycmF5KSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYXJyYXkpKQ0KCQl7DQoJCQlpZiAoc2VsZjo6JGZpZWxkU2h1ZmZsZSkNCgkJCXsNCgkJCQkvLyBmaXJzdCBzZXQgdGhlIGtleXMNCgkJCQkka2V5cyA9IGFycmF5X2tleXMoJGFycmF5KTsNCgkJCQkvLyB0aGVuIHNodWZmbGUgdGhlbQ0KCQkJCXNodWZmbGUoJGtleXMpOw0KCQkJCS8vIGxvYWQgYmFzZWQgb24gdGhlIHJlc3VsdA0KCQkJCWZvcmVhY2goJGtleXMgYXMgJGtleSkNCgkJCQl7DQoJCQkJICAgICRuZXdbJGtleV0gPSAkYXJyYXlbJGtleV07DQoJCQkJfQ0KCQkJCS8vIGxvYWQgdGhlIG5ldyBvcmRlcg0KCQkJCSRhcnJheSA9ICRuZXc7DQoJCQkJLy8gZG9uZQ0KCQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCQkNCgl9DQoJDQoJLyoqDQoJICoJR2V0IHRoZSBxdWVzdGlvbnMgbWF4IGF2YWlsYWJsZSBwb2ludA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlUG9pbnQoJiRxdWVzdGlvbiwgJHJldHVyblR5cGUgPSBmYWxzZSkNCgl7DQoJCSRwb2ludCA9IDA7DQoJCWlmICgkdHlwZSA9IHNlbGY6OmdldFF1ZXN0aW9uVHlwZSgkcXVlc3Rpb24pKQ0KCQl7DQoJCQkkcG9pbnQgPSBzZWxmOjphdmFpbGFibGVQb2ludCgkcXVlc3Rpb24sICR0eXBlKTsNCgkJCWlmICgkcmV0dXJuVHlwZSkNCgkJCXsNCgkJCQlyZXR1cm4gYXJyYXkoJ3R5cGUnID0+ICR0eXBlLCAncG9pbnQnID0+ICRwb2ludCk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRwb2ludDsNCgl9DQoNCgkvKioNCgkqIAl0byBpZGVudGlmeSB0aGUgcXVlc3Rpb24gdHlwZXMNCgkqKi8NCglwdWJsaWMgc3RhdGljICRxdWVzdGlvblR5cGVzID0gYXJyYXkoDQoJCTEgPT4gYXJyYXkoJ2Fuc3dlcl90eXBlJyA9PiAxKSwJCQkJCQkvLyBZZXMgTm8NCgkJMiA9PiBhcnJheSgnYW5zd2VyX3R5cGUnID0+IDIsICdzZWxlY3Rpb250eXBlJyA9PiAxKSwJCS8vIFNlbGVjdGlvbg0KCQkzID0+IGFycmF5KCdhbnN3ZXJfdHlwZScgPT4gMiwgJ3NlbGVjdGlvbnR5cGUnID0+IDIpLAkJLy8gTXVsdGkgU2VsZWN0aW9uDQoJCTQgPT4gYXJyYXkoJ2Fuc3dlcl90eXBlJyA9PiAzLCAndGV4dF9tYXJrX3R5cGUnID0+IDEpLAkJLy8gVGV4dA0KCQk1ID0+IGFycmF5KCdhbnN3ZXJfdHlwZScgPT4gMywgJ3RleHRfbWFya190eXBlJyA9PiAyKSk7CQkvLyBUZXh0IFBsdXMNCgkvKioNCgkgKglHZXQgdGhlIHF1ZXN0aW9ucyB0eXBlDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRRdWVzdGlvblR5cGUoJiRxdWVzdGlvbikNCgl7CQkJCQ0KCQlmb3JlYWNoIChzZWxmOjokcXVlc3Rpb25UeXBlcyBhcyAkdHlwZSA9PiAkc2VhcmNoKQ0KCQl7DQoJCQkkZm91bmQgPSAwOw0KCQkJJGxvb2sgPSBjb3VudCgkc2VhcmNoKTsNCgkJCWZvcmVhY2ggKCRzZWFyY2ggYXMgJGtleSA9PiAkdmFsKQ0KCQkJew0KCQkJCWlmICgoaW50KSAkcXVlc3Rpb24tPiRrZXkgPT0gKGludCkgJHZhbCkNCgkJCQl7DQoJCQkJCSRmb3VuZCsrOw0KCQkJCX0NCgkJCX0NCgkJCWlmICgkbG9vayA9PSAkZm91bmQpDQoJCQl7DQoJCQkJLy8gcmV0dXJuIHRoZSBmb3VuZCB0eXBlDQoJCQkJcmV0dXJuICR0eXBlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLyoqDQoJICoJR2V0IHRoZSBxdWVzdGlvbnMgbWF4IGF2YWlsYWJsZSBwb2ludA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYXZhaWxhYmxlUG9pbnQoJHF1ZXN0aW9uLCAkdHlwZSkNCgl7DQoJCSRwb2ludCA9IHNlbGY6OmdldFBvaW50KCRxdWVzdGlvbi0+aWQpOw0KCQlpZiAoJHBvaW50ID09IDApDQoJCXsNCgkJCXN3aXRjaCAoJHR5cGUpDQoJCQl7DQoJCQkJY2FzZSAxOg0KCQkJCQkvLyByYWRpbw0KCQkJCQkkcG9pbnQgPSAkcXVlc3Rpb24tPnllc25vX3BvaW50Ow0KCQkJCQlicmVhazsNCgkJCQljYXNlIDI6DQoJCQkJCS8vIGxpc3QNCgkJCQkJJHBvaW50ID0gJHF1ZXN0aW9uLT5saXN0X3BvaW50Ow0KCQkJCQlicmVhazsNCgkJCQljYXNlIDM6DQoJCQkJCS8vIG11bHRpIGxpc3QNCgkJCQkJJHBvaW50ID0gc2VsZjo6Z2V0QXZhaWxhYmxlTGlzdFBvaW50KCRxdWVzdGlvbik7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgNDoNCgkJCQkJLy8gdGV4dA0KCQkJCQkkcG9pbnQgPSAkcXVlc3Rpb24tPmNvbXBsZXRpb25fcG9pbnQ7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgNToNCgkJCQkJLy8gdGV4dCBwbHVzDQoJCQkJCSRwb2ludCA9IHNlbGY6OmdldEF2YWlsYWJsZVRleHRQbHVzUG9pbnQoJHF1ZXN0aW9uKTsNCgkJCQkJYnJlYWs7DQoJCQl9CQ0KCQkJcmV0dXJuIHNlbGY6OnNldFBvaW50KCRxdWVzdGlvbi0+aWQsICRwb2ludCk7DQoJCX0NCgkJcmV0dXJuICRwb2ludDsNCgl9DQoNCgkvKioNCgkqIAl0aGUgaGVscGVyIHNlc3Npb24NCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRzZXNzaW9uOw0KCQkNCgkvKioNCgkgKglTdG9yZSB0aGUgcG9pbnQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFBvaW50KCRpZCwgJHBvaW50KQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokc2Vzc2lvbikpDQoJCXsNCgkJCXNlbGY6OiRzZXNzaW9uID0gRmFjdG9yeTo6Z2V0U2Vzc2lvbigpOw0KCQl9DQoJCXNlbGY6OiRzZXNzaW9uLT5zZXQoJ3F1ZXN0aW9uUG9pbnQnLiRpZCwgJHBvaW50KTsNCgkJcmV0dXJuICRwb2ludDsNCgl9DQoJCQ0KCS8qKg0KCSAqCUdldCB0aGUgc3RvcmVkIHRoZSBwb2ludA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0UG9pbnQoJGlkKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokc2Vzc2lvbikpDQoJCXsNCgkJCXNlbGY6OiRzZXNzaW9uID0gRmFjdG9yeTo6Z2V0U2Vzc2lvbigpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokc2Vzc2lvbi0+Z2V0KCdxdWVzdGlvblBvaW50Jy4kaWQsIDApOw0KCX0NCgkJDQoJLyoqDQoJICoJR2V0IHRoZSBxdWVzdGlvbnMgbWF4IHBvaW50IChmb3IgYSBsaXN0KQ0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlTGlzdFBvaW50KCRxdWVzdGlvbikNCgl7DQoJCSR2YWx1ZSA9IDA7DQoJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcXVlc3Rpb24tPnNlbGVjdGlvbikpDQoJCXsNCgkJCSRvcHRpb25zID0ganNvbl9kZWNvZGUoJHF1ZXN0aW9uLT5zZWxlY3Rpb24sIHRydWUpOw0KCQkJaWYgKGlzc2V0KCRvcHRpb25zWyd0eXBlJ10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRvcHRpb25zWyd0eXBlJ10pKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRvcHRpb25zWyd0eXBlJ10gYXMgJGNvcnJlY3QpDQoJCQkJew0KCQkJCQlpZiAoJGNvcnJlY3QgPT0gMSkNCgkJCQkJew0KCQkJCQkJJHZhbHVlKys7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJZWxzZWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcXVlc3Rpb24tPnNlbGVjdGlvbikpDQoJCXsNCgkJCSR2YWx1ZSA9IGNvdW50KCRxdWVzdGlvbi0+c2VsZWN0aW9uKTsNCgkJfQ0KCQlyZXR1cm4gYmNtdWwoJHF1ZXN0aW9uLT5saXN0X3BvaW50LCAkdmFsdWUpOw0KCX0NCgkJDQoJLyoqDQoJICoJR2V0IHRoZSBxdWVzdGlvbnMgbWF4IHBvaW50IChmb3IgYSB0ZXh0IHBsdXMpDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRBdmFpbGFibGVUZXh0UGx1c1BvaW50KCRxdWVzdGlvbikNCgl7DQoJCSR2YWx1ZSA9IDE7DQoJCS8vIGNoZWNrIGlmIGl0IGlzIGFscmVhZHkgYW4gYXJyYXkgb2YgdmFsdWVzDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcXVlc3Rpb24tPmtleV93b3JkcykpDQoJCXsNCgkJCSR2YWx1ZSA9IGNvdW50KCRxdWVzdGlvbi0+a2V5X3dvcmRzKTsNCgkJfQ0KCQllbHNlaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRxdWVzdGlvbi0+a2V5X3dvcmRzKSkNCgkJew0KCQkJaWYgKHN0cnBvcygkcXVlc3Rpb24tPmtleV93b3JkcywgJzsnKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJJGtleXdvcmQgPSBleHBsb2RlKCc7JywgJHF1ZXN0aW9uLT5rZXlfd29yZHMpOw0KCQkJCSR2YWx1ZSA9IGNvdW50KCRrZXl3b3JkKTsNCgkJCX0NCgkJCWVsc2VpZiAoc3RycG9zKCRxdWVzdGlvbi0+a2V5X3dvcmRzLCAnLCcpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkka2V5d29yZCA9IGV4cGxvZGUoJywnLCAkcXVlc3Rpb24tPmtleV93b3Jkcyk7DQoJCQkJJHZhbHVlID0gY291bnQoJGtleXdvcmQpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBiY211bChiY2FkZCgkcXVlc3Rpb24tPndvcmRfY291bnRfcG9pbnQsICRxdWVzdGlvbi0+a2V5X3dvcmRzX3BvaW50KSwgJHZhbHVlKTsNCgl9DQoJDQoJLyoqDQoJKiAJVGhlIHNodWZmbGUgc3dpdGNoDQoJKiovDQoJcHVibGljIHN0YXRpYyAkZmllbGRTaHVmZmxlID0gZmFsc2U7DQoJDQoJLyoqDQoJICoJVGhlIG1haW4gY2FsbCBmdW5jdGlvbiB0byBsb2FkIGEgZm9ybQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGhlRm9ybSgkZGF0YSwkZmllbGRzS2V5LCRzZXR0aW5ncywgJHR5cGUpDQoJew0KCQkvLyBzaG91bGQgaXQgYmUgc2V0IHBlciB1c2VyDQoJCSRjb250cm9sZUtleSA9ICcnOw0KCQlpZiAoNCAhPSAkZGF0YS0+YXNzZXNzbWVudF90eXBlX2J1aWxkX21ldGhvZCkNCgkJew0KCQkJLy8gZ2V0IHRoZSB1c2VybmFtZQ0KCQkJJGNvbnRyb2xlS2V5ID0gRmFjdG9yeTo6Z2V0VXNlcigpLT51c2VybmFtZTsNCgkJCWlmICgyID09ICRkYXRhLT5hc3Nlc3NtZW50X3R5cGVfYnVpbGRfbWV0aG9kKQ0KCQkJew0KCQkJCSRjb250cm9sZUtleSA9ICRjb250cm9sZUtleS5Kb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCk7DQoJCQl9DQoJCX0NCgkJLy8gc2V0IGZpbGUgbmFtZQ0KCQkkZmlsZU5hbWUgPSBtZDUoc2VyaWFsaXplKCRkYXRhKS4kY29udHJvbGVLZXkpOw0KCQkvLyBzZXQgcGFyYW1zDQoJCWlmIChlbXB0eShzZWxmOjokcGFyYW1zKSkNCgkJew0KCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJfQ0KCQkvLyBzZXQgc29tZSBkZWZhdWx0cw0KCQkkcGF0aAk9IHNlbGY6OiRwYXJhbXMtPmdldCgneG1scGF0aCcsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL21vZGVscy9mb3JtcycpOw0KCQkvLyBidWlsZCBmdWxsIHBhdGggdG8gZmlsZQ0KCQkkZnVsbFBhdGggPSAkcGF0aC4nLycuJGZpbGVOYW1lLicueG1sJzsNCgkJLy8gYWRkIHRoaXMgZmlsZSBuYW1lIHRvIHRoZSBzZXNzaW9uDQoJCSRzZXNzaW9uID0gRmFjdG9yeTo6Z2V0U2Vzc2lvbigpOw0KCQkkc2Vzc2lvbi0+c2V0KCR0eXBlLidfJy4kZGF0YS0+aWQsICRmaWxlTmFtZSApOw0KCQkvLyBjaGVjayBpZiBmaWxlIGV4aXN0cw0KCQlpZiAoJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV9idWlsZF9tZXRob2QgIT0gMSAmJiBmaWxlX2V4aXN0cygkZnVsbFBhdGgpKQ0KCQl7DQoJCQkvLyBncmVhdCB3ZSBhcmUgZG9uZSByZXR1cm4gcmVzdWx0cw0KCQkJJGRvbmUgPSB0cnVlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gY2hlY2sgdGhlIG9yZGVyaW5nIG9wdGlvbg0KCQkJaWYgKDIgPT0gJGRhdGEtPmFzc2Vzc21lbnRfdHlwZV9vcmRlcmluZ19vcHRpb24pDQoJCQl7DQoJCQkJc2VsZjo6JGZpZWxkU2h1ZmZsZSA9IHRydWU7DQoJCQl9DQoJCQkvLyBpZiB0aGlzIGlzIGFuIGFzc2Vzc21lbnQgZm9ybSBmaXJzdCBwcmVwYXJlIGZpZWxkcy9xdWVzdGlvbnMNCgkJCWlmICgnYXNzZXNzbWVudCcgPT0gJHR5cGUpDQoJCQl7DQoJCQkJaWYgKCFzZWxmOjpwcmVwUXVlc3Rpb25zKCRkYXRhLCRmaWVsZHNLZXkpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCX0NCgkJCX0NCgkJCS8vIHByZXBhcmUgdGhlIGZpZWxkcw0KCQkJaWYgKCFzZWxmOjpwcmVwRmllbGRzKCRkYXRhLT4kZmllbGRzS2V5LCRzZXR0aW5ncywkdHlwZSkpDQoJCQl7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQkJLy8gYnVpbGQgdGhlIFhNTCBmb3IgdGhlIGZvcm0NCgkJCSRyZXN1bHQgPSBzZWxmOjpidWlsZFhNTCgkZGF0YS0+JGZpZWxkc0tleSwkc2V0dGluZ3MsJHR5cGUpOw0KCQkJLy8gZGlkIHdlIGdldCBhIHZhbGlkIHJlc3VsdCBzZXQNCgkJCWlmICgkcmVzdWx0KQ0KCQkJew0KCQkJCS8vIG5vdyBzYXZlIGZvciBuZXh0IHRpbWUNCgkJCQkkZG9uZSA9IHNlbGY6OnNhdmVYTUwoJHJlc3VsdCwgJGZ1bGxQYXRoLCAkcGF0aCk7DQoJCQl9DQoJCX0NCgkJLy8gZGlkIHdlIGdldCBhIHZhbGlkIHJlc3VsdCBzZXQNCgkJaWYgKCRkb25lKQ0KCQl7DQoJCQkvLyBHZXQgdGhlIGZvcm0uDQoJCQlqaW1wb3J0KCAnam9vbWxhLmZvcm0uZm9ybScgKTsNCgkJCS8vIHNldCB0aGUgcGF0aHMNCgkJCUpGb3JtOjphZGRGb3JtUGF0aCgkcGF0aCk7DQoJCQlKRm9ybTo6YWRkRmllbGRQYXRoKEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL21vZGVscy9maWVsZHMnKTsNCgkJCS8vIGdyZWF0IHdlIGFyZSBkb25lIHJldHVybiByZXN1bHRzDQoJCQlyZXR1cm4gSkZvcm06OmdldEluc3RhbmNlKCdjb21fW1tbY29tcG9uZW50XV1dLicuJGZpbGVOYW1lLCAkZmlsZU5hbWUsIGFycmF5KCdjb250cm9sJyA9PiAnamZvcm0nLCAnbG9hZF9kYXRhJyA9PiBmYWxzZSksIGZhbHNlLCBmYWxzZSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCgkvKioNCgkgKglQcmVwYXJlIHRoZSBmaWVsZHMgdG8gbG9hZCBpbnRvIHhtbA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcHJlcEZpZWxkcygmJGRhdGEsJiRzZXR0aW5ncywkdHlwZSkNCgl7DQoJCWlmKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJew0KCQkJLy8gZGVmYXVsdCBmaWVsZHMNCgkJCSRkZWZhdWx0cyA9IGFycmF5KCd0eXBlJywna2V5cycsJ25hbWUnLCdsYWJlbCcsJ2Rlc2NyaXB0aW9uJyk7DQoJCQkvLyBzb21lIGV4dHJhIHByZXAgZm9yIGFzc2Vzc21lbnRzDQoJCQlpZiAoJ2Fzc2Vzc21lbnQnID09ICR0eXBlKQ0KCQkJew0KCQkJCS8vIHdlIG11c3QgYnVpbGQgdGhlIG5hbWUgYW5kIGRlc2NyaXB0aW9uDQoJCQkJZm9yZWFjaCAoJGRhdGEgYXMgJGZpZWxkKQ0KCQkJCXsNCgkJCQkJJGZpZWxkLT5uYW1lID0gJGZpZWxkLT5pZDsNCgkJCQkJJGZpZWxkLT5kZXNjcmlwdGlvbiA9IFRleHQ6OnNwcmludGYoJ1RoaXMgcXVlc3Rpb24gY291bnRzICVzIHBvaW50cy4nLCAkZmllbGQtPnBvaW50KTsNCgkJCQkJJGZpZWxkLT5sYWJlbFBvaW50ID0gJyZuYnNwOyZuYnNwOzxlbT4nIC4gJGZpZWxkLT5wb2ludCAuJyZuYnNwOycuIFRleHQ6Ol8oJ1BvaW50cycpIC4gJzwvZW0+JzsNCgkJCQkJJGZpZWxkLT5hdXRvY29tcGxldGUgPSAnZmFsc2UnOw0KCQkJCQkkZmllbGQtPmF1dG9mb2N1cyA9ICdmYWxzZSc7DQoJCQkJCSRmaWVsZC0+bGFiZWxjbGFzcyA9ICcnOw0KCQkJCX0NCgkJCQkkZGVmYXVsdHNbXSA9ICdyZXF1aXJlZCc7DQoJCQkJJGRlZmF1bHRzW10gPSAnY2xhc3MnOw0KCQkJfQ0KCQkJDQoJCQlmb3JlYWNoICgkZGF0YSBhcyAkbnIgPT4gJiRmaWVsZCkNCgkJCXsNCgkJCQkvLyBzZXQgdGhlIGtleSBwcm9wZXR5DQoJCQkJJGZpZWxkLT5rZXlzID0gYXJyYXkoKTsNCgkJCQkvLyBmaXggdGhlIG9wdGlvbnMNCgkJCQlpZiAoMiA9PSAkZmllbGQtPnskc2V0dGluZ3NbJ3R5cGUnXX0pDQoJCQkJew0KCQkJCQkvLyBzZXQgdGhlIG9wdGlvbnMNCgkJCQkJc2VsZjo6c2V0T3B0aW9uc0ZpZWxkKCRmaWVsZCwkc2V0dGluZ3MpOw0KCQkJCX0NCgkJCQllbHNlaWYgKDEgPT0gJGZpZWxkLT57JHNldHRpbmdzWyd0eXBlJ119KQ0KCQkJCXsNCgkJCQkJLy8gc29tZSBleHRyYSBwcmVwIGZvciBhc3Nlc3NtZW50cw0KCQkJCQlpZiAoJ2Fzc2Vzc21lbnQnID09ICR0eXBlKQ0KCQkJCQl7DQoJCQkJCQkkZmllbGQtPnskc2V0dGluZ3NbJ29wdGlvbnMnXX1bJ3llcyddID0gVGV4dDo6XygnWWVzJyk7DQoJCQkJCQkkZmllbGQtPnskc2V0dGluZ3NbJ29wdGlvbnMnXX1bJ25vJ10gPSBUZXh0OjpfKCdObycpOw0KCQkJCQkJaWYgKCFpc3NldCgkZmllbGQtPnskc2V0dGluZ3NbJ2ZpbHRlciddfSkpDQoJCQkJCQl7DQoJCQkJCQkJJGZpZWxkLT5maWx0ZXIgPSAnV09SRCc7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgdGhlIG9wdGlvbnMNCgkJCQkJCXNlbGY6OnNldE9wdGlvbnNGaWVsZCgkZmllbGQsJHNldHRpbmdzLCdyYWRpbycpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXVuc2V0KCRmaWVsZC0+eyRzZXR0aW5nc1snb3B0aW9ucyddfSk7DQoJCQkJfQ0KCQkJCS8vIHNvbWUgY291bnRyeSBmaXgNCgkJCQlpZiAoMTEgPT0gJGZpZWxkLT57JHNldHRpbmdzWyd0eXBlJ119ICYmIGlzc2V0KCRmaWVsZC0+ZGVmYXVsdGNvdW50cnkpKQ0KCQkJCXsNCgkJCQkJJGZpZWxkLT57JHNldHRpbmdzWydkZWZhdWx0J119ID0gJGZpZWxkLT5kZWZhdWx0Y291bnRyeTsNCgkJCQl9DQoJCQkJLy8gbG9hZCB0aGUgZ2l2ZW4ga2V5cw0KCQkJCWZvcmVhY2ggKCRzZXR0aW5ncyBhcyAka2V5ID0+ICRrZXlGaWVsZCkNCgkJCQl7DQoJCQkJCWlmICghaW5fYXJyYXkoJGtleSwkZGVmYXVsdHMpICYmIGlzc2V0KCRmaWVsZC0+JGtleUZpZWxkKSkNCgkJCQkJewkJCQ0KCQkJCQkJLy8gb25seSBzZXQga2V5cyBuZWVkZWQgZm9yIHRoaXMgdHlwZQ0KCQkJCQkJJHNldCA9IHNlbGY6OiRmaWVsZFR5cGVzWyRmaWVsZC0+eyRzZXR0aW5nc1sndHlwZSddfV07DQoJCQkJCQkvLyBjaGVjayBpZiB0aGlzIGZpZWxkIGlzIHBhcnQgb2YgdGhpcyB0eXBlDQoJCQkJCQlpZiAoaXNzZXQoJHNldFska2V5XSkgJiYgIWVtcHR5KCRmaWVsZC0+JGtleUZpZWxkKSkNCgkJCQkJCXsNCgkJCQkJCQkkZmllbGQtPmtleXNbJGtleV0gPSAkZmllbGQtPiRrZXlGaWVsZDsNCgkJCQkJCX0NCgkJCQkJCS8vIHJlbW92ZSB0aGUgZmlsZWQNCgkJCQkJCXVuc2V0KCRmaWVsZC0+JGtleUZpZWxkKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCS8vIHNldCBlcnJvcg0KCQlKRXJyb3I6OnJhaXNlV2FybmluZyg1MDAsIFRleHQ6OnNwcmludGYoJ05vIGZpZWxkcyB3ZXJlIHNldCBmb3IgdGhpcyAlcywgcGxlYXNlIG5vdGlmeSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IuJywgJHR5cGUpKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldE9wdGlvbnNGaWVsZCgmJGZpZWxkLCRzZXR0aW5ncywkdHlwZSA9ICdsaXN0JykNCgl7DQoJCS8vIGZpeCB0aGUgb3B0aW9ucw0KCQlpZiAoaXNzZXQoJGZpZWxkLT57JHNldHRpbmdzWydvcHRpb25zJ119KSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZmllbGQtPnskc2V0dGluZ3NbJ29wdGlvbnMnXX0pKQ0KCQl7DQoJCQkkZmlsdGVyID0gJ1NUUklORyc7DQoJCQkkbm90U2V0RmlsdGVyID0gdHJ1ZTsNCgkJCSRidWlsZFNlbGVjdGlvbiA9IGpzb25fZGVjb2RlKCRmaWVsZC0+eyRzZXR0aW5nc1snb3B0aW9ucyddfSx0cnVlKTsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVpbGRTZWxlY3Rpb25bJ3NlbGVjdGlvbiddKSkNCgkJCXsNCgkJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCQlpZiAoaXNzZXQoJGJ1aWxkU2VsZWN0aW9uWyd2YWx1ZSddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVpbGRTZWxlY3Rpb25bJ3ZhbHVlJ10pKQ0KCQkJCXsNCgkJCQkJLy8gdG8gdXNlIHZhbHVlcyBpbnN0ZWFkIG9mIHRoZSB0ZXh0DQoJCQkJCSRmaWx0ZXIgPSAnSU5UJzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gaWYgbm90IG11bHRpIHRoZW4gYWRkIHNvbWUgZml4IHRvIGluc3VyZSBubyBzZWxlY3Rpb24gaXMgc2VsZWN0ZWQgYnkgZGVmYXVsdA0KCQkJCQlpZiAoaXNzZXQoJGZpZWxkLT57JHNldHRpbmdzWydtdWx0aXBsZSddfSkgJiYgaXNfbnVtZXJpYygkZmllbGQtPnskc2V0dGluZ3NbJ211bHRpcGxlJ119KSkNCgkJCQkJew0KCQkJCQkJaWYgKDIgIT0gJGZpZWxkLT57JHNldHRpbmdzWydtdWx0aXBsZSddfSAmJiAnbGlzdCcgPT0gJHR5cGUpDQoJCQkJCQl7DQoJCQkJCQkJJGJ1Y2tldFsnJ10gPSBUZXh0OjpfKCdTZWxlY3Qgc29tZSBvcHRpb24nKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkvLyBidWlsZCB0aGUgc2VsZWN0aW9uIGFycmF5DQoJCQkJCWZvcmVhY2ggKCRidWlsZFNlbGVjdGlvblsnc2VsZWN0aW9uJ10gYXMgJHNlbGVjdGlvbikNCgkJCQkJew0KCQkJCQkJaWYgKHN0cnBvcygkc2VsZWN0aW9uLCd8JykgIT09IGZhbHNlKQ0KCQkJCQkJew0KCQkJCQkJCSRhcnJheV9zZXR0ZXIgPSBleHBsb2RlKCd8JywgJHNlbGVjdGlvbik7DQoJCQkJCQkJaWYgKGNvdW50KCRhcnJheV9zZXR0ZXIpID09IDIpDQoJCQkJCQkJew0KCQkJCQkJCQlsaXN0KCR2YWx1ZV9zZXR0ZXIsICR0ZXh0X3NldHRlcikgPSAkYXJyYXlfc2V0dGVyOw0KCQkJCQkJCQkkYnVja2V0W1N1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHZhbHVlX3NldHRlcildID0gJHRleHRfc2V0dGVyOw0KCQkJCQkJCQkvLyBzZXQgdGhlIGZpbHRlciBiYXNlZCBvbiB0aGUgdHlwZQ0KCQkJCQkJCQlpZiAoaXNfbnVtZXJpYygkdmFsdWVfc2V0dGVyKSAmJiAkbm90U2V0RmlsdGVyKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlpZiAoaXNfaW50KCR2YWx1ZV9zZXR0ZXIpKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCSRmaWx0ZXIgPSAnSU5UJzsNCgkJCQkJCQkJCQkkbm90U2V0RmlsdGVyID0gZmFsc2U7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQllbHNlaWYgKGlzX2Zsb2F0KCR2YWx1ZV9zZXR0ZXIpKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCSRmaWx0ZXIgPSAnRkxPQVQnOw0KCQkJCQkJCQkJCSRub3RTZXRGaWx0ZXIgPSBmYWxzZTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlaWYgKGlzX3N0cmluZygkdmFsdWVfc2V0dGVyKSAmJiAkbm90U2V0RmlsdGVyKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkZmlsdGVyID0gJ1dPUkQnOw0KCQkJCQkJCQkJJG5vdFNldEZpbHRlciA9IGZhbHNlOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoY291bnQoJGFycmF5X3NldHRlcikgPT0gMSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRidWNrZXRbJyddID0gJGFycmF5X3NldHRlclswXTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGJ1Y2tldFtTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZWxlY3Rpb24pXSA9ICRzZWxlY3Rpb247DQoJCQkJCQkJCS8vIHNldCB0aGUgZmlsdGVyIGJhc2VkIG9uIHRoZSB0eXBlDQoJCQkJCQkJCWlmIChpc19udW1lcmljKCRzZWxlY3Rpb24pICYmICRub3RTZXRGaWx0ZXIpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCWlmIChpc19pbnQoJHNlbGVjdGlvbikpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGZpbHRlciA9ICdJTlQnOw0KCQkJCQkJCQkJCSRub3RTZXRGaWx0ZXIgPSBmYWxzZTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWVsc2VpZiAoaXNfZmxvYXQoJHNlbGVjdGlvbikpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGZpbHRlciA9ICdGTE9BVCc7DQoJCQkJCQkJCQkJJG5vdFNldEZpbHRlciA9IGZhbHNlOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2VpZiAoaXNfc3RyaW5nKCRzZWxlY3Rpb24pICYmICRub3RTZXRGaWx0ZXIpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRmaWx0ZXIgPSAnV09SRCc7DQoJCQkJCQkJCQkkbm90U2V0RmlsdGVyID0gZmFsc2U7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJJGJ1Y2tldFtTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZWxlY3Rpb24pXSA9ICRzZWxlY3Rpb247DQoJCQkJCQkJLy8gc2V0IHRoZSBmaWx0ZXIgYmFzZWQgb24gdGhlIHR5cGUNCgkJCQkJCQlpZiAoaXNfbnVtZXJpYygkc2VsZWN0aW9uKSAmJiAkbm90U2V0RmlsdGVyKQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKGlzX2ludCgkc2VsZWN0aW9uKSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJGZpbHRlciA9ICdJTlQnOw0KCQkJCQkJCQkJJG5vdFNldEZpbHRlciA9IGZhbHNlOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2VpZiAoaXNfZmxvYXQoJHNlbGVjdGlvbikpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRmaWx0ZXIgPSAnRkxPQVQnOw0KCQkJCQkJCQkJJG5vdFNldEZpbHRlciA9IGZhbHNlOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoaXNfc3RyaW5nKCRzZWxlY3Rpb24pICYmICRub3RTZXRGaWx0ZXIpDQoJCQkJCQkJew0KCQkJCQkJCQkkZmlsdGVyID0gJ1dPUkQnOw0KCQkJCQkJCQkkbm90U2V0RmlsdGVyID0gZmFsc2U7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCSRmaWVsZC0+eyRzZXR0aW5nc1snb3B0aW9ucyddfSA9ICRidWNrZXQ7DQoJCQl9DQoJCQkNCgkJCS8vIGZpeCBtdWx0aXBsZSBzd2l0Y2gNCgkJCWlmICgyID09ICRmaWVsZC0+eyRzZXR0aW5nc1sndHlwZSddfSAmJiBpc3NldCgkZmllbGQtPnskc2V0dGluZ3NbJ211bHRpcGxlJ119KSAmJiBpc19udW1lcmljKCRmaWVsZC0+eyRzZXR0aW5nc1snbXVsdGlwbGUnXX0pKQ0KCQkJew0KCQkJCWlmICgyID09ICRmaWVsZC0+eyRzZXR0aW5nc1snbXVsdGlwbGUnXX0pDQoJCQkJew0KCQkJCQkkZmllbGQtPnskc2V0dGluZ3NbJ211bHRpcGxlJ119ID0gJ3RydWUnOw0KCQkJCQkkZmlsdGVyID0gJ0FSUkFZJzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGZpZWxkLT57JHNldHRpbmdzWydtdWx0aXBsZSddfSA9ICdmYWxzZSc7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXVuc2V0KCRmaWVsZC0+eyRzZXR0aW5nc1snbXVsdGlwbGUnXX0pOw0KCQkJfQ0KCQkJDQoJCQkvLyBzZXQgdGhlIGZpbHRlciBpZiBub3Qgc2V0IGFscmVhZHkNCgkJCWlmICghaXNzZXQoJGZpZWxkLT57JHNldHRpbmdzWydmaWx0ZXInXX0pIHx8IGVtcHR5KCRmaWVsZC0+eyRzZXR0aW5nc1snZmlsdGVyJ119KSkNCgkJCXsNCgkJCQkkZmllbGQtPmZpbHRlciA9ICRmaWx0ZXI7DQoJCQl9DQoJCX0NCgl9DQoJDQoJLyoqDQoJICoJQ2hlY2sgaWYgYSBzdHJpbmcgaXMganNvbg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNKc29uKCRzdHJpbmcpDQoJew0KCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHN0cmluZykpDQoJCXsNCgkJCWpzb25fZGVjb2RlKCRzdHJpbmcpOw0KCQkJcmV0dXJuIChqc29uX2xhc3RfZXJyb3IoKSA9PT0gSlNPTl9FUlJPUl9OT05FKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJVG8gYWRkIG51bWJlcnMgdG8gcXVlc3Rpb25zDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcUNvdW50ZXI7DQoJDQoJLyoqDQoJICoJQnVpbGQgdGhlIGZvcm0geG1sDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBidWlsZFhNTCgkZGF0YSwkc2V0dGluZ3MsJHR5cGVGaWVsZFNldCkNCgl7DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIGFsd2F5cyByZXNldA0KCQkJJGZpZWxkU2V0ID0gYXJyYXkoKTsNCgkJCS8vIHNldCB0aGUgZGVmYXV0bCBmaWVsZHMNCgkJCSRmaWVsZFNldFtdID0gJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+JzsNCgkJCSRmaWVsZFNldFtdID0gJzxmb3JtIGFkZGZpZWxkcGF0aD0iL2FkbWluaXN0cmF0b3IvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL21vZGVscy9maWVsZHMiPic7DQoJCQkkZmllbGRTZXRbXSA9ICc8ZmllbGRzZXQgbmFtZT0iJy4kdHlwZUZpZWxkU2V0LiciPic7DQoJCQkkZmllbGRTZXRbXSA9ICJcdDwhLS0gRHluYW1pYyBGaWVsZHMuIC0tPiI7DQoJCQkvLyBsb2FkIHRoZSBmaWVsZHMNCgkJCXNlbGY6OiRxQ291bnRlciA9IDE7DQoJCQlmb3JlYWNoICgkZGF0YSBhcyAkZmllbGQpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdmFsdWVzDQoJCQkJJHR5cGUgPSAoaXNzZXQoJGZpZWxkLT57JHNldHRpbmdzWyd0eXBlJ119KSkgPyAkZmllbGQtPnskc2V0dGluZ3NbJ3R5cGUnXX06bnVsbDsNCgkJCQkkbGFiZWwgPSAoaXNzZXQoJGZpZWxkLT57JHNldHRpbmdzWydsYWJlbCddfSkpID8gJGZpZWxkLT57JHNldHRpbmdzWydsYWJlbCddfTpudWxsOw0KCQkJCSRkZXNjcmlwdGlvbiA9IChpc3NldCgkZmllbGQtPnskc2V0dGluZ3NbJ2Rlc2NyaXB0aW9uJ119KSkgPyAkZmllbGQtPnskc2V0dGluZ3NbJ2Rlc2NyaXB0aW9uJ119Om51bGw7DQoJCQkJaWYgKCdhc3Nlc3NtZW50JyA9PSAkdHlwZUZpZWxkU2V0KQ0KCQkJCXsNCgkJCQkJJGxhYmVsIC49IChpc3NldCgkZmllbGQtPmxhYmVsUG9pbnQpKSA/ICRmaWVsZC0+bGFiZWxQb2ludDonJzsNCgkJCQl9DQoJCQkJJG5hbWUgPSAoaXNzZXQoJGZpZWxkLT57JHNldHRpbmdzWyduYW1lJ119KSkgPyAkZmllbGQtPnskc2V0dGluZ3NbJ25hbWUnXX06bnVsbDsNCgkJCQkka2V5cyA9IChpc3NldCgkZmllbGQtPmtleXMpKSA/ICRmaWVsZC0+a2V5czpudWxsOw0KCQkJCS8vIGNoZWNrIGlmIHdlIGNhbiBjb250aW51ZQ0KCQkJCWlmICgkYl9maWVsZCA9IHNlbGY6OnNldER5bmFtaWNGaWVsZCgkdHlwZSwkbGFiZWwsJGRlc2NyaXB0aW9uLCRuYW1lLCRrZXlzKSkNCgkJCQl7DQoJCQkJCSRmaWVsZFNldFtdID0gIlx0Ii4kYl9maWVsZDsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCX0NCgkJCX0NCg0KCQkJJGZpZWxkU2V0W10gPSAiPC9maWVsZHNldD4iOw0KCQkJJGZpZWxkU2V0W10gPSAiPC9mb3JtPiI7DQoNCgkJCS8vIHJldHVuciB0aGUgc2V0DQoJCQlyZXR1cm4gaW1wbG9kZSgiXG4iLCRmaWVsZFNldCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCgkvKioNCgkgKglCdWlsZCB0aGUgeG1sIGZvciB0aGUgZmllbGQgKGR5bmFtaWNseSkNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldER5bmFtaWNGaWVsZCgkdHlwZSwkbGFiZWwsJGRlc2NyaXB0aW9uLCRuYW1lLCRrZXlzID0gbnVsbCkNCgl7DQoJCS8vIG9ubHkgbG9hZCB0aGUgZmllbGRzIHRoYXQgYXJlIHNldA0KCQlpZiAoaXNzZXQoc2VsZjo6JGZpZWxkVHlwZXNbJHR5cGVdKSAmJiAhaXNfbnVsbCgkbmFtZSkpDQoJCXsNCgkJCS8vIGFsd2F5cyByZXNldA0KCQkJJGZpZWxkID0gYXJyYXkoKTsNCgkJCSRzZXQgPSBzZWxmOjokZmllbGRUeXBlc1skdHlwZV07DQoJCQkvLyB0byBza2lwDQoJCQkkbm90ID0gYXJyYXkoJ3R5cGUnLCduYW1lJywnY2xhc3MnLCdsYWJlbCcsJ2ZpbHRlcicsJ2Rlc2NyaXB0aW9uJywncmVxdWlyZWQnKTsNCgkJCS8vIHRoZSBub3QgY291bnRlciBhcnJheQ0KCQkJJG5vdENvdW50ID0gYXJyYXkoJ25vdGUnLCdzcGFjZXInKTsNCgkJCSRvcHRpb25zID0gZmFsc2U7DQoJCQkvLyBzZXQgc29tZSBkZWZhdWx0cw0KCQkJJGNsYXNzID0gKGlzc2V0KCRrZXlzWydjbGFzcyddKSkgPyAka2V5c1snY2xhc3MnXS4oKGlzc2V0KCRzZXRbJ2NsYXNzJ10pKSA/ICcgJy4kc2V0WydjbGFzcyddOicnKTooKGlzc2V0KCRzZXRbJ2NsYXNzJ10pKSA/ICRzZXRbJ2NsYXNzJ106JycpOw0KCQkJJGZpbHRlciA9IChpc3NldCgka2V5c1snZmlsdGVyJ10pKSA/ICRrZXlzWydmaWx0ZXInXTooKGlzc2V0KCRzZXRbJ2ZpbHRlciddKSkgPyAkc2V0WydmaWx0ZXInXTonU1RSSU5HJyk7DQoJCQkkcmVxdWlyZWQgPSAoaXNzZXQoJGtleXNbJ3JlcXVpcmVkJ10pKSA/ICRrZXlzWydyZXF1aXJlZCddOiAoKGlzc2V0KCRzZXRbJ3JlcXVpcmVkJ10pKSA/ICRzZXRbJ3JlcXVpcmVkJ106J2ZhbHNlJyk7DQoJCQkvLyBidWlsZCB0aGUgZmllbGQNCgkJCSRmaWVsZFtdID0gJzwhLS0gJy5TdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRuYW1lLCdXdycpLicgRmllbGQuIFR5cGU6ICcuU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2V0Wyd0eXBlJ10sJ1d3JykuJyAoam9vbWxhKSAtLT4nOw0KCQkJJGZpZWxkW10gPSAiXHQiLic8ZmllbGQnOw0KCQkJJGZpZWxkW10gPSAiXHRcdCIuJ3R5cGU9IicuJHNldFsndHlwZSddLiciJzsNCgkJCSRmaWVsZFtdID0gIlx0XHQiLiduYW1lPSInLiRuYW1lLiciJzsNCgkJCWlmICghaW5fYXJyYXkoJHNldFsndHlwZSddLCRub3RDb3VudCkpDQoJCQl7DQoJCQkJJGZpZWxkW10gPSAiXHRcdCIuJ2xhYmVsPSInLnNlbGY6OiRxQ291bnRlci4nLiAnLmh0bWxzcGVjaWFsY2hhcnModHJpbSgkbGFiZWwpKS4nIic7DQoJCQkJc2VsZjo6JHFDb3VudGVyKys7DQoJCQl9DQoJCQllbHNlaWYgKDE0ID09ICR0eXBlKQ0KCQkJew0KCQkJCSRmaWVsZFtdID0gIlx0XHQiLidsYWJlbD0iJy5odG1sc3BlY2lhbGNoYXJzKHRyaW0oJGxhYmVsKSkuJyInOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgZGVzYyBpcyBzZXQNCgkJCWlmICgkZGVzY3JpcHRpb24pDQoJCQl7DQoJCQkJJGZpZWxkW10gPSAiXHRcdCIuJ2Rlc2NyaXB0aW9uPSInLmh0bWxzcGVjaWFsY2hhcnMoJGRlc2NyaXB0aW9uKS4nIic7DQoJCQl9DQoJCQkkZmllbGRbXSA9ICJcdFx0Ii4nY2xhc3M9IicuJGNsYXNzLiciJzsNCgkJCSRmaWVsZFtdID0gIlx0XHQiLidmaWx0ZXI9IicuJGZpbHRlci4nIic7DQoJCQkkZmllbGRbXSA9ICJcdFx0Ii4ncmVxdWlyZWQ9IicuJHJlcXVpcmVkLiciJzsNCgkJCWlmIChpc3NldCgka2V5cykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGtleXMpKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRrZXlzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJCXsNCgkJCQkJaWYgKCRrZXkgPT0gJ29wdGlvbnMnKQ0KCQkJCQl7DQoJCQkJCQkkb3B0aW9ucyA9ICR2YWx1ZTsNCgkJCQkJCSRub3RbXSA9ICRrZXk7DQoJCQkJCQljb250aW51ZTsNCgkJCQkJfQ0KCQkJCQlpZiAoIWluX2FycmF5KCRrZXksJG5vdCkpDQoJCQkJCXsNCgkJCQkJCSRub3RbXSA9ICRrZXk7DQoJCQkJCQkkZmllbGRbXSA9ICJcdFx0Ii5zZWxmOjpodG1sRXNjYXBlKCRrZXkpLic9IicuaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpLiciJzsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIGxvYWQgdGhlIGRhZmF1bHRzIHN0aWxsIG5vdCBzZXQNCgkJCWZvcmVhY2ggKCRzZXQgYXMgJF9rZXkgPT4gJF92YWx1ZSkNCgkJCXsNCgkJCQlpZiAoJF9rZXkgPT0gJ29wdGlvbnMnICYmICEkb3B0aW9ucykNCgkJCQl7DQoJCQkJCSRvcHRpb25zID0gJF92YWx1ZTsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCWlmICghaW5fYXJyYXkoJF9rZXksJG5vdCkpDQoJCQkJew0KCQkJCQkkZmllbGRbXSA9ICJcdFx0Ii5zZWxmOjpodG1sRXNjYXBlKCRfa2V5KS4nPSInLmh0bWxzcGVjaWFsY2hhcnMoJF92YWx1ZSkuJyInOw0KCQkJCQkkbm90W10gPSAkX2tleTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB0aGlzIGZpZWxkIGhhcyBvcHRpb25zDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG9wdGlvbnMpKQ0KCQkJew0KCQkJCSRmaWVsZFtdID0gIlx0XHQ+IjsNCgkJCQkkZmllbGRbXSA9ICJcdFx0PCEtLSBPcHRpb24gU2V0LiAtLT4iOw0KCQkJCWZvcmVhY2goJG9wdGlvbnMgYXMgJHZhbCA9PiAkdGV4dCkNCgkJCQl7DQoJCQkJCSRmaWVsZFtdID0gIlx0XHQiLic8b3B0aW9uIHZhbHVlPSInLiR2YWwuJyI+JzsNCgkJCQkJJGZpZWxkW10gPSAiXHRcdFx0Ii5odG1sc3BlY2lhbGNoYXJzKHNlbGY6Omh0bWxFc2NhcGUoJHRleHQpKS4iPC9vcHRpb24+IjsNCgkJCQl9DQoJCQkJJGZpZWxkW10gPSAiXHQ8L2ZpZWxkPiI7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJGZpZWxkW10gPSAiXHQvPiI7DQoJCQl9DQoJCQkvLyBkb25lLCByZXR1cm4gZHluYW1pYyBidWlsZGVkIGZpZWxkDQoJCQlyZXR1cm4gaW1wbG9kZSgiXG4iLCRmaWVsZCk7DQoJCX0NCgkJLy8gc2V0IGVycm9yDQoJCUpFcnJvcjo6cmFpc2VXYXJuaW5nKDUwMCwgVGV4dDo6XygnQSBmaWVsZCBjb3VsZCBub3QgYmUgYnVpbGQsIHBsZWFzZSBub3RpZnkgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yLicpKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCWZpZWxkVHlwZXMgRGVmYXVsdCBTZXR0aW5ncw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJGZpZWxkVHlwZXMgPSBhcnJheSgNCgkJCTEgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdyYWRpbycsIA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ2J0bi1ncm91cCBidG4tZ3JvdXAteWVzbm8nLA0KCQkJCSdvcHRpb25zJyA9PiBhcnJheSgnWWVzJywnTm8nKSwNCgkJCQknZmlsdGVyJyA9PiAnd29yZCcsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTIgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdsaXN0JywgDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAnbGlzdF9jbGFzcycsDQoJCQkJJ211bHRpcGxlJyA9PiBmYWxzZSwNCgkJCQknb3B0aW9ucycgPT4gYXJyYXkoKSwNCgkJCQknZmlsdGVyJyA9PiAnaW50JywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ3Nob3dvbicgPT4gJycgKSwNCgkJCTMgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdlZGl0b3InLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknd2lkdGgnID0+ICcxMDAlJywgDQoJCQkJJ2hlaWdodCcgPT4gJzUwMHB4JywgDQoJCQkJJ2ZpbHRlcicgPT4gJ3NhZmVodG1sJywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2J1dHRvbnMnID0+ICdmYWxzZScsDQoJCQkJJ2hpZGUnID0+ICcnLA0KCQkJCSdlZGl0b3InID0+ICdqY2V8bm9uZScsDQoJCQkJJ3Jvd3MnID0+ICcnLA0KCQkJCSdjb2xzJyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQk0ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAndGV4dGFyZWEnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNDAwJywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEgdWstd2lkdGgtMS0xJywNCgkJCQknd2lkdGgnID0+ICcxMDAlJywgDQoJCQkJJ2hlaWdodCcgPT4gJzUwMHB4JywgDQoJCQkJJ2ZpbHRlcicgPT4gJ3N0cmluZycsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdoaW50JyA9PiAnJywNCgkJCQkncm93cycgPT4gJzIwJywNCgkJCQknY29scycgPT4gJzEwJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQk1ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAndGV4dCcsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknYXV0b2NvbXBsZXRlJyA9PiAnb24nLA0KCQkJCSd2YWxpZGF0ZScgPT4gJycsIA0KCQkJCSdmaWVsZCcgPT4gJycsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNTAnLCANCgkJCQknZmlsdGVyJyA9PiAnc3RyaW5nJywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2hpbnQnID0+ICcnLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJNiA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ3VybCcsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknYXV0b2NvbXBsZXRlJyA9PiAnb24nLA0KCQkJCSd2YWxpZGF0ZScgPT4gJycsIA0KCQkJCSdmaWVsZCcgPT4gJycsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNTAnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknaGludCcgPT4gJycsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQk3ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnZW1haWwnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYScsDQoJCQkJJ2F1dG9jb21wbGV0ZScgPT4gJ29uJywNCgkJCQkndmFsaWRhdGUnID0+ICcnLCANCgkJCQknZmllbGQnID0+ICcnLA0KCQkJCSdzaXplJyA9PiAnNjAnLCANCgkJCQknbWF4bGVuZ3RoJyA9PiAnMTUwJywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2hpbnQnID0+ICcnLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJOCA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ3RlbCcsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknYXV0b2NvbXBsZXRlJyA9PiAnb24nLA0KCQkJCSd2YWxpZGF0ZScgPT4gJycsIA0KCQkJCSdmaWVsZCcgPT4gJycsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNTAnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknaGludCcgPT4gJycsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQk5ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnY2FsZW5kYXInLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYScsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNTAnLA0KCQkJCSdmaWx0ZXInID0+ICdzZXJ2ZXJfdXRjJywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2Zvcm1hdCcgPT4gJyVkLSVtLSVZJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTEwID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnY29sb3InLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYScsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNTAnLA0KCQkJCSdmaWx0ZXInID0+ICdzdHJpbmcnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTExID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnY291bnRyeW5hbWUnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ2xpc3RfY2xhc3MnLA0KCQkJCSdmaWx0ZXInID0+ICdzdHJpbmcnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTEyID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnaGlkZGVuJywgDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9oaWRkZW4nLCANCgkJCQknZmlsdGVyJyA9PiAnaW50JywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2RlZmF1bHQnID0+ICcxJyApLA0KCQkJMTMgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdmaWxlJywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEnLA0KCQkJCSdzaXplJyA9PiAnNjAnLCANCgkJCQknZmlsdGVyJyA9PiAnJywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2FjY2VwdCcgPT4gJ2ltYWdlLyonLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQkxNCA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ25vdGUnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdoZWFkaW5nJyA9PiAnaDQnLA0KCQkJCSdjbGFzcycgPT4gJ2FsZXJ0JywNCgkJCQknY2xvc2UnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTE1ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnc3BhY2VyJywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknaHInID0+ICd0cnVlJywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTE2ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnbm90ZScsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2hlYWRpbmcnID0+ICdoNCcsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQkxNyA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ3JlZ2lvbm5hbWUnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ2xpc3RfY2xhc3MnLA0KCQkJCSdmaWx0ZXInID0+ICdzdHJpbmcnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTMwID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAncGFzc3dvcmQnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ3ZhbGlkYXRlLXBhc3N3b3JkJywNCgkJCQknc2l6ZScgPT4gJzYwJywgDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE1MCcsIA0KCQkJCSdmaWx0ZXInID0+ICdyYXcnLCANCgkJCQkndmFsaWRhdGUnID0+ICdwYXNzd29yZCcsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdhdXRvY29tcGxldGUnID0+ICdvZmYnLA0KCQkJCSdmaWVsZCcgPT4gJycsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQkzMSA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ2NhcHRjaGEnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSd2YWxpZGF0ZScgPT4gJ2NhcHRjaGEnLCANCgkJCQknbmFtZXNwYWNlJyA9PiAnJykNCgkJCSk7DQoNCgkvKioNCgkqIAlzYXZlIFhNTA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2F2ZVhNTCgkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCkNCgl7DQoJCS8vIGNoZWNrIGlmIHBhdGggZXhpc3RzDQoJCWlmICghZmlsZV9leGlzdHMoJHBhdGgpKQ0KCQl7DQoJCQkvLyBpZiBub3QgdGhlIG1ha2UgdGhlIHBhdGgNCgkJCW1rZGlyKCRwYXRoLCAwNzU1LCB0cnVlKTsNCgkJfQ0KCQlsaWJ4bWxfdXNlX2ludGVybmFsX2Vycm9ycyh0cnVlKTsNCgkJLy8gbWFrZSBzdXJlIHRoaXMgaXMgdmFsaWQgeG1sDQoJCWlmIChzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJGRhdGEpKQ0KCQl7DQoJCQkkZnAgPSBmb3BlbigkZnVsbFBhdGgsICd3Jyk7DQoJCQlmd3JpdGUoJGZwLCAkZGF0YSk7DQoJCQlmY2xvc2UoJGZwKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCQ0KCQkvLyBzZXQgZXJyb3INCgkJSkVycm9yOjpyYWlzZVdhcm5pbmcoNTAwLCBUZXh0OjpfKCdUaGUgeG1sIGZvciB0aGlzIGZyb20gY291bGQgbm90IGJlIHZhbGlkYXRlZCwgcGxlYXNlIG5vdGlmeSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IuJykpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgJGR5bmFtaWNEYXRhID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0RHluYW1pY0RhdGEoJGRhdGEsICRwbGFjZWhvbGRlcnMpDQoJew0KCQkka2V5TUQ1ID0gbWQ1KCRkYXRhLmpzb25fZW5jb2RlKCRwbGFjZWhvbGRlcnMpKTsNCgkJaWYgKCFpc3NldChzZWxmOjokZHluYW1pY0RhdGFbJGtleU1ENV0pKQ0KCQl7DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBsYWNlaG9sZGVycykpDQoJCQl7DQoJCQkJc2VsZjo6c2V0VGhlSUYoJGRhdGEsICRwbGFjZWhvbGRlcnMpOw0KCQkJCXNlbGY6OiRkeW5hbWljRGF0YVska2V5TUQ1XSA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJHBsYWNlaG9sZGVycyksIGFycmF5X3ZhbHVlcygkcGxhY2Vob2xkZXJzKSwgJGRhdGEpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXNlbGY6OiRkeW5hbWljRGF0YVska2V5TUQ1XSA9ICRkYXRhOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBzZWxmOjokZHluYW1pY0RhdGFbJGtleU1ENV07DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRUaGVJRigmJHN0cmluZywgJHBsYWNlaG9sZGVycykNCgl7CQkNCgkJLy8gb25seSBub3JtYWwgaWYgZW5kaWYNCgkJJGNvbmRpdGlvbiAJPSAnW2EtejAtOVxfXC1dKyc7DQoJCSRpbm5lcgkJPSAnKCg/Oig/IVxbXC8/SUYpKD8hXFtcLz9FTFNFKSg/IVxbXC8/RUxTRUlGKS4pKj8pJzsNCgkJJGlmCQk9ICdcW0lGXHM/KCcuJGNvbmRpdGlvbi4nKVxdJzsNCgkJJGVsc2VpZgkJPSAnXFtFTFNFSUZccz8oJy4kY29uZGl0aW9uLicpXF0nOw0KCQkkZWxzZQkJPSAnXFtFTFNFXF0nOw0KCQkkZW5kaWYJCT0gJ1xbRU5ESUZcXSc7DQoJCS8vIHNldCB0aGUgcGF0dGVybnMNCgkJJHBhdHRlcm5zID0gYXJyYXkoKTsNCgkJLy8gbm9ybWFsIGlmIGVuZGlmDQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkvLyBub3JtYWwgaWYgZWxzZSBlbmRpZg0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCS8vIGR5bmFtaWMgaWYgZWxzZWlmJ3MgZW5kaWYNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkvLyBkeW5hbWljIGlmIGVsc2VpZidzIGVsc2UgZW5kaWYNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZS4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2UuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZS4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2UuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZS4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCS8vIHJ1biB0aGUgcGF0dGVybnMgdG8gc2V0dXAgdGhlIHN0cmluZw0KCQlmb3JlYWNoICgkcGF0dGVybnMgYXMgJHBhdHRlcm4pDQoJCXsNCgkJCXdoaWxlIChwcmVnX21hdGNoKCRwYXR0ZXJuLCAkc3RyaW5nLCAkbWF0Y2gpKQ0KCQkJew0KCQkJCSRrZWVwIAk9IHNlbGY6OnJlbWFpbmRlcklGKCRtYXRjaCwgJHBsYWNlaG9sZGVycyk7DQoJCQkJJHN0cmluZwk9IHByZWdfcmVwbGFjZSgkcGF0dGVybiwgJGtlZXAsICRzdHJpbmcsIDEpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiByZW1haW5kZXJJRigmJG1hdGNoLCAmJHBsYWNlaG9sZGVycykNCgl7CQ0KCQkvLyBkZWZhdWx0IHdlIGtlZXAgbm90aGluZw0KCQkka2VlcCA9ICcnOw0KCQkkZm91bmQgPSBmYWxzZTsNCgkJLy8gZ2V0IG1hdGNoIGxlbmdodA0KCQkkbGVuZ3RoID0gY291bnQoJG1hdGNoKTsNCgkJLy8gcmFuZ2VzIHRvIGNoZWNrDQoJCSRpaSA9IHJhbmdlKDIsMzAsMik7IC8vIGV2ZW4gbnVtYmVycyAoY29udGVudCkNCgkJJGlpaSA9IHJhbmdlKDEsIDI1LCAyKTsgLy8gb2RkIG51bWJlcnMgKHBsYWNlaG9sZGVyKQ0KCQkvLyBpZiBlbXB0eSB2YWx1ZSByZW1vdmUgd2hvbGUgbGluZSBlbHNlIHNob3cgbGluZSBidXQgcmVtb3ZlIGFsbCBbQ09ERV0NCgkJZm9yZWFjaCAoJGlpaSBhcyAkY29udGVudCA9PiAkcGxhY2Vob2xkZXIpDQoJCXsNCgkJCWlmIChpc3NldCgkbWF0Y2hbJHBsYWNlaG9sZGVyXSkgJiYgZW1wdHkoJHBsYWNlaG9sZGVyc1snWycuJG1hdGNoWyRwbGFjZWhvbGRlcl0uJ10nXSkpDQoJCQl7DQoJCQkJLy8ga2VlcCBub3RoaW5nIG9yIG5leHQgb3B0aW9uDQoJCQkJJGtlZXAgPSAnJzsNCgkJCX0NCgkJCWVsc2VpZiAoaXNzZXQoJG1hdGNoWyRpaVskY29udGVudF1dKSkNCgkJCXsNCgkJCQkka2VlcCA9IGFkZGNzbGFzaGVzKCRtYXRjaFskaWlbJGNvbnRlbnRdXSwgJyQnKTsNCgkJCQkkZm91bmQgPSB0cnVlOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCS8vIGlmIG5vdCBmb3VuZCBsb2FkIGVsc2UgaWYgc2V0DQoJCWlmICghJGZvdW5kICYmIGluX2FycmF5KCRsZW5ndGgsICRpaSkpDQoJCXsNCgkJCSRrZWVwID0gYWRkY3NsYXNoZXMoJG1hdGNoWyRsZW5ndGggLSAxXSwgJyQnKTsNCgkJfQ0KCQlyZXR1cm4gJGtlZXA7CQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJHBsYWNlSG9sZGVyczsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFBsYWNlSG9sZGVycygkc3R1ZGVudCwgJHR5cGUgPSBudWxsLCAkY29uZmlnID0gYXJyYXkoKSkNCgl7DQoJCWlmICghaXNzZXQoc2VsZjo6JHBsYWNlSG9sZGVyc1skc3R1ZGVudF0pKQ0KCQl7DQoJCQkvLyBnZXQgbmVlZGVkIGRldGFpbHMNCgkJCSRkZXRhaWxzID0gYXJyYXkoKTsNCgkJCSRkZXRhaWxzW10gPSBzZWxmOjpnZXRpbnN0aXR1dGlvbkRldGFpbHMoKTsNCgkJCSRkZXRhaWxzW10gPSBzZWxmOjpnZXRzdHVkZW50RGV0YWlscygkc3R1ZGVudCk7DQoJCQkvLyB0eXBlIHN3aXRjaCAoVE9ETykNCgkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJHN0dWRlbnRdID0gc2VsZjo6bWVyZ2VBcnJheXMoJGRldGFpbHMpOw0KCQl9DQoJCS8vIGFkZCB0aGUgY29maWcgYXJyYXkgaWYgbmVlZGVkDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29uZmlnKSkNCgkJew0KCQkJJGRldGFpbHNbXSA9IHNlbGY6OiRwbGFjZUhvbGRlcnNbJHN0dWRlbnRdOw0KCQkJJGRldGFpbHNbXSA9ICRjb25maWc7DQoJCQlzZWxmOjokcGxhY2VIb2xkZXJzWyRzdHVkZW50XSA9IHNlbGY6Om1lcmdlQXJyYXlzKCRkZXRhaWxzKTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JHBsYWNlSG9sZGVyc1skc3R1ZGVudF07DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkaW5zdGl0dXRpb25EZXRhaWxzID0gYXJyYXkoKTsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldGluc3RpdHV0aW9uRGV0YWlscygpDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRpbnN0aXR1dGlvbkRldGFpbHNbJ2luc3RpdHV0aW9uX25hbWUnXSkpDQoJCXsNCgkJCS8vIGdldCB0aGUgZ2xvYmFsIGluc3RpdHV0aW9uIGRldGFpbHMNCgkJCSRhcHBfcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX25hbWVdJ10gPSAkYXBwX3BhcmFtcy0+Z2V0KCdpbnN0aXR1dGlvbm5hbWUnLCAnJyk7DQoJCQlzZWxmOjokaW5zdGl0dXRpb25EZXRhaWxzWydbaW5zdGl0dXRpb25fbG9nb10nXSA9ICc8aW1nIGFsdD0iJy5zZWxmOjokaW5zdGl0dXRpb25EZXRhaWxzWydbaW5zdGl0dXRpb25fbmFtZV0nXS4nIiBzcmM9IicuVXJpOjpyb290KCkuJGFwcF9wYXJhbXMtPmdldCgnaW5zdGl0dXRpb25sb2dvJywgJycpLiciPic7DQoJCQlzZWxmOjokaW5zdGl0dXRpb25EZXRhaWxzWydbaW5zdGl0dXRpb25fZW1haWxdJ10gPSAkYXBwX3BhcmFtcy0+Z2V0KCdlbWFpbCcsICcnKTsNCgkJCXNlbGY6OiRpbnN0aXR1dGlvbkRldGFpbHNbJ1tpbnN0aXR1dGlvbl9waG9uZV0nXSA9ICRhcHBfcGFyYW1zLT5nZXQoJ3Bob25lJywgJycpOw0KCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX2ZheF0nXSA9ICRhcHBfcGFyYW1zLT5nZXQoJ2ZheCcsICcnKTsNCgkJCXNlbGY6OiRpbnN0aXR1dGlvbkRldGFpbHNbJ1tpbnN0aXR1dGlvbl9zdHJlZXRdJ10gPSAkYXBwX3BhcmFtcy0+Z2V0KCdzdHJlZXQnLCAnJyk7DQoJCQlzZWxmOjokaW5zdGl0dXRpb25EZXRhaWxzWydbaW5zdGl0dXRpb25fcG9zdGFsXSddID0gJGFwcF9wYXJhbXMtPmdldCgncG9zdGFsJywgJycpOw0KCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX3Bvc3RhbGNvZGVdJ10gPSAkYXBwX3BhcmFtcy0+Z2V0KCdwb3N0YWxjb2RlJywgJycpOw0KCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX2NpdHldJ10gPSAkYXBwX3BhcmFtcy0+Z2V0KCdjaXR5JywgJycpOw0KCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX3dlYnNpdGVdJ10gPSAkYXBwX3BhcmFtcy0+Z2V0KCd3ZWJzaXRlJywgJycpOw0KCQkJLy8gc2V0IHRoZSByZWdpb24NCgkJCSRyZWdpb24gPSAkYXBwX3BhcmFtcy0+Z2V0KCdyZWdpb24nKTsNCgkJCWlmICgkcmVnaW9uICYmIGlzX251bWVyaWMoJHJlZ2lvbikgJiYgJHJlZ2lvbiA+IDApDQoJCQl7DQoJCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX3JlZ2lvbl9uYW1lXSddID0gc2VsZjo6Z2V0VmFyKCdyZWdpb24nLCAkcmVnaW9uLCAnaWQnLCAnbmFtZScpOw0KCQkJfQ0KCQkJZWxzZWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcmVnaW9uKSkNCgkJCXsNCgkJCQlzZWxmOjokaW5zdGl0dXRpb25EZXRhaWxzWydbaW5zdGl0dXRpb25fcmVnaW9uX25hbWVdJ10gPSAkcmVnaW9uOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXNlbGY6OiRpbnN0aXR1dGlvbkRldGFpbHNbJ1tpbnN0aXR1dGlvbl9yZWdpb25fbmFtZV0nXSA9ICcnOw0KCQkJfQ0KCQkJLy8gc2V0IHRoZSBjb3VudHJ5DQoJCQkkY291bnRyeSA9ICRhcHBfcGFyYW1zLT5nZXQoJ2NvdW50cnknKTsNCgkJCWlmICgkY291bnRyeSAmJiBpc19udW1lcmljKCRjb3VudHJ5KSAmJiAkY291bnRyeSA+IDApDQoJCQl7DQoJCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX2NvdW50cnlfbmFtZV0nXSA9IHNlbGY6OmdldFZhcignY291bnRyeScsICRjb3VudHJ5LCAnaWQnLCAnbmFtZScpOw0KCQkJfQ0KCQkJZWxzZWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkY291bnRyeSkpDQoJCQl7DQoJCQkJc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsc1snW2luc3RpdHV0aW9uX2NvdW50cnlfbmFtZV0nXSA9ICRjb3VudHJ5Ow0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXNlbGY6OiRpbnN0aXR1dGlvbkRldGFpbHNbJ1tpbnN0aXR1dGlvbl9jb3VudHJ5X25hbWVdJ10gPSAnJzsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGluc3RpdHV0aW9uRGV0YWlsczsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRzdHVkZW50RGV0YWlscyA9IGFycmF5KCk7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRzdHVkZW50RGV0YWlscygkaWQsICRmaWVsZCA9IG51bGwpDQoJew0KCQlpZiAoJGlkID4gMCkNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokc3R1ZGVudERldGFpbHNbJGlkXSkpDQoJCQl7DQoJCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkNCgkJCQkvLyBTZWxlY3Qgc29tZSBmaWVsZHMNCgkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQkJYXJyYXkoDQoJCQkJCQknYS5pZCcsJ2EudXNlcicsJ2EubW9iaWxlX3Bob25lJywnYS5nZW5kZXInLCdhLm1hcnJpYWdlc3RhdHVzJywNCgkJCQkJCSdhLmRhdGVvZmJpcnRoJywnYS5uYXRpb25hbF9pZCcsJ2Eub2NjdXBhdGlvbicsJ2EuZW1wbG95ZXInLA0KCQkJCQkJJ2Eud29ya19waG9uZScsJ2EuaG9tZV9waG9uZScsJ2Euc3RyZWV0JywnYS5wb3N0YWwnLCdhLmNpdHknLA0KCQkJCQkJJ2EucmVnaW9uJywnYS5jb3VudHJ5JywnYS5wb3N0YWxjb2RlJywnYS5hdXRvYmlvZ3JhcGh5JyksDQoJCQkJCWFycmF5KA0KCQkJCQkJJ1tpZF0nLCdbdXNlcl9pZF0nLCdbbW9iaWxlX3Bob25lXScsJ1tnZW5kZXJdJywnW21hcnJpYWdlc3RhdHVzXScsJ1tkYXRlb2ZiaXJ0aF0nLA0KCQkJCQkJJ1tuYXRpb25hbF9pZF0nLCdbb2NjdXBhdGlvbl0nLCdbZW1wbG95ZXJdJywnW3dvcmtfcGhvbmVdJywnW2hvbWVfcGhvbmVdJywNCgkJCQkJCSdbc3RyZWV0XScsJ1twb3N0YWxdJywnW2NpdHldJywnW3JlZ2lvbl9uYW1lXScsJ1tjb3VudHJ5X25hbWVdJywnW3Bvc3RhbGNvZGVdJywnW2F1dG9iaW9ncmFwaHldJykpKTsNCgkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQkJYXJyYXkoJ2IubmFtZScsJ2IudXNlcm5hbWUnLCdiLmVtYWlsJyksDQoJCQkJCWFycmF5KCdbbmFtZV0nLCdbdXNlcm5hbWVdJywnW2VtYWlsXScpKSk7DQoJCQkJDQoJCQkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgKCRkYi0+cXVvdGVOYW1lKCcjX191c2VycycsICdiJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnVzZXInKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2IuaWQnKSAuICcpJyk7DQoJCQkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX3N0dWRlbnQgdGFibGUJCQkJDQoJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc3R1ZGVudCcsICdhJykpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkaWQpOw0KCQkJCS8vIGxvYWQgdGhlIHF1ZXJ5DQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRzdHVkZW50RGV0YWlsc1skaWRdID0gJGRiLT5sb2FkQXNzb2MoKTsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoJGZpZWxkKQ0KCQkJew0KCQkJCSRmaWVsZCA9ICdbJy4kZmllbGQuJ10nOw0KCQkJCWlmIChpc3NldChzZWxmOjokc3R1ZGVudERldGFpbHNbJGlkXVskZmllbGRdKSkNCgkJCQl7DQoJCQkJCXJldHVybiBzZWxmOjokc3R1ZGVudERldGFpbHNbJGlkXVskZmllbGRdOw0KCQkJCX0NCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JHN0dWRlbnREZXRhaWxzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCWNvbXBvbmVudCBwYXJhbXMNCgkqKi8NCglwdWJsaWMgc3RhdGljICRwYXJhbXM7DQoNCgkvKioNCgkqIAlSZXBvcnQgQ2FyZCBJdGVtcw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHJlcG9ydENhcmRJdGVtczsNCgkNCgkvKioNCgkqIAlJcyB1c2VycyByZXBvcnQgY2FyZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHJlcG9ydENhcmQgPSBhcnJheSgpOw0KCQ0KCS8qKg0KCSogCUlzIGV2ZW50IGRldGFpbHMNCgkqKi8NCglwdWJsaWMgc3RhdGljICRldmVudERldGFpbHMgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJSXMgUmVwb3J0IENhcmQgUHJvZ3JhbQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHJlcG9ydENhcmRQcm9ncmFtID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0UmVwb3J0Q2FyZCgmJGl0ZW1zLCAmJGFzc2Vzc21lbnRzKQ0KCXsNCgkJLy8gc2V0IHBhcmFtcw0KCQlpZiAoZW1wdHkoc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gc2V0IHJlcG9ydCBjYXJkIGl0ZW1zDQoJCXNlbGY6OiRyZXBvcnRDYXJkSXRlbXMgPSAkaXRlbXM7DQoJCS8vIEJ1aWxkIHJlcG9ydCBjYXJkDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYXNzZXNzbWVudHMpKQ0KCQl7DQoJCQlmb3JlYWNoKCRhc3Nlc3NtZW50cyBhcyAkZXZlbnRfbmFtZSA9PiAmJGRhdGEpDQoJCQl7DQoJCQkJLy8gc3RhcnQgZGF0ZQ0KCQkJCSRzdGFydGRhdGUgPSBzdHJ0b3RpbWUoJzMwMDAtMDAtMDAnKTsNCgkJCQkkbm90ZGF0ZSA9IHN0cnRvdGltZSgnMjAwMC0wMC0wMCcpOw0KCQkJCS8vIGluc3VyZSB0aGF0IGV2ZW50IG5hbWUgaXMgY29ycmVjdA0KCQkJCSRkYXRhWydldmVudF9uYW1lJ10gPSAkZXZlbnRfbmFtZTsNCgkJCQkvLyBhZGQgbmVlZGVkIGV2ZW50IGRldGFpbHMNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW2V2ZW50X25hbWVdJ10gPSAkZXZlbnRfbmFtZTsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW3Byb2dyYW1fbmFtZV0nXSA9ICRkYXRhWydwcm9ncmFtX25hbWUnXTsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW3Byb2dyYW1fYWNyb255bV0nXSA9ICRkYXRhWydwcm9ncmFtX2Fjcm9ueW0nXTsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW3Byb2dyYW1faWNvbl0nXSA9ICRkYXRhWydwcm9ncmFtX2ljb24nXTsNCgkJCQkvLyBpbnN1cmUgd2UgaGF2ZSBhIHByb2dyYW0gaWQNCgkJCQlpZiAoIWlzc2V0KCRkYXRhWydwcm9ncmFtX2lkJ10pICYmIGlzc2V0KCRkYXRhWydwcm9ncmFtX2Fjcm9ueW0nXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ3Byb2dyYW1fYWNyb255bSddKSkNCgkJCQl7DQoJCQkJCSRkYXRhWydwcm9ncmFtX2lkJ10gPSBzZWxmOjpnZXRWYXIoJ3Byb2dyYW0nLCAkZGF0YVsncHJvZ3JhbV9hY3JvbnltJ10sICdhY3JvbnltJywgJ2lkJyk7DQoJCQkJCS8vIHNldCB0aGUgcGFzcyBwb2ludA0KCQkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW3Bhc3NfY3JlZGl0XSddID0gc2VsZjo6Z2V0VmFyKCdwcm9ncmFtJywgJGRhdGFbJ3Byb2dyYW1faWQnXSwgJ2lkJywgJ3Bhc3NfY3JlZGl0Jyk7DQoJCQkJCS8vIHNldCByZXBvcnQgY2FyZCBoZWFkZXIgc3dpdGNoDQoJCQkJCXNlbGY6OiRyZXBvcnRDYXJkUHJvZ3JhbVskZGF0YVsncHJvZ3JhbV9pZCddXSA9IHNlbGY6OmdldFZhcigncHJvZ3JhbScsICRkYXRhWydwcm9ncmFtX2lkJ10sICdpZCcsICdzZXRfcmVwb3J0X2NhcmQnKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gc2V0IHRoZSBwYXNzIHBvaW50DQoJCQkJCXNlbGY6OiRldmVudERldGFpbHNbJGV2ZW50X25hbWVdWydbcGFzc19jcmVkaXRdJ10gPSBudWxsOw0KCQkJCX0NCgkJCQkvLyBsb2FkIHRoZSByZXBvcnQgY2FyZCB2YWx1ZXMgYW5kIHNldCB0aGUgc3RhcnQgZGF0ZQ0KCQkJCWZvcmVhY2goJGRhdGFbJ3ZhbHVlcyddIGFzICRjb3Vyc2VfbmFtZSA9PiAkZGF5cykNCgkJCQl7DQoJCQkJCWZvcmVhY2goJGRheXMgYXMgJGRheV9uYW1lID0+ICRhc3Nlc3NtZW50c190eXBlcykNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCgkYXNzZXNzbWVudHNfdHlwZXMgYXMgJGFzc2Vzc21lbnRfbmFtZSA9PiAkX2Fzc2Vzc21lbnRzKQ0KCQkJCQkJew0KCQkJCQkJCWZvcmVhY2goJF9hc3Nlc3NtZW50cyBhcyAkdmFsdWVzKQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKCR2YWx1ZXMtPmFzc2Vzc21lbnRfdHlwZV9hZGRfcmVwb3J0Y2FyZCA9PSAxKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlzZWxmOjphZGRUb1JlcG9ydCgkdmFsdWVzLCAkZXZlbnRfbmFtZSwgJGNvdXJzZV9uYW1lLCAkYXNzZXNzbWVudF9uYW1lKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBidWlsZCBzdGFydCBkYXRlDQoJCQkJCQkJCWlmIChpc19udW1lcmljKCR2YWx1ZXMtPmRheV9kYXRlKSAmJiAkdmFsdWVzLT5kYXlfZGF0ZSA8ICRzdGFydGRhdGUgJiYgJHZhbHVlcy0+ZGF5X2RhdGUgPiAkbm90ZGF0ZSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHN0YXJ0ZGF0ZSA9ICR2YWx1ZXMtPmRheV9kYXRlOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGdldCBhc3Nlc3NtZW50IG5vdGljZSAoY2hlY2sgaWYgYWxsIGFzc2Vzc21lbnRzIGFyZSBzdWJtaXR0ZWQpDQoJCQkJc2VsZjo6JGV2ZW50RGV0YWlsc1skZXZlbnRfbmFtZV1bJ1thc3Nlc3NtZW50c19vdXRzdGFuZGluZ10nXSA9IHNlbGY6OmdldEFzc2Vzc21lbnRzT3V0c3RhbmRpbmcoJGV2ZW50X25hbWUpOw0KCQkJCS8vIGFkZCBldmVudCBkYXRlDQoJCQkJc2VsZjo6JGV2ZW50RGV0YWlsc1skZXZlbnRfbmFtZV1bJ1tldmVudF9kYXRlXSddID0gc2VsZjo6ZmFuY3lEYXRlKCRzdGFydGRhdGUpOw0KCQkJfQ0KCQkJLy8gYnVpbGQgdGhlIHJlcG9ydCB0YWJsZQ0KCQkJc2VsZjo6c2V0UmVwb3J0VGFibGUoKTsNCgkJfQ0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFJlcG9ydFRhYmxlKCkNCgl7DQoJCS8vIHNldCBmaW5hbCBkZWZhdWx0cyBwZXIvZXZlbnQNCgkJc2VsZjo6c2V0RGVmYXVsdHNQZXJFdmVudCgpOw0KCQkvLyBzb21lIGRlZmF1bHRzDQoJCSRzdHlsZSA9ICdzdHlsZT0icGFkZGluZzogMTBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjIxLCAyMjEsIDIyMSk7Iic7DQoJCSRzdHlsZU5hbWUgPSAnc3R5bGU9InBhZGRpbmc6IDEwcHg7IHRleHQtYWxpZ246IHJpZ2h0OyBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjIxLCAyMjEsIDIyMSk7Iic7DQoJCS8vIHRoZSBtb2R1bGUgY3JlZGl0IHN5c3RlbSB0YWJsZXMNCgkJaWYgKGlzc2V0KHNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJ2NyZWRpdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdG90YWxbJ21vZHVsZSddWydjcmVkaXQnXSkpDQoJCXsNCgkJCS8vIGluaXRpYXRlIHRoZSBtb2R1bGUgcmVwb3J0IGNhcmQNCgkJCXNlbGY6OiRyZXBvcnRDYXJkWydtb2R1bGUnXSA9IGFycmF5KCk7DQoJCQkvLyBsb2FkIHRoZSBjcmVkaXQgYW5kIHBlcmNlbnRhZ2UNCgkJCWZvcmVhY2goc2VsZjo6JHBlclsnbW9kdWxlUHJvZ3JhbSddWydjcmVkaXQnXSBhcyAkZXZlbnRfbmFtZSA9PiAkbW9kdWxlcykNCgkJCXsNCgkJCQkkYWRkQ3JlZGl0ID0gZmFsc2U7DQoJCQkJaWYgKCFpc3NldChzZWxmOjokYXNzZXNzbWVudHNPdXRzdGFuZGluZ1skZXZlbnRfbmFtZV0pKQ0KCQkJCXsNCgkJCQkJJGFkZENyZWRpdCA9IHRydWU7DQoJCQkJfQ0KCQkJCWZvcmVhY2goJG1vZHVsZXMgYXMgJG1vZHVsZV9uYW1lID0+ICRjcmVkaXQpDQoJCQkJew0KCQkJCQkkcm93ID0gYXJyYXkoKTsNCgkJCQkJJHJvd1tdID0gJG1vZHVsZV9uYW1lOw0KCQkJCQkkcm93W10gPSBzZWxmOjpsb2FkUGVyTW9kdWxlKCdDb3Vyc2UnLCAkZXZlbnRfbmFtZSwgJG1vZHVsZV9uYW1lKTsNCgkJCQkJJHJvd1tdID0gc2VsZjo6bG9hZFBlck1vZHVsZSgnQXNzZXNzbWVudCcsICRldmVudF9uYW1lLCAkbW9kdWxlX25hbWUpOw0KCQkJCQkkcm93W10gPSBzZWxmOjokcGVyWydtb2R1bGVQcm9ncmFtQXZhaWxhYmxlJ11bJ2NyZWRpdCddWyRldmVudF9uYW1lXVskbW9kdWxlX25hbWVdOw0KCQkJCQlpZiAoJGFkZENyZWRpdCkNCgkJCQkJew0KCQkJCQkJJHJvd1tdID0gJGNyZWRpdDsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSRyb3dbXSA9IFRleHQ6Ol8oJ3BlbmRpbmcnKTsNCgkJCQkJfQ0KCQkJCQkvLyBsb2FkIHRoZSByb3cNCgkJCQkJc2VsZjo6JHJlcG9ydENhcmRbJ21vZHVsZSddWyRldmVudF9uYW1lXVskbW9kdWxlX25hbWVdID0gJzx0ZCAnLiRzdHlsZU5hbWUuJz4nLmltcGxvZGUoJzwvdGQ+PHRkICcuJHN0eWxlLic+Jywkcm93KS4nPC90ZD4nOw0KCQkJCX0NCgkJCQlrc29ydChzZWxmOjokcmVwb3J0Q2FyZFsnbW9kdWxlJ11bJGV2ZW50X25hbWVdKTsNCgkJCX0NCgkJfQ0KCQkvLyB0aGUgYXNzZXNzbWVudCBjcmVkaXQgc3lzdGVtIHRhYmxlcw0KCQlpZiAoaXNzZXQoc2VsZjo6JHRvdGFsWydhc3Nlc3NtZW50J11bJ2NyZWRpdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdG90YWxbJ2Fzc2Vzc21lbnQnXVsnY3JlZGl0J10pKQ0KCQl7DQoJCQkvLyBpbml0aWF0ZSB0aGUgYXNzZXNzbWVudCByZXBvcnQgY2FyZA0KCQkJc2VsZjo6JHJlcG9ydENhcmRbJ2Fzc2Vzc21lbnQnXSA9IGFycmF5KCk7DQoJCQkvLyBmaXJzdCBsb2FkIHRoZSBwZXIgcHJvZ3JhbQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwZXJbJ3Byb2dyYW0nXVsnY3JlZGl0J10pKQ0KCQkJew0KCQkJCWZvcmVhY2goc2VsZjo6JHBlclsncHJvZ3JhbSddWydjcmVkaXQnXSBhcyAkZXZlbnRfbmFtZSA9PiAkX2Fzc2Vzc21lbnRzKQ0KCQkJCXsNCgkJCQkJJGFkZENyZWRpdCA9IGZhbHNlOw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRhc3Nlc3NtZW50c091dHN0YW5kaW5nWyRldmVudF9uYW1lXSkpDQoJCQkJCXsNCgkJCQkJCSRhZGRDcmVkaXQgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkX2Fzc2Vzc21lbnRzKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCgkX2Fzc2Vzc21lbnRzIGFzICRhc3Nlc3NtZW50X25hbWUgPT4gJGNyZWRpdHMpDQoJCQkJCQl7DQoJCQkJCQkJJHJvdyA9IGFycmF5KCk7DQoJCQkJCQkJJHJvd1tdID0gJGFzc2Vzc21lbnRfbmFtZTsNCgkJCQkJCQkkcm93W10gPSBhcnJheV9zdW0oc2VsZjo6JHBlclsncHJvZ3JhbUF2YWlsYWJsZSddWydjcmVkaXQnXVskZXZlbnRfbmFtZV1bJGFzc2Vzc21lbnRfbmFtZV0pOw0KCQkJCQkJCWlmICgkYWRkQ3JlZGl0KQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHJvd1tdID0gYXJyYXlfc3VtKCRjcmVkaXRzKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHJvd1tdID0gVGV4dDo6XygncGVuZGluZycpOw0KCQkJCQkJCX0NCgkJCQkJCQkvLyBsb2FkIHRoZSByb3cNCgkJCQkJCQlzZWxmOjokcmVwb3J0Q2FyZFsnYXNzZXNzbWVudCddWyRldmVudF9uYW1lXVtdID0gJzx0ZCAnLiRzdHlsZU5hbWUuJz4nLmltcGxvZGUoJzwvdGQ+PHRkICcuJHN0eWxlLic+Jywkcm93KS4nPC90ZD4nOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gbG9hZCB0aGUgcGVyIGNvdXJzZQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwZXJbJ2NvdXJzZSddWydjcmVkaXQnXSkpDQoJCQl7DQoJCQkJZm9yZWFjaChzZWxmOjokcGVyWydjb3Vyc2UnXVsnY3JlZGl0J10gYXMgJGV2ZW50X25hbWUgPT4gJGNvdXJzZXMpDQoJCQkJew0KCQkJCQkkYWRkQ3JlZGl0ID0gZmFsc2U7DQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGFzc2Vzc21lbnRzT3V0c3RhbmRpbmdbJGV2ZW50X25hbWVdKSkNCgkJCQkJew0KCQkJCQkJJGFkZENyZWRpdCA9IHRydWU7DQoJCQkJCX0NCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb3Vyc2VzKSkNCgkJCQkJew0KCQkJCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJCQlmb3JlYWNoKCRjb3Vyc2VzIGFzICRjb3Vyc2VfbmFtZSA9PiAkX2Fzc2Vzc21lbnRzKQ0KCQkJCQkJew0KCQkJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkX2Fzc2Vzc21lbnRzKSkNCgkJCQkJCQl7DQoJCQkJCQkJCWZvcmVhY2goJF9hc3Nlc3NtZW50cyBhcyAkYXNzZXNzbWVudF9uYW1lID0+ICRjcmVkaXRzKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkcm93ID0gYXJyYXkoKTsNCgkJCQkJCQkJCSRyb3dbXSA9ICRjb3Vyc2VfbmFtZSAuICcgLSAnIC4kYXNzZXNzbWVudF9uYW1lOw0KCQkJCQkJCQkJJHJvd1tdID0gYXJyYXlfc3VtKHNlbGY6OiRwZXJbJ2NvdXJzZUF2YWlsYWJsZSddWydjcmVkaXQnXVskZXZlbnRfbmFtZV1bJGNvdXJzZV9uYW1lXVskYXNzZXNzbWVudF9uYW1lXSk7DQoJCQkJCQkJCQlpZiAoJGFkZENyZWRpdCkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkcm93W10gPSBhcnJheV9zdW0oJGNyZWRpdHMpOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJZWxzZQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCSRyb3dbXSA9IFRleHQ6Ol8oJ3BlbmRpbmcnKTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCS8vIGxvYWQgdGhlIHJvdw0KCQkJCQkJCQkJJGJ1Y2tldFskYXNzZXNzbWVudF9uYW1lXVtdID0gJzx0ZCAnLiRzdHlsZU5hbWUuJz4nLmltcGxvZGUoJzwvdGQ+PHRkICcuJHN0eWxlLic+Jywkcm93KS4nPC90ZD4nOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJCQkJew0KCQkJCQkJCS8vIGxvYWQgYXNzZXNzbWVudCB0eXBlcyB0b2dldGhlcg0KCQkJCQkJCWZvcmVhY2ggKCRidWNrZXQgYXMgJGFzc2VtZW50X25hbWUgPT4gJHJvd3MpDQoJCQkJCQkJew0KCQkJCQkJCQlmb3JlYWNoICgkcm93cyBhcyAkcm93KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlzZWxmOjokcmVwb3J0Q2FyZFsnYXNzZXNzbWVudCddWyRldmVudF9uYW1lXVtdID0gJHJvdzsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIGxvYWQgdGhlIHBlciBhc3Nlc3NtZW50DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBlclsnYXNzZXNzbWVudCddWydjcmVkaXQnXSkpDQoJCQl7DQoJCQkJZm9yZWFjaChzZWxmOjokcGVyWydhc3Nlc3NtZW50J11bJ2NyZWRpdCddIGFzICRldmVudF9uYW1lID0+ICRjb3Vyc2VzKQ0KCQkJCXsNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb3Vyc2VzKSkNCgkJCQkJew0KCQkJCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJCQlmb3JlYWNoKCRjb3Vyc2VzIGFzICRjb3Vyc2VfbmFtZSA9PiAkX2Fzc2Vzc21lbnRzKQ0KCQkJCQkJew0KCQkJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkX2Fzc2Vzc21lbnRzKSkNCgkJCQkJCQl7DQoJCQkJCQkJCWZvcmVhY2goJF9hc3Nlc3NtZW50cyBhcyAkYXNzZXNzbWVudF9uYW1lID0+ICRjcmVkaXRzKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNyZWRpdHMpKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCWZvcmVhY2goJGNyZWRpdHMgYXMgJGtleSA9PiAkY3JlZGl0KQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJJHJvdyA9IGFycmF5KCk7DQoJCQkJCQkJCQkJCSRyb3dbXSA9ICRjb3Vyc2VfbmFtZSAuICcgLSAnIC4kYXNzZXNzbWVudF9uYW1lOw0KCQkJCQkJCQkJCQkkcm93W10gPSBzZWxmOjokcGVyWydhc3Nlc3NtZW50QXZhaWxhYmxlJ11bJ2NyZWRpdCddWyRldmVudF9uYW1lXVskY291cnNlX25hbWVdWyRhc3Nlc3NtZW50X25hbWVdWyRrZXldOw0KCQkJCQkJCQkJCQkkcm93W10gPSAkY3JlZGl0Ow0KCQkJCQkJCQkJCQkvLyBsb2FkIHRoZSByb3cNCgkJCQkJCQkJCQkJJGJ1Y2tldFskYXNzZXNzbWVudF9uYW1lXVtdID0gJzx0ZCAnLiRzdHlsZU5hbWUuJz4nLmltcGxvZGUoJzwvdGQ+PHRkICcuJHN0eWxlLic+Jywkcm93KS4nPC90ZD4nOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVja2V0KSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBsb2FkIGFzc2Vzc21lbnQgdHlwZXMgdG9nZXRoZXINCgkJCQkJCQlmb3JlYWNoICgkYnVja2V0IGFzICRhc3NlbWVudF9uYW1lID0+ICRyb3dzKQ0KCQkJCQkJCXsNCgkJCQkJCQkJZm9yZWFjaCAoJHJvd3MgYXMgJHJvdykNCgkJCQkJCQkJew0KCQkJCQkJCQkJc2VsZjo6JHJlcG9ydENhcmRbJ2Fzc2Vzc21lbnQnXVskZXZlbnRfbmFtZV1bXSA9ICRyb3c7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWRQZXJNb2R1bGUoJHR5cGUsICRldmVudF9uYW1lLCAkbW9kdWxlX25hbWUpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JHBlclsnbW9kdWxlJy4kdHlwZV1bJ3BlcmNlbnRhZ2UnXVskZXZlbnRfbmFtZV1bJG1vZHVsZV9uYW1lXSkpDQoJCXsNCgkJCSRidWNrZXQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoc2VsZjo6JHBlclsnbW9kdWxlJy4kdHlwZV1bJ3BlcmNlbnRhZ2UnXVskZXZlbnRfbmFtZV1bJG1vZHVsZV9uYW1lXSBhcyAkbmFtZSA9PiAkdmFsdWUpDQoJCQl7DQoJCQkJJGJ1Y2tldFtdID0gJG5hbWUgLiAnOiAnIC4gJHZhbHVlIC4gJyUnOw0KCQkJfQ0KCQkJcmV0dXJuIGltcGxvZGUoJzxiciAvPicsICRidWNrZXQpOw0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXREZWZhdWx0c1BlckV2ZW50KCkNCgl7DQoJCS8vIHRoZSBtb2R1bGUgY3JlZGl0IHN5c3RlbSB0YWJsZXMNCgkJaWYgKGlzc2V0KHNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJ3BvaW50J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJ3BvaW50J10pKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgcGVyY2VudGFnZSBhbmQgY3JlZGl0DQoJCQlzZWxmOjptb2R1bGVCdWlsZGVyKCk7DQoJCX0NCgkJaWYgKGlzc2V0KHNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJ2NyZWRpdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdG90YWxbJ21vZHVsZSddWydjcmVkaXQnXSkpDQoJCXsNCgkJCS8vIGJ1aWxkIHRoZSBwbGFjZSBob2xkZXIgY3JlZGl0IGluZm8NCgkJCWZvcmVhY2ggKHNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJ2NyZWRpdCddIGFzICRldmVudF9uYW1lID0+ICR2YWx1ZXMpDQoJCQl7DQoJCQkJJGNyZWRpdF9pbnQgPSBhcnJheV9zdW0oJHZhbHVlcyk7DQoJCQkJJGNyZWRpdF9yZWNlaXZlZCA9IHNlbGY6OmRpc3BsYXlDcmVkaXQoJGV2ZW50X25hbWUsICRjcmVkaXRfaW50KTsNCgkJCQkkY3JlZGl0X2F2YWlsYWJsZSA9IDA7DQoJCQkJaWYgKGlzc2V0KHNlbGY6OiR0b3RhbFsnbW9kdWxlQXZhaWxhYmxlJ11bJ2NyZWRpdCddWyRldmVudF9uYW1lXSkpDQoJCQkJew0KCQkJCQkkY3JlZGl0X2F2YWlsYWJsZSA9IGFycmF5X3N1bShzZWxmOjokdG90YWxbJ21vZHVsZUF2YWlsYWJsZSddWydjcmVkaXQnXVskZXZlbnRfbmFtZV0pOw0KCQkJCX0NCgkJCQkkcGFzc19zdGF0dXMgPSBzZWxmOjpwYXNzU3RhdHVzKCRldmVudF9uYW1lLCAkY3JlZGl0X2ludCk7DQoJCQkJLy8gc2V0IHNvbWUgZmluYWwgZXZlbnQgZGV0YWlscw0KCQkJCXNlbGY6OiRldmVudERldGFpbHNbJGV2ZW50X25hbWVdWydbY3JlZGl0X3JlY2VpdmVkXSddID0gJGNyZWRpdF9yZWNlaXZlZDsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW2NyZWRpdF9hdmFpbGFibGVdJ10gPSAkY3JlZGl0X2F2YWlsYWJsZTsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW3Bhc3Nfc3RhdHVzXSddID0gJHBhc3Nfc3RhdHVzOw0KCQkJfQ0KCQl9DQoJCS8vIHRoZSBhc3Nlc3NtZW50IGNyZWRpdCBzeXN0ZW0gdGFibGVzDQoJCWlmIChpc3NldChzZWxmOjokdG90YWxbJ2Fzc2Vzc21lbnQnXVsnY3JlZGl0J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR0b3RhbFsnYXNzZXNzbWVudCddWydjcmVkaXQnXSkpDQoJCXsNCgkJCS8vIGJ1aWxkIHRoZSBwbGFjZSBob2xkZXIgY3JlZGl0IGluZm8NCgkJCWZvcmVhY2ggKHNlbGY6OiR0b3RhbFsnYXNzZXNzbWVudCddWydjcmVkaXQnXSBhcyAkZXZlbnRfbmFtZSA9PiAkdmFsdWVzKQ0KCQkJew0KCQkJCSRjcmVkaXRfaW50ID0gYXJyYXlfc3VtKCR2YWx1ZXMpOw0KCQkJCSRjcmVkaXRfcmVjZWl2ZWQgPSBzZWxmOjpkaXNwbGF5Q3JlZGl0KCRldmVudF9uYW1lLCAkY3JlZGl0X2ludCk7DQoJCQkJJGNyZWRpdF9hdmFpbGFibGUgPSAwOw0KCQkJCWlmIChpc3NldChzZWxmOjokdG90YWxbJ2Fzc2Vzc21lbnRBdmFpbGFibGUnXVsnY3JlZGl0J11bJGV2ZW50X25hbWVdKSkNCgkJCQl7DQoJCQkJCSRjcmVkaXRfYXZhaWxhYmxlID0gYXJyYXlfc3VtKHNlbGY6OiR0b3RhbFsnYXNzZXNzbWVudEF2YWlsYWJsZSddWydjcmVkaXQnXVskZXZlbnRfbmFtZV0pOw0KCQkJCX0NCgkJCQkkcGFzc19zdGF0dXMgPSBzZWxmOjpwYXNzU3RhdHVzKCRldmVudF9uYW1lLCAkY3JlZGl0X2ludCk7DQoJCQkJLy8gc2V0IHNvbWUgZmluYWwgZXZlbnQgZGV0YWlscw0KCQkJCXNlbGY6OiRldmVudERldGFpbHNbJGV2ZW50X25hbWVdWydbY3JlZGl0X3JlY2VpdmVkXSddID0gJGNyZWRpdF9yZWNlaXZlZDsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW2NyZWRpdF9hdmFpbGFibGVdJ10gPSAkY3JlZGl0X2F2YWlsYWJsZTsNCgkJCQlzZWxmOjokZXZlbnREZXRhaWxzWyRldmVudF9uYW1lXVsnW3Bhc3Nfc3RhdHVzXSddID0gJHBhc3Nfc3RhdHVzOw0KCQkJfQ0KCQl9CQkNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWRpdGVtKCYkaWQpDQoJew0KCQkvLyBmaW5kIHRoZSBhc3Nlc3NtZW50IGlmIGl0IGhhcyBiZWVuIGRvbmUNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRyZXBvcnRDYXJkSXRlbXMpKQ0KCQl7DQoJCQlmb3JlYWNoIChzZWxmOjokcmVwb3J0Q2FyZEl0ZW1zIGFzICRpdGVtKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkaXRlbS0+aWQpICYmICRpdGVtLT5pZCA9PSAkaWQpDQoJCQkJew0KCQkJCQlyZXR1cm4gJGl0ZW07DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFBvaW50TW9kdWxlT2ZBc3Nlc3NtZW50KCRpZCkNCgl7DQoJCSRkYgk9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkJPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdChhcnJheSgnYS5wb2ludCcsICdhLmF2YWlsYWJsZV9wb2ludCcsICdhLm1vZHVsZScsICdhLnF1ZXN0aW9uJywgJ20ubmFtZScsICdtLnBhc3NfY3JlZGl0JywgJ20ucGFzc19wZXJjZW50YWdlJywgJ2IucmV2aWV3ZWQnKSk7IC8vIG5vdCBzdXJlIGlmIG5hbWUgaXMgdGhlIGJlc3QNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fYXNzZXNzbWVudF92YWx1ZScsICdhJykpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX21vZHVsZScsICdtJykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EubW9kdWxlJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdtLmlkJykgLiAnKScpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2Fzc2Vzc21lbnQnLCAnYicpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmFzc2Vzc21lbnQnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2IuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EuYXNzZXNzbWVudCA9ICcuIChpbnQpICRpZCk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJGFuc3dlcnMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkvLyB3ZSBtdXN0IGNoZWNrIGlmIGFsbCBtb2R1bGUgdmFsdWVzIGFyZSBzZXQNCgkJCWZvcmVhY2ggKCRhbnN3ZXJzIGFzICRuciA9PiAmJGFuc3dlcikNCgkJCXsNCgkJCQkvLyBGSVggZm9yIG9sZCBhc3Nlc3NtZW50IHJlc3VsdHMgdGhhdCBkb2VzIG5vdCBoYXZlIG1vZHVsZSBhbmQgYXZhaWxhYmxlIHBvaW50IHNldCAobm90IGlkZWFsKQ0KCQkJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGFuc3dlci0+bmFtZSkgfHwgMCA9PSAkYW5zd2VyLT5hdmFpbGFibGVfcG9pbnQpDQoJCQkJew0KCQkJCQkvLyBmaW5kIHRoZSBuZWVkZWQgbW9kdWxlIG5hbWUNCgkJCQkJJHF1ZXJ5CT0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCQkJJHF1ZXJ5LT5zZWxlY3QoDQoJCQkJCQlhcnJheSgNCgkJCQkJCQknYS5pZCcsICdtLm5hbWUnLCAnbS5wYXNzX2NyZWRpdCcsICdtLnBhc3NfcGVyY2VudGFnZScsICdhLmFuc3dlcl90eXBlJywgJ2Euc2VsZWN0aW9udHlwZScsICdhLnRleHRfbWFya190eXBlJywNCgkJCQkJCQknYS55ZXNub19wb2ludCcsICdhLmxpc3RfcG9pbnQnLCAnYS5jb21wbGV0aW9uX3BvaW50JywgJ2Euc2VsZWN0aW9uJywgJ2Eua2V5X3dvcmRzJywNCgkJCQkJCQknYS5rZXlfd29yZHNfcG9pbnQnLCAnYS53b3JkX2NvdW50X3BvaW50Jw0KCQkJCQkJKSk7DQoJCQkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3F1ZXN0aW9uJywgJ2EnKSk7DQoJCQkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbW9kdWxlJywgJ20nKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5tb2R1bGUnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ20uaWQnKSAuICcpJyk7DQoJCQkJCSRxdWVyeS0+d2hlcmUoJ2EucXVlc3Rpb24gPSAnLiAkZGItPnF1b3RlKCRhbnN3ZXItPnF1ZXN0aW9uKSk7DQoJCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQkJew0KCQkJCQkJJHF1ZXN0aW9uID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJCQkvLyBpbnN1cmUgd2UgaGF2ZSB0aGUgbW9kdWxlIG5hbWUNCgkJCQkJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHF1ZXN0aW9uLT5uYW1lKSkNCgkJCQkJCXsNCgkJCQkJCQl1bnNldCgkYW5zd2Vyc1skbnJdKTsgLy8gcmVtb3ZlIHRoaXMgc2luY2Ugd2UgY2FuJ3QgcmVzb2x2ZSB0aGUgbW9kdWxlDQoJCQkJCQkJY29udGludWU7DQoJCQkJCQl9DQoJCQkJCQkvLyBsb2FkIHRoZSBhdmFpbGFibGUgcG9pbnQgaWYgbm90IHNldA0KCQkJCQkJaWYgKDAgPT0gJGFuc3dlci0+YXZhaWxhYmxlX3BvaW50KQ0KCQkJCQkJew0KCQkJCQkJCSRxdWVzdGlvbi0+YXZhaWxhYmxlX3BvaW50ID0gc2VsZjo6Z2V0QXZhaWxhYmxlUG9pbnQoJHF1ZXN0aW9uKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCXVuc2V0KCRhbnN3ZXJzWyRucl0pOyAvLyByZW1vdmUgdGhpcyBzaW5jZSB3ZSBjYW4ndCByZXNvbHZlIHRoZSBtb2R1bGUNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoJCQkJCS8vIGxvYWQgdGhlIG1vZHVsZSBuYW1lIGlmIG5vdCBzZXQNCgkJCQkJaWYgKCFTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkYW5zd2VyLT5uYW1lKSkNCgkJCQkJew0KCQkJCQkJJGFuc3dlci0+bmFtZSA9ICRxdWVzdGlvbi0+bmFtZTsNCgkJCQkJCSRhbnN3ZXItPnBhc3NfY3JlZGl0ID0gJHF1ZXN0aW9uLT5wYXNzX2NyZWRpdDsNCgkJCQkJCSRhbnN3ZXItPnBhc3NfcGVyY2VudGFnZSA9ICRxdWVzdGlvbi0+cGFzc19wZXJjZW50YWdlOw0KCQkJCQl9DQoJCQkJCS8vIGxvYWQgdGhlIGF2YWlsYWJsZSBwb2ludCBpZiBub3Qgc2V0DQoJCQkJCWlmICgwID09ICRhbnN3ZXItPmF2YWlsYWJsZV9wb2ludCkNCgkJCQkJew0KCQkJCQkJJGFuc3dlci0+YXZhaWxhYmxlX3BvaW50ID0gJHF1ZXN0aW9uLT5hdmFpbGFibGVfcG9pbnQ7DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gcmVtb3ZlIHVubmVlZGVkIHZhbHVlcw0KCQkJCXVuc2V0KCRhbnN3ZXItPm1vZHVsZSk7DQoJCQkJdW5zZXQoJGFuc3dlci0+cXVlc3Rpb24pOw0KCQkJfQ0KCQkJcmV0dXJuICRhbnN3ZXJzOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEFzc2Vzc21lbnRSZXBvcnRWYWx1ZSgkaWQsICR0eXBlID0gJ2NyZWRpdCcpDQoJew0KCQkvLyBmaW5kIHRoZSBhc3Nlc3NtZW50IGlmIGl0IGhhcyBiZWVuIGRvbmUNCgkJaWYgKCRpdGVtID0gc2VsZjo6bG9hZGl0ZW0oJGlkKSkNCgkJew0KCQkJaWYgKCRpdGVtLT5yZXZpZXdlZCA9PSAxICYmICdjcmVkaXQnID09ICR0eXBlKQ0KCQkJew0KCQkJCS8vIG5vdyBkbyBjYWxjdWxhdGlvbg0KCQkJCWlmICgkaXRlbS0+YXNzZXNzbWVudF90eXBlX3Bhc3NfdHlwZSA9PSAxICYmIGlzc2V0KCRpdGVtLT5wb2ludCkgJiYgJGl0ZW0tPnBvaW50ID4gMCkNCgkJCQl7DQoJCQkJCS8vIHBlcmNlbnRhZ2UNCgkJCQkJJHBlcmNlbnQgPSBiY211bChiY2RpdigkaXRlbS0+cG9pbnQsICRpdGVtLT5hc3Nlc3NtZW50X3R5cGVfdG90YWxfcG9pbnRzKSwgMTAwKTsNCgkJCQkJaWYgKCRwZXJjZW50ID49ICRpdGVtLT5hc3Nlc3NtZW50X3R5cGVfcGFzc19wZXJjZW50YWdlKQ0KCQkJCQl7DQoJCQkJCQkvLyByZXR1cm4gcGFzcyBjcmVkaXQNCgkJCQkJCXJldHVybiAkaXRlbS0+YXNzZXNzbWVudF90eXBlX3Bhc3NfY3JlZGl0Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJGl0ZW0tPmFzc2Vzc21lbnRfdHlwZV9wYXNzX3R5cGUgPT0gMikNCgkJCQl7DQoJCQkJCS8vIGNvbXBsZXRpb24gKGp1c3QgcmV0dXJuIHRoZSBwYXNzIGNyZWRpdCkNCgkJCQkJcmV0dXJuICRpdGVtLT5hc3Nlc3NtZW50X3R5cGVfcGFzc19jcmVkaXQ7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmICgkaXRlbS0+cmV2aWV3ZWQgPT0gMSAmJiAncGVyY2VudGFnZScgPT0gJHR5cGUpDQoJCQl7DQoJCQkJLy8gbm93IGRvIGNhbGN1bGF0aW9uDQoJCQkJaWYgKCRpdGVtLT5hc3Nlc3NtZW50X3R5cGVfcGFzc190eXBlID09IDEgJiYgaXNzZXQoJGl0ZW0tPnBvaW50KSAmJiAkaXRlbS0+cG9pbnQgPiAwKQ0KCQkJCXsNCgkJCQkJLy8gcGVyY2VudGFnZQ0KCQkJCQlyZXR1cm4gYmNtdWwoYmNkaXYoJGl0ZW0tPnBvaW50LCAkaXRlbS0+YXNzZXNzbWVudF90eXBlX3RvdGFsX3BvaW50cywgNSksIDEwMCk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJGl0ZW0tPmFzc2Vzc21lbnRfdHlwZV9wYXNzX3R5cGUgPT0gMikNCgkJCQl7DQoJCQkJCS8vIGNvbXBsZXRpb24gKGp1c3QgcmV0dXJuIDEwMCUpDQoJCQkJCXJldHVybiAxMDA7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiAnbm90LWZvdW5kJzsNCgl9DQoNCgkvKioNCgkqIAlJcyBBbGwgVG90YWxzIEFycmF5DQoJKiovDQoJcHVibGljIHN0YXRpYyAkdG90YWwgPSBhcnJheSgNCgkJJ2Fzc2Vzc21lbnQnID0+IGFycmF5KCdjcmVkaXQnID0+IGFycmF5KCksICdwZXJjZW50YWdlJyA9PiBhcnJheSgpKSwNCgkJJ2Fzc2Vzc21lbnRBdmFpbGFibGUnID0+IGFycmF5KCdjcmVkaXQnID0+IGFycmF5KCksICdwZXJjZW50YWdlJyA9PiBhcnJheSgpKSwNCgkJJ21vZHVsZScgPT4gYXJyYXkoJ2NyZWRpdCcgPT4gYXJyYXkoKSwgJ3BlcmNlbnRhZ2UnID0+IGFycmF5KCksICdwb2ludCcgPT4gYXJyYXkoKSksDQoJCSdtb2R1bGVBdmFpbGFibGUnID0+IGFycmF5KCdjcmVkaXQnID0+IGFycmF5KCksICdwb2ludCcgPT4gYXJyYXkoKSkNCgkJKTsNCg0KCS8qKg0KCSogCUlzIHBlciBBcnJheQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHBlciA9IGFycmF5KA0KCQkvLyBhc3Nlc3NtZW50IGNyZWRpdCBzeXN0ZW0NCgkJJ2Fzc2Vzc21lbnQnID0+IGFycmF5KCdjcmVkaXQnID0+IGFycmF5KCksICdwZXJjZW50YWdlJyA9PiBhcnJheSgpKSwNCgkJJ2Fzc2Vzc21lbnRBdmFpbGFibGUnID0+IGFycmF5KCdjcmVkaXQnID0+IGFycmF5KCksICdwZXJjZW50YWdlJyA9PiBhcnJheSgpKSwNCgkJJ2NvdXJzZScgPT4gYXJyYXkoJ2NyZWRpdCcgPT4gYXJyYXkoKSwgJ3BlcmNlbnRhZ2UnID0+IGFycmF5KCkpLA0KCQknY291cnNlQXZhaWxhYmxlJyA9PiBhcnJheSgnY3JlZGl0JyA9PiBhcnJheSgpLCAncGVyY2VudGFnZScgPT4gYXJyYXkoKSksDQoJCSdwcm9ncmFtJyA9PiBhcnJheSgnY3JlZGl0JyA9PiBhcnJheSgpLCAncGVyY2VudGFnZScgPT4gYXJyYXkoKSksDQoJCSdwcm9ncmFtQXZhaWxhYmxlJyA9PiBhcnJheSgnY3JlZGl0JyA9PiBhcnJheSgpLCAncGVyY2VudGFnZScgPT4gYXJyYXkoKSksDQoJCS8vIG1vZHVsZSBjcmVkaXQgc3lzdGVtDQoJCSdtb2R1bGVBc3Nlc3NtZW50JyA9PiBhcnJheSgncGVyY2VudGFnZScgPT4gYXJyYXkoKSwgJ3BvaW50JyA9PiBhcnJheSgpKSwNCgkJJ21vZHVsZUFzc2Vzc21lbnRBdmFpbGFibGUnID0+IGFycmF5KCdwb2ludCcgPT4gYXJyYXkoKSksDQoJCSdtb2R1bGVDb3Vyc2UnID0+IGFycmF5KCdwZXJjZW50YWdlJyA9PiBhcnJheSgpLCAncG9pbnQnID0+IGFycmF5KCkpLA0KCQknbW9kdWxlQ291cnNlQXZhaWxhYmxlJyA9PiBhcnJheSgncG9pbnQnID0+IGFycmF5KCkpLA0KCQknbW9kdWxlUHJvZ3JhbScgPT4gYXJyYXkoJ2NyZWRpdCcgPT4gYXJyYXkoKSwgJ3BlcmNlbnRhZ2UnID0+IGFycmF5KCksICdwb2ludCcgPT4gYXJyYXkoKSksDQoJCSdtb2R1bGVQcm9ncmFtQXZhaWxhYmxlJyA9PiBhcnJheSgnY3JlZGl0JyA9PiBhcnJheSgpLCAncG9pbnQnID0+IGFycmF5KCkpDQoJCSk7DQoNCgkvKioNCgkqIAl0aGUgcGFzcyBjcmVkaXQgYW5kIHBhc3MgcGVyY2VudGFnZSBmb3IgbW9kdWxlcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhc3NTZXR0aW5nc01vZHVsZSA9IGFycmF5KCk7DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFkZFRvUmVwb3J0KCYkdmFsdWVzLCAmJGV2ZW50X25hbWUsICYkY291cnNlX25hbWUsICYkYXNzZXNzbWVudF9uYW1lKQ0KCXsNCgkJLy8gdXNlIEFzc2Vzc21lbnQgQ3JlZGl0IFN5c3RlbQ0KCQlpZiAoJHZhbHVlcy0+cHJvZ3JhbV9jcmVkaXRfc3lzdGVtID09IDEpDQoJCXsNCgkJCWlmICghc2VsZjo6YWRkVG9Bc3Nlc3NtZW50UmVwb3J0KCR2YWx1ZXMsICRldmVudF9uYW1lLCAkY291cnNlX25hbWUsICRhc3Nlc3NtZW50X25hbWUpKQ0KCQkJew0KCQkJCS8vIHNldCB0aGUgYXNzZXNzbWVudCBub3RpY2UgKGNoZWNrIGlmIGFsbCBhc3Nlc3NtZW50cyBhcmUgc3VibWl0dGVkKQ0KCQkJCXNlbGY6OnNldEFzc2Vzc21lbnRzT3V0c3RhbmRpbmcoJHZhbHVlcywgJGV2ZW50X25hbWUsIHRydWUpOw0KCQkJfQ0KCQl9DQoJCS8vIHVzZSBNb2R1bGUgQ3JlZGl0IFN5c3RlbQ0KCQllbHNlaWYgKCR2YWx1ZXMtPnByb2dyYW1fY3JlZGl0X3N5c3RlbSA9PSAyKQ0KCQl7DQoJCQlpZiAoIXNlbGY6OmFkZFRvTW9kdWxlUmVwb3J0KCR2YWx1ZXMsICRldmVudF9uYW1lLCAkY291cnNlX25hbWUsICRhc3Nlc3NtZW50X25hbWUpKQ0KCQkJew0KCQkJCS8vIHNldCB0aGUgYXNzZXNzbWVudCBub3RpY2UgKGNoZWNrIGlmIGFsbCBhc3Nlc3NtZW50cyBhcmUgc3VibWl0dGVkKQ0KCQkJCXNlbGY6OnNldEFzc2Vzc21lbnRzT3V0c3RhbmRpbmcoJHZhbHVlcywgJGV2ZW50X25hbWUsIHRydWUpOw0KCQkJfQkNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWRkVG9Nb2R1bGVSZXBvcnQoJiR2YWx1ZXMsICYkZXZlbnRfbmFtZSwgJiRjb3Vyc2VfbmFtZSwgJiRhc3Nlc3NtZW50X25hbWUpDQoJew0KCQlpZiAoJHZhbHVlcy0+c3VibWlzc2lvbikNCgkJew0KCQkJLy8gZ2V0IHRoZSBwb2ludHMgYW5kIG1vZHVsZXMgb25mIHRoaXMgYXNzZXNzbWVudA0KCQkJaWYgKCRpdGVtcyA9IHNlbGY6OmdldFBvaW50TW9kdWxlT2ZBc3Nlc3NtZW50KCR2YWx1ZXMtPnN1Ym1pc3Npb24pKQ0KCQkJew0KCQkJCSR0eXBlID0gJ3BvaW50JzsNCgkJCQlmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pDQoJCQkJew0KCQkJCQlpZiAoJGl0ZW0tPnJldmlld2VkID09IDEpDQoJCQkJCXsNCgkJCQkJCS8vIHBlciBwcm9ncmFtL21vZHVsZQ0KCQkJCQkJc2VsZjo6JHBlclsnbW9kdWxlUHJvZ3JhbSddWyR0eXBlXVskZXZlbnRfbmFtZV1bJGl0ZW0tPm5hbWVdW10gPSAkaXRlbS0+cG9pbnQ7DQoJCQkJCQlzZWxmOjokcGVyWydtb2R1bGVQcm9ncmFtQXZhaWxhYmxlJ11bJHR5cGVdWyRldmVudF9uYW1lXVskaXRlbS0+bmFtZV1bXSA9ICRpdGVtLT5hdmFpbGFibGVfcG9pbnQ7DQoJCQkJCQkvLyBwZXIgY291cnNlDQoJCQkJCQlzZWxmOjokcGVyWydtb2R1bGVDb3Vyc2UnXVskdHlwZV1bJGV2ZW50X25hbWVdWyRpdGVtLT5uYW1lXVskY291cnNlX25hbWVdW10gPSAkaXRlbS0+cG9pbnQ7DQoJCQkJCQlzZWxmOjokcGVyWydtb2R1bGVDb3Vyc2VBdmFpbGFibGUnXVskdHlwZV1bJGV2ZW50X25hbWVdWyRpdGVtLT5uYW1lXVskY291cnNlX25hbWVdW10gPSAkaXRlbS0+YXZhaWxhYmxlX3BvaW50Ow0KCQkJCQkJLy8gcGVyIGFzc2Vzc21lbnQNCgkJCQkJCXNlbGY6OiRwZXJbJ21vZHVsZUFzc2Vzc21lbnQnXVskdHlwZV1bJGV2ZW50X25hbWVdWyRpdGVtLT5uYW1lXVskYXNzZXNzbWVudF9uYW1lXVtdID0gJGl0ZW0tPnBvaW50Ow0KCQkJCQkJc2VsZjo6JHBlclsnbW9kdWxlQXNzZXNzbWVudEF2YWlsYWJsZSddWyR0eXBlXVskZXZlbnRfbmFtZV1bJGl0ZW0tPm5hbWVdWyRhc3Nlc3NtZW50X25hbWVdW10gPSAkaXRlbS0+YXZhaWxhYmxlX3BvaW50Ow0KCQkJCQkJLy8gbm93IGFkZCB0byB0b3RhbHMNCgkJCQkJCXNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJHR5cGVdWyRldmVudF9uYW1lXVtdID0gJGl0ZW0tPnBvaW50Ow0KCQkJCQkJc2VsZjo6JHRvdGFsWydtb2R1bGVBdmFpbGFibGUnXVskdHlwZV1bJGV2ZW50X25hbWVdW10gPSAkaXRlbS0+YXZhaWxhYmxlX3BvaW50Ow0KCQkJCQkJLy8gc2V0IHBhc3Mgc2V0dGluZ3MgZm9yIHRoZSBtb2R1bGUgZ2xvYmFsbHkNCgkJCQkJCWlmICghaXNzZXQoc2VsZjo6JHBhc3NTZXR0aW5nc01vZHVsZVskaXRlbS0+bmFtZV0pKQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRwYXNzU2V0dGluZ3NNb2R1bGVbJGl0ZW0tPm5hbWVdWydwYXNzX2NyZWRpdCddID0gKGludCkgJGl0ZW0tPnBhc3NfY3JlZGl0Ow0KCQkJCQkJCXNlbGY6OiRwYXNzU2V0dGluZ3NNb2R1bGVbJGl0ZW0tPm5hbWVdWydwYXNzX3BlcmNlbnRhZ2UnXSA9IChpbnQpICRpdGVtLT5wYXNzX3BlcmNlbnRhZ2U7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCW1vZHVsZSBidWlsZGVyIGFycmF5DQoJKiovDQoJcHVibGljIHN0YXRpYyAkbW9kdWxlQnVpbGRlciA9IGFycmF5KA0KCQknbW9kdWxlQXNzZXNzbWVudCcgPT4gMywNCgkJJ21vZHVsZUNvdXJzZScgPT4gMywNCgkJJ21vZHVsZVByb2dyYW0nID0+IDINCgkJKTsNCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gbW9kdWxlQnVpbGRlcigpDQoJew0KCQkvLyBzZXQgcGVyIHByb2dyYW0NCgkJZm9yZWFjaCAoc2VsZjo6JG1vZHVsZUJ1aWxkZXIgYXMgJHR5cGUgPT4gJGRlcHRoKQ0KCQl7DQoJCQlzZWxmOjpydW5Nb2R1bGVCdWlsZGVyKCR0eXBlLCAkZGVwdGgpOw0KCQl9DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcnVuTW9kdWxlQnVpbGRlcigkdHlwZSwgJGRlcHRoKQ0KCXsNCgkJLy8gc2V0IHBlciBwcm9ncmFtDQoJCWlmIChpc3NldChzZWxmOjokcGVyWyR0eXBlXVsncG9pbnQnXSkgJiYgc2VsZjo6IGNoZWNrQXJyYXkoc2VsZjo6JHBlclskdHlwZV1bJ3BvaW50J10pKQ0KCQl7DQoJCQkvLyBzdW0gYW5kIGNhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZXMNCgkJCWZvcmVhY2ggKHNlbGY6OiRwZXJbJHR5cGVdWydwb2ludCddIGFzICRldmVudCA9PiAgJG1vZHVsZXMpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJG1vZHVsZXMgYXMgJG1vZHVsZSA9PiAkYXJyYXlzKQ0KCQkJCXsNCgkJCQkJaWYgKDMgPT0gJGRlcHRoKQ0KCQkJCQl7DQoJCQkJCQlmb3JlYWNoICgkYXJyYXlzIGFzICRuYW1lID0+ICR2YWx1ZXMpDQoJCQkJCQl7DQoJCQkJCQkJLy8gcmVzZXQgDQoJCQkJCQkJJHBvaW50ID0gMDsNCgkJCQkJCQkkcG9pbnRBdmFpbGFibGUgPSAwOw0KCQkJCQkJCS8vIHNldCB0aGUgcG9pbnQNCgkJCQkJCQkkcG9pbnQgPSBhcnJheV9zdW0oJHZhbHVlcyk7DQoJCQkJCQkJc2VsZjo6JHBlclskdHlwZV1bJ3BvaW50J11bJGV2ZW50XVskbW9kdWxlXVskbmFtZV0gPSAkcG9pbnQ7DQoJCQkJCQkJLy8gc2V0IHRoZSBhdmFsYWJsZSBwb2ludA0KCQkJCQkJCSRwb2ludEF2YWlsYWJsZSA9IGFycmF5X3N1bShzZWxmOjokcGVyWyR0eXBlLidBdmFpbGFibGUnXVsncG9pbnQnXVskZXZlbnRdWyRtb2R1bGVdWyRuYW1lXSk7DQoJCQkJCQkJc2VsZjo6JHBlclskdHlwZS4nQXZhaWxhYmxlJ11bJ3BvaW50J11bJGV2ZW50XVskbW9kdWxlXVskbmFtZV0gPSAkcG9pbnRBdmFpbGFibGU7DQoJCQkJCQkJLy8gc2V0IHBlcmNlbnRhZ2UNCgkJCQkJCQlzZWxmOjokcGVyWyR0eXBlXVsncGVyY2VudGFnZSddWyRldmVudF1bJG1vZHVsZV1bJG5hbWVdID0gYmNtdWwoYmNkaXYoJHBvaW50LCAkcG9pbnRBdmFpbGFibGUsIDUpLCAxMDApOw0KCQkJCQkJCS8vIG5vdyBzZXQgdGhlIGNyZWRpdA0KCQkJCQkJCWlmICgnbW9kdWxlUHJvZ3JhbScgPT0gJHR5cGUgJiYgaXNzZXQoc2VsZjo6JHBhc3NTZXR0aW5nc01vZHVsZVskbW9kdWxlXVsncGFzc19jcmVkaXQnXSkpDQoJCQkJCQkJew0KCQkJCQkJCQkkY3JlZGl0ID0gMDsNCgkJCQkJCQkJJGNyZWRpdEF2YWlsYWJsZSA9IHNlbGY6OiRwYXNzU2V0dGluZ3NNb2R1bGVbJG1vZHVsZV1bJ3Bhc3NfY3JlZGl0J107DQoJCQkJCQkJCWlmICgJaXNzZXQoc2VsZjo6JHBhc3NTZXR0aW5nc01vZHVsZVskbW9kdWxlXVsncGFzc19wZXJjZW50YWdlJ10pICYmIA0KCQkJCQkJCQkJc2VsZjo6JHBlclskdHlwZV1bJ3BlcmNlbnRhZ2UnXVskZXZlbnRdWyRtb2R1bGVdWyRuYW1lXSA+PSBzZWxmOjokcGFzc1NldHRpbmdzTW9kdWxlWyRtb2R1bGVdWydwYXNzX3BlcmNlbnRhZ2UnXSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJGNyZWRpdCA9ICRjcmVkaXRBdmFpbGFibGU7DQoJCQkJCQkJCX0NCgkJCQkJCQkJc2VsZjo6JHBlclskdHlwZV1bJ2NyZWRpdCddWyRldmVudF1bJG1vZHVsZV1bJG5hbWVdID0gJGNyZWRpdDsNCgkJCQkJCQkJc2VsZjo6JHBlclskdHlwZS4nQXZhaWxhYmxlJ11bJ2NyZWRpdCddWyRldmVudF1bJG1vZHVsZV1bJG5hbWVdID0gJGNyZWRpdEF2YWlsYWJsZTsNCgkJCQkJCQkJLy8gbm93IGFkZCB0byB0b3RhbHMNCgkJCQkJCQkJc2VsZjo6JHRvdGFsWydtb2R1bGUnXVsnY3JlZGl0J11bJGV2ZW50XVtdID0gJGNyZWRpdDsNCgkJCQkJCQkJc2VsZjo6JHRvdGFsWydtb2R1bGVBdmFpbGFibGUnXVsnY3JlZGl0J11bJGV2ZW50XVtdID0gJGNyZWRpdEF2YWlsYWJsZTsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gbm93IGFkZCB0byB0b3RhbHMNCgkJCQkJCQlzZWxmOjokdG90YWxbJ21vZHVsZSddWydwZXJjZW50YWdlJ11bJGV2ZW50XVtdID0gc2VsZjo6JHBlclskdHlwZV1bJ3BlcmNlbnRhZ2UnXVskZXZlbnRdWyRtb2R1bGVdWyRuYW1lXTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQllbHNlaWYgKDIgPT0gJGRlcHRoKQ0KCQkJCQl7DQoJCQkJCQkvLyByZXNldCANCgkJCQkJCSRwb2ludCA9IDA7DQoJCQkJCQkkcG9pbnRBdmFpbGFibGUgPSAwOw0KCQkJCQkJLy8gc2V0IHRoZSBwb2ludA0KCQkJCQkJJHBvaW50ID0gYXJyYXlfc3VtKCRhcnJheXMpOw0KCQkJCQkJc2VsZjo6JHBlclskdHlwZV1bJ3BvaW50J11bJGV2ZW50XVskbW9kdWxlXSA9ICRwb2ludDsNCgkJCQkJCS8vIHNldCB0aGUgYXZhbGFibGUgcG9pbnQNCgkJCQkJCSRwb2ludEF2YWlsYWJsZSA9IGFycmF5X3N1bShzZWxmOjokcGVyWyR0eXBlLidBdmFpbGFibGUnXVsncG9pbnQnXVskZXZlbnRdWyRtb2R1bGVdKTsNCgkJCQkJCXNlbGY6OiRwZXJbJHR5cGUuJ0F2YWlsYWJsZSddWydwb2ludCddWyRldmVudF1bJG1vZHVsZV0gPSAkcG9pbnRBdmFpbGFibGU7DQoJCQkJCQkvLyBzZXQgcGVyY2VudGFnZQ0KCQkJCQkJc2VsZjo6JHBlclskdHlwZV1bJ3BlcmNlbnRhZ2UnXVskZXZlbnRdWyRtb2R1bGVdID0gYmNtdWwoYmNkaXYoJHBvaW50LCAkcG9pbnRBdmFpbGFibGUsIDUpLCAxMDApOw0KCQkJCQkJLy8gbm93IHNldCB0aGUgY3JlZGl0DQoJCQkJCQlpZiAoJ21vZHVsZVByb2dyYW0nID09ICR0eXBlICYmIGlzc2V0KHNlbGY6OiRwYXNzU2V0dGluZ3NNb2R1bGVbJG1vZHVsZV1bJ3Bhc3NfY3JlZGl0J10pKQ0KCQkJCQkJew0KCQkJCQkJCSRjcmVkaXQgPSAwOw0KCQkJCQkJCSRjcmVkaXRBdmFpbGFibGUgPSBzZWxmOjokcGFzc1NldHRpbmdzTW9kdWxlWyRtb2R1bGVdWydwYXNzX2NyZWRpdCddOw0KCQkJCQkJCWlmICgJaXNzZXQoc2VsZjo6JHBhc3NTZXR0aW5nc01vZHVsZVskbW9kdWxlXVsncGFzc19wZXJjZW50YWdlJ10pICYmIA0KCQkJCQkJCQlzZWxmOjokcGVyWyR0eXBlXVsncGVyY2VudGFnZSddWyRldmVudF1bJG1vZHVsZV0gPj0gc2VsZjo6JHBhc3NTZXR0aW5nc01vZHVsZVskbW9kdWxlXVsncGFzc19wZXJjZW50YWdlJ10pDQoJCQkJCQkJew0KCQkJCQkJCQkkY3JlZGl0ID0gJGNyZWRpdEF2YWlsYWJsZTsNCgkJCQkJCQl9DQoJCQkJCQkJc2VsZjo6JHBlclskdHlwZV1bJ2NyZWRpdCddWyRldmVudF1bJG1vZHVsZV0gPSAkY3JlZGl0Ow0KCQkJCQkJCXNlbGY6OiRwZXJbJHR5cGUuJ0F2YWlsYWJsZSddWydjcmVkaXQnXVskZXZlbnRdWyRtb2R1bGVdID0gJGNyZWRpdEF2YWlsYWJsZTsNCgkJCQkJCQkvLyBub3cgYWRkIHRvIHRvdGFscw0KCQkJCQkJCXNlbGY6OiR0b3RhbFsnbW9kdWxlJ11bJ2NyZWRpdCddWyRldmVudF1bXSA9ICRjcmVkaXQ7DQoJCQkJCQkJc2VsZjo6JHRvdGFsWydtb2R1bGVBdmFpbGFibGUnXVsnY3JlZGl0J11bJGV2ZW50XVtdID0gJGNyZWRpdEF2YWlsYWJsZTsNCgkJCQkJCX0NCgkJCQkJCS8vIG5vdyBhZGQgdG8gdG90YWxzDQoJCQkJCQlzZWxmOjokdG90YWxbJ21vZHVsZSddWydwZXJjZW50YWdlJ11bJGV2ZW50XVtdID0gc2VsZjo6JHBlclskdHlwZV1bJ3BlcmNlbnRhZ2UnXVskZXZlbnRdWyRtb2R1bGVdOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhZGRUb0Fzc2Vzc21lbnRSZXBvcnQoJiR2YWx1ZXMsICYkZXZlbnRfbmFtZSwgJiRjb3Vyc2VfbmFtZSwgJiRhc3Nlc3NtZW50X25hbWUpDQoJew0KCQkvLyBvbmx5IHVzZSBjcmVkaXQgaWYgcHJvZ3JhbSBhbHNvIHNldCB0byB1c2UgYXNzZXNzbWVudCBjcmVkaXQgc3lzdGVtDQoJCWlmICgkdmFsdWVzLT5hc3Nlc3NtZW50X3R5cGVfYWRkX2NyZWRpdHMgPT0gMSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBjcmVkaXQgdG8gYWRkDQoJCQkkdHlwZSA9ICdjcmVkaXQnOw0KCQkJJHZhbHVlQXZhaWxhYmxlID0gJHZhbHVlcy0+YXNzZXNzbWVudF90eXBlX3Bhc3NfY3JlZGl0Ow0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gZ2V0IHRoZSBwZXJjZW50YWdlIHRvIGFkZA0KCQkJJHR5cGUgPSAncGVyY2VudGFnZSc7DQoJCQkkdmFsdWVBdmFpbGFibGUgPSAxMDA7DQoJCX0NCgkJLy8gc2V0IHRoZSBhdmFpbGFibGUgdmFsdWUgdG8gdGhlIHJlcG9ydCBjYXJkDQoJCWlmICgkdmFsdWVzLT5hc3Nlc3NtZW50X3R5cGVfY29uc29saWRhdGUgPT0gMSkNCgkJew0KCQkJLy8gcGVyIGNvdXJzZQ0KCQkJc2VsZjo6JHBlclsnY291cnNlQXZhaWxhYmxlJ11bJHR5cGVdWyRldmVudF9uYW1lXVskY291cnNlX25hbWVdWyRhc3Nlc3NtZW50X25hbWVdW10gPSAkdmFsdWVBdmFpbGFibGU7DQoJCX0NCgkJZWxzZWlmICgkdmFsdWVzLT5hc3Nlc3NtZW50X3R5cGVfY29uc29saWRhdGUgPT0gMikNCgkJew0KCQkJLy8gcGVyIHByb2dyYW0NCgkJCXNlbGY6OiRwZXJbJ3Byb2dyYW1BdmFpbGFibGUnXVskdHlwZV1bJGV2ZW50X25hbWVdWyRhc3Nlc3NtZW50X25hbWVdW10gPSAkdmFsdWVBdmFpbGFibGU7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkvLyBwZXIgYXNzZXNzbWVudA0KCQkJc2VsZjo6JHBlclsnYXNzZXNzbWVudEF2YWlsYWJsZSddWyR0eXBlXVskZXZlbnRfbmFtZV1bJGNvdXJzZV9uYW1lXVskYXNzZXNzbWVudF9uYW1lXVtdID0gJHZhbHVlQXZhaWxhYmxlOw0KCQl9DQoJCS8vIG5vdyBhZGQgdG8gYXZhaWxhYmxlIHRvdGFscw0KCQlzZWxmOjokdG90YWxbJ2Fzc2Vzc21lbnRBdmFpbGFibGUnXVskdHlwZV1bJGV2ZW50X25hbWVdW10gPSAkdmFsdWVBdmFpbGFibGU7DQoJCS8vIGNoZWNrIGlmIHN1Ym1pc3Npb24gd2VyZSBtYWRlDQoJCWlmICgkdmFsdWVzLT5zdWJtaXNzaW9uKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHZhbHVlcw0KCQkJJHZhbHVlID0gc2VsZjo6Z2V0QXNzZXNzbWVudFJlcG9ydFZhbHVlKCR2YWx1ZXMtPnN1Ym1pc3Npb24sICR0eXBlKTsNCgkJCS8vIG9ubHkgY29udGludWUgaWYgYSB2YWx1ZSBpcyBmb3VuZA0KCQkJaWYgKCdub3QtZm91bmQnICE9ICR2YWx1ZSkNCgkJCXsNCgkJCQkvLyBzZXQgdGhlIHZhbHVlIHRvIHRoZSByZXBvcnQgY2FyZA0KCQkJCWlmICgkdmFsdWVzLT5hc3Nlc3NtZW50X3R5cGVfY29uc29saWRhdGUgPT0gMSkNCgkJCQl7DQoJCQkJCS8vIHBlciBjb3Vyc2UNCgkJCQkJc2VsZjo6JHBlclsnY291cnNlJ11bJHR5cGVdWyRldmVudF9uYW1lXVskY291cnNlX25hbWVdWyRhc3Nlc3NtZW50X25hbWVdW10gPSAkdmFsdWU7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJHZhbHVlcy0+YXNzZXNzbWVudF90eXBlX2NvbnNvbGlkYXRlID09IDIpDQoJCQkJew0KCQkJCQkvLyBwZXIgcHJvZ3JhbQ0KCQkJCQlzZWxmOjokcGVyWydwcm9ncmFtJ11bJHR5cGVdWyRldmVudF9uYW1lXVskYXNzZXNzbWVudF9uYW1lXVtdID0gJHZhbHVlOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkvLyBwZXIgYXNzZXNzbWVudA0KCQkJCQlzZWxmOjokcGVyWydhc3Nlc3NtZW50J11bJHR5cGVdWyRldmVudF9uYW1lXVskY291cnNlX25hbWVdWyRhc3Nlc3NtZW50X25hbWVdW10gPSAkdmFsdWU7DQoJCQkJfQ0KCQkJCS8vIG5vdyBhZGQgdG8gdG90YWxzDQoJCQkJc2VsZjo6JHRvdGFsWydhc3Nlc3NtZW50J11bJHR5cGVdWyRldmVudF9uYW1lXVtdID0gJHZhbHVlOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFJlcG9ydENhcmRCdXR0b25zKCRrZXksICRuYW1lKQ0KCXsNCgkJJGJ1dHRvbnMgPSBhcnJheSgpOw0KCQkkYnV0dG9uc1tdID0gJzxkaXYgY2xhc3M9InVrLWJ1dHRvbi1ncm91cCB1ay13aWR0aC0xLTEgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSI+JzsNCgkJJGJ1dHRvbnNbXSA9ICc8YnV0dG9uICB0eXBlPSJidXR0b24iIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXN1Y2Nlc3MgdWstd2lkdGgtMS0yIiAnOw0KCQkkYnV0dG9uc1tdID0gJ29uY2xpY2s9InZpZXdQcmludChcJycuJG5hbWUuJ1wnLCBcJ2dldCcuJGtleS4nXCcpOyByZXR1cm4gZmFsc2U7Ij4nOw0KCQkkYnV0dG9uc1tdID0gJzxpIGNsYXNzPSJ1ay1pY29uLXByaW50Ij48L2k+ICcuVGV4dDo6XygnVmlldyBQcmludCcpLic8L2J1dHRvbj4nOw0KCQkkYnV0dG9uc1tdID0gJzxidXR0b24gIG9uY2xpY2s9InNldHVwRW1haWwoXCdnZXQnLiRrZXkuJ1wnLCBcJycuJG5hbWUuJ1wnKSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXdpZHRoLTEtMiI+JzsNCgkJJGJ1dHRvbnNbXSA9ICc8aSBjbGFzcz0idWstaWNvbi1lbnZlbG9wZSI+PC9pPiAnLlRleHQ6Ol8oJ0VtYWlsJykuJzwvYnV0dG9uPic7DQoJCSRidXR0b25zW10gPSAnPC9kaXY+JzsNCgkJcmV0dXJuIGltcGxvZGUoJycsICRidXR0b25zKTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFJlcG9ydENhcmRIZWFkZXIoJHByb2dyYW0sICRldmVudF9kZXRhaWxzLCAkc3R1ZGVudCkNCgl7DQoJCS8vIGdldCBwbGFjZSBob2xkZXJzDQoJCSRwbGFjZWhvbGRlcnMgPSBzZWxmOjpnZXRQbGFjZUhvbGRlcnMoJHN0dWRlbnQsIG51bGwsICRldmVudF9kZXRhaWxzKTsNCgkJJGhlYWRlciA9ICcnOw0KCQkvLyBnZXQgaGVhZGVyDQoJCWlmIChpc19udW1lcmljKCRwcm9ncmFtKSAmJiAoaW50KSAkcHJvZ3JhbSA+IDAgJiYgaXNzZXQoc2VsZjo6JHJlcG9ydENhcmRQcm9ncmFtWyRwcm9ncmFtXSkgJiYgMSA9PSBzZWxmOjokcmVwb3J0Q2FyZFByb2dyYW1bJHByb2dyYW1dKQ0KCQl7DQoJCQkkaGVhZGVyID0gc2VsZjo6Z2V0VmFyKCdwcm9ncmFtJywgJHByb2dyYW0sICdpZCcsICdyZXBvcnRfY2FyZF9oZWFkZXInKTsNCgkJfQ0KCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRoZWFkZXIpKQ0KCQl7DQoJCQkkaGVhZGVyID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCdkb2NfaGVhZGVyJyk7DQoJCX0NCgkJLy8gc2V0IHRoZSBoZWFkZXINCgkJcmV0dXJuIHNlbGY6OnNldER5bmFtaWNEYXRhKCRoZWFkZXIsICRwbGFjZWhvbGRlcnMpOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0UmVwb3J0Q2FyZEZvb3RlcigkcHJvZ3JhbSwgJGV2ZW50X2RldGFpbHMsICRzdHVkZW50KQ0KCXsNCgkJLy8gZ2V0IHBsYWNlIGhvbGRlcnMNCgkJJHBsYWNlaG9sZGVycyA9IHNlbGY6OmdldFBsYWNlSG9sZGVycygkc3R1ZGVudCwgbnVsbCwgJGV2ZW50X2RldGFpbHMpOw0KCQkvLyBnZXQgZm9vdGVyDQoJCSRmb290ZXIgPSAnJzsNCgkJaWYgKGlzX251bWVyaWMoJHByb2dyYW0pICYmIChpbnQpICRwcm9ncmFtID4gMCAmJiBpc3NldChzZWxmOjokcmVwb3J0Q2FyZFByb2dyYW1bJHByb2dyYW1dKSAmJiAxID09IHNlbGY6OiRyZXBvcnRDYXJkUHJvZ3JhbVskcHJvZ3JhbV0pDQoJCXsNCgkJCSRmb290ZXIgPSBzZWxmOjpnZXRWYXIoJ3Byb2dyYW0nLCAkcHJvZ3JhbSwgJ2lkJywgJ3JlcG9ydF9jYXJkX2Zvb3RlcicpOw0KCQl9DQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGZvb3RlcikpDQoJCXsNCgkJCSRmb290ZXIgPSBzZWxmOjokcGFyYW1zLT5nZXQoJ2RvY19mb290ZXInKTsNCgkJfQ0KCQkvLyBzZXQgdGhlIGZvb3Rlcg0KCQlyZXR1cm4gc2VsZjo6c2V0RHluYW1pY0RhdGEoJGZvb3RlciwgJHBsYWNlaG9sZGVycyk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXNzZWQoICRldmVudF9uYW1lLCAkY3JlZGl0KQ0KCXsNCgkJaWYgKCFpc3NldChzZWxmOjokYXNzZXNzbWVudHNPdXRzdGFuZGluZ1skZXZlbnRfbmFtZV0pICYmICRjcmVkaXQgPj0gc2VsZjo6JGV2ZW50RGV0YWlsc1skZXZlbnRfbmFtZV1bJ1twYXNzX2NyZWRpdF0nXSkNCgkJew0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGlzcGxheUNyZWRpdCgkZXZlbnRfbmFtZSwgJGNyZWRpdCkNCgl7DQoJCWlmIChzZWxmOjpwYXNzZWQoJGV2ZW50X25hbWUsICRjcmVkaXQpKQ0KCQl7DQoJCQlyZXR1cm4gJzxzcGFuIHN0eWxlPSJjb2xvcjogZ3JlZW47Ij4nLiRjcmVkaXQuJzwvc3Bhbj4nOw0KCQl9DQoJCXJldHVybiAnPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij4nLiRjcmVkaXQuJzwvc3Bhbj4nOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFzc1N0YXR1cygkZXZlbnRfbmFtZSwgJGNyZWRpdCkNCgl7DQoJCWlmIChzZWxmOjpwYXNzZWQoJGV2ZW50X25hbWUsICRjcmVkaXQpKQ0KCQl7DQoJCQlyZXR1cm4gJzxzcGFuIHN0eWxlPSJjb2xvcjogZ3JlZW47Ij4nLlRleHQ6Ol8oJ1BBU1NFRCcpLic8L3NwYW4+JzsNCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdG9yZU1lc3NhZ2UoJHNlbmQsICRyZWNpcGllbnQsICRzdWJqZWN0LCAkYm9keSwgJHRleHQsICRtb2RlID0gMCwgJHR5cGUgPSAnZW1haWwnKQ0KCXsNCgkJLy8gc2V0IHRoZSBzdG9yaW5nIG9iamVjdA0KCQkkbWVzc2FnZSA9IG5ldyBcc3RkQ2xhc3M7DQoJCSRtZXNzYWdlLT5zZW5kX3N0YXR1cyA9IDA7DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc3ViamVjdCkpDQoJCXsNCgkJCSRtZXNzYWdlLT5zdWJqZWN0ID0gJHN1YmplY3Q7DQoJCX0NCgkJaWYgKCRzZW5kKQ0KCQl7DQoJCQkkbWVzc2FnZS0+c2VuZF9zdGF0dXMgPSAxOw0KCQl9DQoJCS8vIGlmIHRoaXMgaXMgYW4gZW1haWwNCgkJaWYgKCR0eXBlID09ICdlbWFpbCcpDQoJCXsNCgkJCS8vIGNoZWNrIHdobyB0aGUgdXNlciBpcyB0aGlzIG1lc3NhZ2Ugd2FzIHNlbmQgdG8NCgkJCSR1c2VySWQgPSBzZWxmOjpnZXRWYXIobnVsbCwgJHJlY2lwaWVudCwgJ2VtYWlsJywgJ2lkJywgJz0nLCAndXNlcnMnKTsNCgkJCWlmIChpc19udW1lcmljKCR1c2VySWQpKQ0KCQkJew0KCQkJCSRtZXNzYWdlLT51c2VyID0gKGludCkgJHVzZXJJZDsNCgkJCX0NCgkJCS8vIHNldCB0aGUgZW1haWwNCgkJCSRtZXNzYWdlLT5lbWFpbCA9ICRyZWNpcGllbnQ7DQoJCX0NCgkJZWxzZWlmICgkdHlwZSA9PSAnc21zJyAmJiAkdHlwZSA9PSAnbm90aWNlJykNCgkJew0KCQkJaWYgKGlzX251bWVyaWMoJHJlY2lwaWVudCkpDQoJCQl7DQoJCQkJJG1lc3NhZ2UtPnVzZXIgPSAoaW50KSAkcmVjaXBpZW50Ow0KCQkJfQ0KCQl9DQoJCWlmIChpc3NldCgkbWVzc2FnZS0+dXNlcikpDQoJCXsNCgkJCS8vIHNldCB0aGUgYm9keSBzdHVmZg0KCQkJaWYgKCRtb2RlIHx8ICR0eXBlID09ICdub3RpY2UnKQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkYm9keSkpDQoJCQkJew0KCQkJCQkkbWVzc2FnZS0+aHRtbCA9ICRib2R5Ow0KCQkJCQkvLyBzZXQgdGhlIGtpbmQNCgkJCQkJaWYgKCR0eXBlID09ICdlbWFpbCcpDQoJCQkJCXsNCgkJCQkJCSRtZXNzYWdlLT5raW5kID0gMTsJDQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0ZXh0KSAmJiAkdHlwZSAhPSAnbm90aWNlJykNCgkJCQl7DQoJCQkJCSRtZXNzYWdlLT50ZXh0ID0gJHRleHQ7DQoJCQkJCS8vIHNldCB0aGUga2luZA0KCQkJCQlpZiAoJHR5cGUgPT0gJ2VtYWlsJyAmJiAhaXNzZXQoJG1lc3NhZ2UtPmh0bWwpKQ0KCQkJCQl7DQoJCQkJCQkkbWVzc2FnZS0+a2luZCA9IDI7CQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkdHlwZSA9PSAnc21zJykNCgkJCQl7DQoJCQkJCSRtZXNzYWdlLT5raW5kID0gMzsNCgkJCQl9DQoJCQkJZWxzZWlmICgkdHlwZSA9PSAnbm90aWNlJykNCgkJCQl7DQoJCQkJCSRtZXNzYWdlLT5raW5kID0gNDsJDQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkYm9keSkpDQoJCQkJew0KCQkJCQkkbWVzc2FnZS0+dGV4dCA9ICRib2R5Ow0KCQkJCX0NCgkJCQkvLyBzZXQgdGhlIGtpbmQNCgkJCQlpZiAoJHR5cGUgPT0gJ2VtYWlsJykNCgkJCQl7DQoJCQkJCSRtZXNzYWdlLT5raW5kID0gMjsNCgkJCQl9DQoJCQkJZWxzZWlmICgkdHlwZSA9PSAnc21zJykNCgkJCQl7DQoJCQkJCSRtZXNzYWdlLT5raW5kID0gMzsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB0aGlzIG1lc3NhZ2Ugd2FzIHNlbmQgYWxyZWFkeQ0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2lkJykpKTsJCQ0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbWVzc2FnZScpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3VzZXInKSAuICcgPSAnLiRtZXNzYWdlLT51c2VyKTsNCgkJCWlmIChpc3NldCgkbWVzc2FnZS0+c3ViamVjdCkpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc3ViamVjdCcpIC4gJyA9ICcuJGRiLT5xdW90ZSgkbWVzc2FnZS0+c3ViamVjdCkpOw0KCQkJfQ0KCQkJaWYgKGlzc2V0KCRtZXNzYWdlLT5raW5kKSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdraW5kJykgLiAnID0gJy4kbWVzc2FnZS0+a2luZCk7DQoJCQl9DQoJCQlpZiAoaXNzZXQoJG1lc3NhZ2UtPmVtYWlsKSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdlbWFpbCcpIC4gJyA9ICcuJGRiLT5xdW90ZSgkbWVzc2FnZS0+ZW1haWwpKTsNCgkJCX0NCgkJCWlmIChpc3NldCgkbWVzc2FnZS0+aHRtbCkpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaHRtbCcpIC4gJyA9ICcuJGRiLT5xdW90ZSgkbWVzc2FnZS0+aHRtbCkpOw0KCQkJfQ0KCQkJaWYgKGlzc2V0KCRtZXNzYWdlLT50ZXh0KSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCd0ZXh0JykgLiAnID0gJy4kZGItPnF1b3RlKCQkbWVzc2FnZS0+dGV4dCkpOw0KCQkJfQ0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJG1lc3NhZ2UtPmlkID0gJGRiLT5sb2FkUmVzdWx0KCk7DQoJCQkJJG1lc3NhZ2UtPm1vZGlmaWVkX2J5ID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCQkkbWVzc2FnZS0+bW9kaWZpZWQgPSBGYWN0b3J5OjpnZXREYXRlKCktPnRvU3FsKCk7DQoJCQkJJG1lc3NhZ2UtPmRhdGVzZW50ID0gJG1lc3NhZ2UtPm1vZGlmaWVkOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHNldCBzb21lIG1vcmUgZGVmYXVsdHMNCgkJCQkkbWVzc2FnZS0+cHVibGlzaGVkID0gMTsNCgkJCQkkbWVzc2FnZS0+Y3JlYXRlZF9ieSA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCQkJJG1lc3NhZ2UtPmNyZWF0ZWQgPSBGYWN0b3J5OjpnZXREYXRlKCktPnRvU3FsKCk7DQoJCQkJJG1lc3NhZ2UtPmRhdGVzZW50ID0gJG1lc3NhZ2UtPmNyZWF0ZWQ7DQoJCQkJJG1lc3NhZ2UtPnZlcnNpb24gPSAxOw0KCQkJCSRtZXNzYWdlLT5hY2Nlc3MgPSAxOw0KCQkJfQ0KCQkJLy8gdXBkYXRlIGlmIGlkIGlzIGZvdW5kDQoJCQlpZiAoaXNzZXQoJG1lc3NhZ2UtPmlkKSkNCgkJCXsNCgkJCQkkZGItPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX21lc3NhZ2UnLCAkbWVzc2FnZSwgJ2lkJyk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gaW5zZXJ0IHRoZSBuZXcgbWVzc2FnZQ0KCQkJCSRyZXN1bHQgPSAkZGItPmluc2VydE9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX21lc3NhZ2UnLCAkbWVzc2FnZSk7DQoJCQkJaWYgKCRyZXN1bHQpDQoJCQkJew0KCQkJCQkkYUlkID0gJGRiLT5pbnNlcnRpZCgpOw0KCQkJCQkvLyBtYWtlIHN1cmUgdGhlIGFjY2VzcyBvZiBhc3NldCBpcyBzZXQNCgkJCQkJc2VsZjo6c2V0QXNzZXQoJGFJZCwnbWVzc2FnZScpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0=', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdICgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10gKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdICgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdIChodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKSkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gbmV2ZXIgbWFraW5nIG9uZSBtaXN0YWtlIG9yIHRha2luZyBhbnkgY29mZmVlIGJyZWFrLikNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KKiojIyNhY3R1YWxIb3Vyc1NwZW50IyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxEYXlzU3BlbnQjIyMgRWlnaHQgSG91ciBEYXlzKiogKHRoZSBhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNwZW50KQ0KDQo+ICh3aXRoIHRoZSBmb2xsb3dpbmcgYnJlYWsgZG93bjoNCj4gKipkZWJ1Z2dpbmcgQCMjI2RlYnVnZ2luZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA0Ow0KPiAqKnBsYW5uaW5nIEAjIyNwbGFubmluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA3Ow0KPiAqKm1hcHBpbmcgQCMjI21hcHBpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gMTA7DQo+ICoqb2ZmaWNlIEAjIyNvZmZpY2VIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNjspDQoNCioqIyMjYWN0dWFsVG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsVG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqDQooYSB0b3RhbCBvZiB0aGUgcmVhbGlzdGljIHRpbWUgZnJhbWUgZm9yIHRoaXMgcHJvamVjdCkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gd2l0aCB0aGUgbm9ybWFsIGV2ZXJ5ZGF5IHJlYWxpdGllcyBhdCB0aGUgb2ZmaWNlLCB0aGF0IGluY2x1ZGVzIHRoZSBjb21wb25lbnQgcGxhbm5pbmcsIG1hcHBpbmcgJiBkZWJ1Z2dpbmcuKQ0KDQpQcm9qZWN0IGR1cmF0aW9uOiAqKiMjI3Byb2plY3RXZWVrVGltZSMjIyB3ZWVrcyoqIG9yICoqIyMjcHJvamVjdE1vbnRoVGltZSMjIyBtb250aHMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXSAoaHR0cHM6Ly93d3cudmRtLmlvL2pvb21sYS1jb21wb25lbnQtYnVpbGRlcikuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdIChtYWlsdG86am9vbWxhQHZkbS5pbyk=', '', '', 'The Basic Learning Management System', '', '', 'Learning Management (public)', '.git', '', 1, 1, 'https://www.vdm.io/updates/learningmanager_update_server.xml', 'https://www.vdm.io', '', 'ZLC+o/uT82WtR+AsHX8HD8RBExDEA4h2p2RU848nDmnR7hfKjzQtlqomgRr8Zhvjduh5+Rn+zu38xQxmfhTMdg==', 'https://www.vdm.io/access/', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 439, '', 1, 2), +(2, 1, 1, 1, '', 1, '', '', '', 1, '', '', 1, '', '', 1, 1, 1, 1, '', 1, '', 1, 1, 1, 1, '{}', 3, 1, 1, 3, 'Llewellyn van der Merwe', '/var/www/jcb_j3', 'JCB.txt', '', '', 'Vast Development Method', '3.2.1-rc1', 'Copyright (C) 2015 Vast Development Method. All rights reserved.', '2015-04-30 12:04:35', '', 'HMhMLDKSyLrEPuBMJEM2GcDUhj7OY7lbAC8YaknszR8=', '6KTVm+xbGX1pknoG+r1guYUDh+l+YlLHJq2VeeKeWzo=', '', 'MARGltHnMVybJlT/Ul3J5JynJa3pt+aqtJNO8yPwhLY=', 'LmZpZWxkTWVkaXVtIHsgd2lkdGg6IDEyMHB4OyB9DQouZmllbGRMYXJnZSB7IHdpZHRoOiAzMjBweDsgfQ0KLmZpZWxkTWlkIHsgd2lkdGg6IDgwcHg7IH0NCi5maWVsZEZ1bGwgeyB3aWR0aDogMTAwJTsgfQ0KLmZpZWxkU21hbGwgeyB3aWR0aDogNjBweDsgfQ0KY29kZSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAzcHg7fQ==', '', '', 1, '', 'The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.\r\n\r\nWhether you\'re a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!', 'joomla@vdm.io', '', 'https://vdm.bz/component-builder-self', 'q0Nx5ndmXh3j8Y4iCBNd20YXY0eaJ69bpL5GcQKyWNw=', '', '7331e978-f213-4404-9fa5-0613db40ba57', 'images/vdm/jcb500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder', 'GNU General Public License version 2 or later; see LICENSE.txt', 1, '✓', '2024-04-27 10:37:31', 2, 'Component Builder', 'Componentbuilder', 'JCB', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlckhlbHBlckJvdGhd', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJGFwcF0=', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclBvc3RmbGlnaHRVcGRhdGVdDQpbQ1VTVE9NQ09ERT1kYXRhYmFzZVNjaGVtYUNoZWNrQ2FsbCskYXBwXQ==', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskYXBwXQ==', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclByZWZsaWdodFVwZGF0ZV0NCltDVVNUT01DT0RFPXBocENvbmZpZ3VyYXRpb25DaGVja0NhbGwrJGFwcF0=', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclJlYWRNZV0=', 1, '', 'Builds Complex Joomla Components', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMSW5zdGFsbF0=', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMVW5pbnN0YWxsXQ==', 'Component Builder (Public)', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', 3, 2, 'https://git.vdm.dev/joomla/Component-Builder/raw/branch/3.x/componentbuilder_update_server.xml', 'https://dev.vdm.io', '', 'AuPSKSfpljRFR8L15MBTyaMykK/qZhUlmcEmwddy7G0=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"0\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\\r\\nuse Joomla\\\\CMS\\\\Session\\\\Session;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\\r\\nuse Joomla\\\\CMS\\\\Session\\\\Session;\",\"power_site_helper\":[]}}', 1, 1218, '', 1, 1), +(3, '', '', '', '', '', '', '', 1, 1, '', 1, '', 1, '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 1, 1, 1, 3, 'Llewellyn van der Merwe', '', 'giz.txt', '', '', 'Deutsche Gesellschaft fรผr International Zusammenarbeit (GIZ) Gmb', '3.5.0', 'Copyright (C) 2015. All Rights Reserved', '2012-06-15 01:19:00', 1, '/DM4B/gNsYQI1djKmChnS9Zk3OadbsxiRZIt2CObOv0=', 'JCABekFYdCb1Jid7QjGQJpkUNhnahz42rnQUKqqdSGc=', '', 'Fweh9P/AReEKLcdjy9FUzKN8w7tEnsX+66Pc7GBhrlo=', '', '', '', 1, '', 'Create Epidemiological Profiles for diseases and risks affecting your company. Detailed information on projected work days lost and costs. Create and edit activities and wellness responses for your workplace. Access to Small Business Modeling. Results displayed by gender. Network with other companies and wellness professionals.\r\n\r\nHaving seen the health priorities for your workforce, the tool outputs projections for how the interventions โ€“ which you have designed - are expected to benefit the company financially.\r\n\r\nBenefits are calculated based on the model projecting reductions in workdays lost due to sickness, presenteeism and death.', 'joomla@vdm.io', 1, 'https://vdm.bz/cost-benefit-projection', 'fh5IX0VlAKgp6nBbq0C83HnKqabnAWgoFNIekqjYDaEHw1aQBxWfO/Wz732g2IinutKTaGbTRfMNEsaGdU30Gw==', '', '829cc38c-5a2d-4455-9bc8-8f7129e56f19', 'images/giz.png', '', 'https://github.com/Llewellynvdm/Joomla-Cost-Benefit-Projection', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2022-05-27 05:31:41', 2, 'Cost Benefit Projection', 'costbenefitprojection', '', 2, '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXNlcklzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQl9DQoJCS8vIGdldCB0aGlzIHVzZXIgZ3JvdXBzDQoJCSRncm91cHMJPSAoYXJyYXkpICR1c2VyLT5nZXRBdXRob3Jpc2VkR3JvdXBzKCk7DQoJCS8vIGdldCBwYXJhbXMNCgkJJHBhcmFtcwk9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJLy8gZ2V0IHRhcmdldCBncm91cHMNCgkJJGNvdW50cnlHcm91cHMgCQkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnY291bnRyeXVzZXInKTsNCgkJJHNlcnZpY2Vwcm92aWRlckdyb3VwcwkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnc2VydmljZXByb3ZpZGVydXNlcicpOw0KCQkkbWVtYmVyR3JvdXBzIAkJCT0gKGFycmF5KSAkcGFyYW1zLT5nZXQoJ21lbWJlcnVzZXInKTsNCgkJLy8gbm93IGNoZWNrIGluIHdoYXQgZ3JvdXAgdGhpcyB1c2VyIGJlbG9uZ3MNCgkJaWYgKGFycmF5X2ludGVyc2VjdCgkY291bnRyeUdyb3VwcywgJGdyb3VwcykpDQoJCXsNCgkJCS8vIGlzIGNvdW50cnkNCgkJCXJldHVybiAzOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRzZXJ2aWNlcHJvdmlkZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBzZXJ2aWNlcHJvdmlkZXINCgkJCXJldHVybiAyOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBtZW1iZXINCgkJCXJldHVybiAxOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0NvbXBhbnkoJGlkKQ0KCXsNCgkJLy8gY2hlY2sgdGhlIHBlciB2YWx1ZQ0KCQkkbG9jayA9IHNlbGY6OmdldFZhcignY29tcGFueScsICRpZCwgJ2lkJywgJ3BlcicpOw0KCQlpZiAoIDEgPT0gJGxvY2spDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrSW50ZXJ2ZXRpb25BY2Nlc3MoJGlkLCAkc2hhcmUgPSBudWxsLCAkY29tcCA9IG51bGwpDQoJew0KICAgICAgICAgICAgICAgIC8vIHNldCBzaGFyZSB2YWx1ZSBpZiBub3Qgc2V0DQogICAgICAgICAgICAgICAgaWYgKCEkc2hhcmUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNoYXJlID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ3NoYXJlJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIGJhc2VkIG9uIHNoYXJlZCB3ZSBzZXQgbmVlZGVkIHZhbHVlcw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoaXMgaW50ZXJ2ZW50aW9ucyBjb21wYW55IChvd25lcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkY29tcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21wID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ2NvbXBhbnknKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgaGlzIGNvbXBhbmllcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGFuaWVzID0gc2VsZjo6aGlzQ29tcGFuaWVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB1c2VyIHR5cGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXJUeXBlID0gc2VsZjo6dXNlcklzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gYmFzZWQgb24gc2hhcmVkIHZhbHVlIHdlIHdpbGwgcmVzcG9uZA0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2hhcmluZyBpcyAxIG9ubHkgb3duZXIgbWF5IHNlZSBpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHVzZXJUeXBlID09IDEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCRjb21wLCAkY29tcGFuaWVzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaGFyaW5nIGlzIDIgb25seSBvd25lciBhbmQgc2VydmljZSBwcm92aWRlciBtYXkgc2VlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1c2VyVHlwZSA9PSAxIHx8ICR1c2VyVHlwZSA9PSAyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkY29tcCwgJGNvbXBhbmllcykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RIaXNVc2VycygkaWQgPSBudWxsKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IGFsbCB0aGUgdXNlcnMgdG8ga2VlcA0KCQkka2VlcFVzZXJzID0gc2VsZjo6aGlzVXNlcnMoJGlkKTsNCgkJaWYgKGlzX2FycmF5KCRrZWVwVXNlcnMpKQ0KCQl7DQoJCQkvLyByZXR1cm4gdGhvc2Ugbm90IHRvIGtlZXANCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ2lkJywka2VlcFVzZXJzLCd1c2VycycsJ2lkJywnTk9UIElOJywnJyk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGlzVXNlcnMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBoaW1zZWxmKQ0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuIGFycmF5KCRpZCk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvbXBhbmllcyB1c2VycyB0aGF0IGJlbG9uZyB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgaGltc2VsZikNCgkJCWNhc2UgMjoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwCQk9IHNlbGY6OmdldElkcygnaWQnLCRjb21wYW5pZXMsJ2NvbXBhbnknLCd1c2VyJyk7DQoJCQkvLyBub3cgY2hlY2sgdGhlIHJlc3VsdA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRrZWVwKSkNCgkJCXsNCgkJCQkka2VlcFtdID0gJGlkOw0KCQkJCXJldHVybiBhcnJheV91bmlxdWUoJGtlZXApOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCQkvLyBjb3VudHJ5IChvbmx5IGxvYWQgY29tcGFuaWVzIGFuZCBzZXJ2aWNlIHByb3ZpZGVycyB0aGF0IGJlbG9uZyB0byB0aGUgY291bnRyeSkNCgkJCWNhc2UgMzoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwQwkJPSBzZWxmOjpnZXRJZHMoJ2lkJywkY29tcGFuaWVzLCdjb21wYW55JywndXNlcicpOw0KCQkJJHNlcnZpY2UJPSBzZWxmOjpoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCk7DQoJCQkka2VlcFMJCT0gc2VsZjo6Z2V0SWRzKCdpZCcsJHNlcnZpY2UsJ3NlcnZpY2VfcHJvdmlkZXInLCd1c2VyJyk7DQoJCQkvLyBtZXJnZSB0aGVzZSB2YWx1ZXMNCgkJCSRrZWVwCQk9IHNlbGY6Om1lcmdlQXJyYXlzKGFycmF5KCRrZWVwQywka2VlcFMpKTsNCgkJCS8vIG5vdyBjaGVjayB0aGUgcmVzdWx0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGtlZXApKQ0KCQkJew0KCQkJCSRrZWVwW10gPSAkaWQ7DQoJCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgka2VlcCk7DQoJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNDb21wYW5pZXMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIG1lbWJlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY29tcGFueScpOw0KCQkJYnJlYWs7DQoJCQkvLyBzZXJ2ZXMgcHJvdmlkZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIpDQoJCQljYXNlIDI6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdzZXJ2aWNlX3Byb3ZpZGVyJyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnc2VydmljZV9wcm92aWRlcicpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvdW50cnkpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdjb3VudHJ5JyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY291bnRyeScpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRpZCA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJaWYgKDEgPT0gJGlzKSAvLyBtZW1iZXINCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygndXNlcicsJGlkLCdjb21wYW55Jywnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCWVsc2VpZiAoMiA9PSAkaXMpIC8vIHNlcnZlcyBwcm92aWRlcg0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoc2VsZjo6Z2V0SWQoJ3NlcnZpY2VfcHJvdmlkZXInLCRpZCkpOw0KCQl9DQoJCWVsc2VpZiAoMyA9PSAkaXMpIC8vIGNvdW50cnkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygnY291bnRyeScsc2VsZjo6Z2V0SWRzKCd1c2VyJywkaWQsJ2NvdW50cnknKSwnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0NvdW50cmllcygkdXNlcklkID0gbnVsbCwgJGlkID0gbnVsbCwgJGlzX3R5cGUgPSBudWxsKQ0KCXsNCgkJaWYoJHVzZXJJZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQllbHNlaWYoJGlkID4gMCAmJiAkaXNfdHlwZSkNCgkJew0KCQkJJHVzZXJJZCA9IHNlbGY6OmdldElkKCRpc190eXBlLCRpZCwnaWQnLCd1c2VyJyk7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdXNlcklkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJc3dpdGNoKCRpcykNCgkJew0KCQkJLy8gbWVtYmVyIChvbmx5IGxvYWQgY291bnRyaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBtZW1iZXIgdXNlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCR1c2VySWQsJ2NvbXBhbnknLCdjb3VudHJ5Jyk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvdW50cnkgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgdXNlcikNCgkJCWNhc2UgMjoNCgkJCXJldHVybiBhcnJheShzZWxmOjpnZXRJZCgnc2VydmljZV9wcm92aWRlcicsJHVzZXJJZCwndXNlcicsJ2NvdW50cnknKSk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb250cnllIHRoYXQgYmVsb25nIHRvIHRoZSBjb3VudHJ5IHVzZXIpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCd1c2VyJywkdXNlcklkLCdjb3VudHJ5JywnaWQnKTsNCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0N1cnJlbmNpZXMoJHVzZXJJZCA9IG51bGwsICRpZCA9IG51bGwsICRpc190eXBlID0gbnVsbCkNCgl7DQoJCSRjb3VudHJpZXMgPSBzZWxmOjpoaXNDb3VudHJpZXMoJHVzZXJJZCwkaWQsJGlzX3R5cGUpOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvdW50cmllcykpDQoJCXsNCgkJCSRjdXJyZW5jaWVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRjb3VudHJpZXMgYXMgJGNvdW50cnkpDQoJCQl7DQoJCQkJLy8gZ2V0IGN1cnJlbmN5IGlkDQoJCQkJJGN1cnJlbmNpZXNbXSA9IHNlbGY6OmdldFZhcignY3VycmVuY3knLCBzZWxmOjpnZXRWYXIoJ2NvdW50cnknLCAkY291bnRyeSwgJ2lkJywgJ2N1cnJlbmN5JyksICdjb2RldGhyZWUnLCAnaWQnKTsNCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY2llcykpDQoJCQl7DQoJCQkJcmV0dXJuICRjdXJyZW5jaWVzOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN1cnJlbmN5RGV0YWlscygkaWQgPSBmYWxzZSkNCgl7DQoJCWlmICghJGlkKQ0KCQl7DQoJCQkkaWQgPSBzZWxmOjpoaXNDdXJyZW5jaWVzKCk7DQoJCX0NCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRpZCkpDQoJCXsNCgkJCSRpZHMgPSBhcnJheV92YWx1ZXMoJGlkKTsNCgkJCSRpZCA9ICRpZFswXTsNCgkJfQ0KCQlpZihpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQknYS5kZWNpbWFsc3ltYm9sJywnYS5wb3NpdGl2ZXN0eWxlJywnYS5uZWdhdGl2ZXN0eWxlJyksDQoJCQkJYXJyYXkoCSdjdXJyZW5jeV9pZCcsJ2N1cnJlbmN5X25hbWUnLCdjdXJyZW5jeV9jb2RldGhyZWUnLCdjdXJyZW5jeV9udW1lcmljY29kZScsJ2N1cnJlbmN5X3N5bWJvbCcsDQoJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCSdjdXJyZW5jeV9uZWdhdGl2ZXN0eWxlJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fY29zdGJlbmVmaXRwcm9qZWN0aW9uX2N1cnJlbmN5JywgJ2EnKSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZU1vbmV5KCRudW1iZXIsJGN1cnJlbmN5ID0gZmFsc2UpDQoJew0KCQkvLyBmaXJzdCBjaGVjayBpZiB3ZSBoYXZlIGEgbnVtYmVyDQoJCWlmIChpc19udW1lcmljKCRudW1iZXIpKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgbmVnYXRpdmUgZmluZGVyIGZpbGUNCgkJCWluY2x1ZGVfb25jZSAnbmVnYXRpdmVmaW5kZXIucGhwJzsNCgkJCS8vIGNoZWNrIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUNCgkJCSRuZWdhdGl2ZUZpbmRlck9iaiA9IG5ldyBOZWdhdGl2ZUZpbmRlcihuZXcgRXhwcmVzc2lvbigiJG51bWJlciIpKTsNCgkJCSRuZWdhdGl2ZSA9ICRuZWdhdGl2ZUZpbmRlck9iai0+aXNJdE5lZ2F0aXZlKCkgPyBUUlVFIDogRkFMU0U7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdFUlJPUiEgKCcuJG51bWJlci4nKSBpcyBub3QgYSBudW1iZXIhJyk7DQoJCX0NCgkJLy8gbm90IHNldHVwIHRoZSBjdXJyZW5jeQ0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGN1cnJlbmN5KSkNCgkJew0KCQkJaWYoIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfcG9zaXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfbmVnYXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFsc3ltYm9sKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9zeW1ib2wpKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkY3VycmVuY3ktPmN1cnJlbmN5X2lkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmN1cnJlbmN5X2lkKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc3NldCgkY3VycmVuY3ktPmlkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmlkKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGN1cnJlbmN5ID0gc2VsZjo6Y3VycmVuY3lEZXRhaWxzKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9CQ0KCQllbHNlDQoJCXsNCgkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3kpOw0KCQl9DQoJCS8vIHNldCB0aGUgbnVtYmVyIHRvIGN1cnJlbmN5DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY3kpKQ0KCQl7DQoJCQlpZiAoISRuZWdhdGl2ZSkNCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9wb3NpdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJysnOw0KCQkJfQ0KCQkJZWxzZSANCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9uZWdhdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJy0nOw0KCQkJCSRudW1iZXIgPSBhYnMoJG51bWJlcik7DQoJCQl9DQoJCQkkc2V0dXBOdW1iZXIgPSBudW1iZXJfZm9ybWF0KChmbG9hdCkkbnVtYmVyLCAoaW50KSRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlLCAkY3VycmVuY3ktPmN1cnJlbmN5X2RlY2ltYWxzeW1ib2wsICcgJyk7IC8vJGN1cnJlbmN5LT5jdXJyZW5jeV90aG91c2FuZHMgVE9ETyk7DQoJCQkkc2VhcmNoID0gYXJyYXkoJ3tzaWdufScsICd7bnVtYmVyfScsICd7c3ltYm9sfScpOw0KCQkJJHJlcGxhY2UgPSBhcnJheSgkc2lnbiwgJHNldHVwTnVtYmVyLCAkY3VycmVuY3ktPmN1cnJlbmN5X3N5bWJvbCk7DQoJCQkkbW9uZXlNYWRlID0gc3RyX3JlcGxhY2UgKCRzZWFyY2gsJHJlcGxhY2UsJGZvcm1hdCk7DQoNCgkJCXJldHVybiAkbW9uZXlNYWRlOw0KCQl9DQoJCXJldHVybiAkbnVtYmVyOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SWQoJHRhYmxlLCAkd2hlcmUgPSBudWxsICwgJHdoZXJlU3RyaW5nID0gJ3VzZXInLCAkd2hhdCA9ICdpZCcpDQoJew0KCQlpZighJHdoZXJlKQ0KCQl7DQoJCQkkd2hlcmUgPSBGYWN0b3J5OjpnZXRVc2VyKCktPmlkOw0KCQl9DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCR3aGF0KSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0YWJsZSkpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCR3aGVyZVN0cmluZykgLiAnID0gJy4oaW50KSAkd2hlcmUpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJZHMoJHdoZXJlU3RyaW5nLCR3aGVyZSwkdGFibGUsJHdoYXQgPSAnaWQnLCRvcGVyYXRvciA9ICdJTicsJG1haW5fID0gJ1tbW2NvbXBvbmVudF1dXV8nKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkd2hlcmUpICYmICR3aGVyZSA+IDApDQoJCXsNCgkJCSR3aGVyZSA9IGFycmF5KCR3aGVyZSk7DQoJCX0NCg0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHdoZXJlKSkNCgkJew0KCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCR3aGF0KSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX18nLiRtYWluXy4kdGFibGUpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJHdoZXJlU3RyaW5nKSAuICcgJy4kb3BlcmF0b3IuJyAoJyAuIGltcGxvZGUoJywnLCR3aGVyZSkgLiAnKScpOw0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgkZGItPmxvYWRDb2x1bW4oKSk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q291bnRyeU5hbWUoJGlkKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ25hbWUnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5JykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQlyZXR1cm4gJGRiLT5sb2FkUmVzdWx0KCk7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29tYmluZSgkaXRlbXMpDQoJew0KCQkvLyBtYWtlIHN1cmUgdGhlIHN1bSBjbGFzcyBpcyBsb2FkZWQNCgkJSkxvYWRlcjo6aW1wb3J0KCdzdW1jb21iaW5lJywgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IgLiAnL2hlbHBlcnMnKTsNCgkJLy8gcmV0dXJuIHRoZSByZXN1bHQNCgkJcmV0dXJuIG5ldyBTdW1Db21iaW5lKCRpdGVtcyk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYWxjdWxhdGUoJGlkLCRkYXRhKQ0KCXsNCgkJaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSkpID09PSAkZGF0YSl7DQoJCQkvLyB3ZSBoYXZlIHZhbGlkIGRhdGEgbm93IGNoZWNrIGlmIHN0b3JlZCByZXN1bHQgbmVlZHMgdG8gYmUgdXBkYXRlZC4NCgkJCSRmaWxlTmFtZQk9IG1kNSgkZGF0YSk7DQoJCQkkZGF0YQkJPSB1bnNlcmlhbGl6ZShiYXNlNjRfZGVjb2RlKCRkYXRhKSk7DQoJCX0gZWxzZSB7DQoJCQkvLyBub3QgdmFsaWQgZGF0YSBmaXJzdCBnZXQgdGhlIHZhbGlkIGRhdGENCgkJCSRtb2RlbAkJPSBzZWxmOjpnZXRNb2RlbCgnY29tcGFueWRhdGEnKTsNCgkJCSRkYXRhIAkJPSAkbW9kZWwtPmdldEl0ZW0oKGludCkkaWQpOw0KCQkJLy8gd2UgaGF2ZSB2YWxpZCBkYXRhIG5vdyBjaGVjayBpZiBzdG9yZWQgcmVzdWx0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuDQoJCQkkZmlsZU5hbWUJPSBtZDUoYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJGRhdGEpKSk7DQoJCX0NCgkJLy8gc2V0IHNvbWUgZGVmYXVsdHMNCgkJJHBhcmFtcwk9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJJHBhdGgJPSAkcGFyYW1zLT5nZXQoJ3Jlc3VsdHBhdGgnLCBKUEFUSF9BRE1JTklTVFJBVE9SLicvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMnKTsNCgkJLy8gYnVpbGQgZnVsbCBwYXRoIHRvIGZpbGUNCgkJJGZ1bGxQYXRoID0gJHBhdGguJy8nLiRmaWxlTmFtZS4nLmpzb24nOw0KCQkvLyBjaGVjayBpZiBmaWxlIGV4aXN0cw0KCQlpZiAoZmlsZV9leGlzdHMoJGZ1bGxQYXRoKSAmJiAoKCRqc29uRmlsZSA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldENvbnRlbnQoJGZ1bGxQYXRoLCBGQUxTRSkpICE9PSBGQUxTRSkpDQoJCXsNCgkJCS8vIGdyZWF0IHdlIGFyZSBkb25lIHJldHVybiByZXN1bHRzDQoJCQlyZXR1cm4ganNvbl9kZWNvZGUoJGpzb25GaWxlKTsNCgkJfQ0KCQkvLyBkbyB0aGUgY2FsY3VsYXRpb24gYWdhaW4NCgkJJHJlc3VsdCA9IHNlbGY6OmRvQ2FsY3VsYXRpb24oJGRhdGEpOw0KCQkvLyBkaWQgd2UgZ2V0IGEgdmFsaWQgcmVzdWx0IHNldA0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHJlc3VsdCkgfHwgU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJHJlc3VsdCkpDQoJCXsNCgkJCS8vIG5vdyBzYXZlIGZvciBuZXh0IHRpbWUNCgkJCXNlbGY6OnNhdmVKc29uKCRyZXN1bHQsICRmdWxsUGF0aCwgJHBhdGgpOw0KCQkJLy8gcmV0dXJuIHJlc3VsdCBzZXQNCgkJCXJldHVybiAganNvbl9kZWNvZGUoanNvbl9lbmNvZGUoJHJlc3VsdCkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGRvQ2FsY3VsYXRpb24oJGRhdGEpDQoJew0KCQkvLyBkaWQgd2UgZ2V0IGEgdmFsaWQgcmVzdWx0IHNldA0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgdGhlIHN1bSBjbGFzcyBpcyBsb2FkZWQNCgkJCUpMb2FkZXI6OmltcG9ydCgnc3VtJywgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IgLiAnL2hlbHBlcnMnKTsNCgkJCS8vIHJldHVybiB0aGUgcmVzdWx0DQoJCQlyZXR1cm4gbmV3IFN1bSgkZGF0YSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogU2FmZXMganNvbiB0byBhIGZpbGUNCgkqDQoJKiBAaW5wdXQJICBvYmplY3QvYXJyYXkvanNvbiAgJGRhdGEgICAgICBEYXRhIHRvIGJlIHN0b3JlZA0KCSogQGlucHV0CSAgc3RyaW5nICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoIEZ1bGwgcGF0aCB0byBmaWxlDQoJKiBAaW5wdXQJICBzdHJpbmcgICAgICAgICAgICAgICAgICAkcGF0aCAgICAgIEZ1bGwgcGF0aCB0byBmb2xkZXINCgkqDQoJKiBAcmV0dXJucyAgYm9vbGVhbiBvbiBzdWNjZXNzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCA9IF9fRElSX18pDQoJew0KCQkvLyBjaGVjayBpZiBwYXRoIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJew0KCQkJLy8gaWYgbm90IHRoZSBtYWtlIHRoZSBwYXRoDQoJCQlta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB0aGUgc3RyaW5nIGlzIGpzb24NCgkJaWYgKCFzZWxmOjppc0pzb24oJGRhdGEpKQ0KCQl7DQoJCQkvLyBqc29uIGVuY29kZSBpZiBub3QganNvbg0KCQkJJGRhdGEgPSBqc29uX2VuY29kZSgkZGF0YSk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHRoaXMgaXMgYSBzdHJpbmcNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJew0KCQkJJGZwID0gZm9wZW4oJGZ1bGxQYXRoLCAndycpOw0KCQkJZndyaXRlKCRmcCwgJGRhdGEpOw0KCQkJZmNsb3NlKCRmcCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0pzb24oJHN0cmluZykNCgl7DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc3RyaW5nKSkNCgkJew0KCQkJanNvbl9kZWNvZGUoJHN0cmluZyk7DQoJCQlyZXR1cm4gKGpzb25fbGFzdF9lcnJvcigpID09PSBKU09OX0VSUk9SX05PTkUpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFVzZXJIYWNrKCkNCgl7DQoJCSRmaWxlcyA9IGFycmF5KA0KCQkJMCA9PiBhcnJheSgNCgkJCQkncGF0aCcgPT4gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fdXNlcnMvbW9kZWxzL3VzZXJzLnBocCcsDQoJCQkJJ3JlcGxhY2UnID0+IGFycmF5KA0KCQkJCQkiSk1vZGVsTGlzdFxue1xuXHQvKioiID0+ICJKTW9kZWxMaXN0XG57XG5cdC8qXG5cdCogQSBWRE0gaGFjayB0byByZXN0cmljdCB1c2VycyBiYXNlZCBvbiB1c2VyJ3MgcmVsYXRpb24gdG8gdGhlaXIgY29tcG9uZW50XG5cdCpcblx0KiBUaGlzIGp1c3QgcHJvb2ZzIHRoZSB0aGUgaGFjayBpcyBpbnBsYWNlXG5cdCovXG5cdHB1YmxpYyBcJHJlc3RyaWN0VXNlcnMgPSB0cnVlO1xuXG5cdC8qKiIsDQoJCQkJCSJcJGV4Y2x1ZGVkID0ganNvbl9kZWNvZGUoYmFzZTY0X2RlY29kZShcJGFwcC0+aW5wdXQtPmdldCgnZXhjbHVkZWQnLCAnJywgJ0JBU0U2NCcpKSk7IiA9PiAiXCRleGNsdWRlZCA9IGpzb25fZGVjb2RlKGJhc2U2NF9kZWNvZGUoXCRhcHAtPmlucHV0LT5nZXQoJ2V4Y2x1ZGVkJywgJycsICdCQVNFNjQnKSkpO1xuXHRcdC8vIGFkZCB0aGUgZ2xvYmFsIGV4Y2x1ZGUgZm9yIFtbW2NvbXBvbmVudF1dXVxuXHRcdGlmIChcJHRoaXMtPnJlc3RyaWN0VXNlcnMgJiYgIUZhY3Rvcnk6OmdldFVzZXIoKS0+YXV0aG9yaXNlKCdjb3JlLm9wdGlvbnMnLCAnY29tX1tbW2NvbXBvbmVudF1dXScpKVxuXHRcdHtcblx0XHRcdEpMb2FkZXI6OnJlZ2lzdGVyKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9bW1tjb21wb25lbnRdXV0ucGhwJyk7XG5cdFx0XHQvLyBjaGVjayBpZiB0aGUgY29tcG9uZW50IGlzIGluc3RhbGxlZFxuXHRcdFx0aWYgKGNsYXNzX2V4aXN0cygnW1tbQ29tcG9uZW50XV1dSGVscGVyJykpXG5cdFx0XHR7XG5cdFx0XHRcdFwkZXhjbHVkZWRHbG9iYWwgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6Om5vdEhpc1VzZXJzKCk7XG5cdFx0XHRcdGlmIChcJGV4Y2x1ZGVkR2xvYmFsKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCRleGNsdWRlZCA9IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6Om1lcmdlKGFycmF5KFwkZXhjbHVkZWRHbG9iYWwsXCRleGNsdWRlZCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSIpDQoJCQkpLA0KCQkJMSA9PiBhcnJheSgNCgkJCQkncGF0aCcgPT4gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fdXNlcnMvbW9kZWxzL3VzZXIucGhwJywNCgkJCQkncmVwbGFjZScgPT4gYXJyYXkoDQoJCQkJCSIvLyBUaGUgdXNlciBzaG91bGQgbm90IGJlIGFibGUgdG8gc2V0IHRoZSByZXF1aXJlUmVzZXQgdmFsdWUgb24gdGhlaXIgb3duIGFjY291bnQiID0+ICJpZiAoIUZhY3Rvcnk6OmdldFVzZXIoKS0+YXV0aG9yaXNlKCdjb3JlLmFkbWluJywgJ2NvbV9bW1tjb21wb25lbnRdXV0nKSAmJiAhRmFjdG9yeTo6Z2V0VXNlcigpLT5hdXRob3Jpc2UoJ2NvcmUub3B0aW9ucycsICdjb21fW1tbY29tcG9uZW50XV1dJykpDQoJCXsNCgkJCS8vIGxvYWQgb3VyIGhlbHBlciBjbGFzcyBmb3IgQ29zdCBCZW5lZml0IFByb2plY3Rpb24gQ29tcG9uZW50DQoJCQlKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KCQkJLy8gY2hlY2sgaWYgdGhlIGNvbXBvbmVudCBpcyBpbnN0YWxsZWQNCgkJCWlmIChjbGFzc19leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicpKQ0KCQkJew0KCQkJCVwkaXMgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OnVzZXJJcygpOw0KCQkJCXN3aXRjaChcJGlzKQ0KCQkJCXsNCgkJCQkJY2FzZSAxOg0KCQkJCQljYXNlIDI6DQoJCQkJCWNhc2UgMzoNCgkJCQkJCS8vIERpc2FibGUgZmllbGRzIGZvciBkaXNwbGF5Lg0KCQkJCQkJXCRmb3JtLT5yZW1vdmVHcm91cCgncGFyYW1zJyk7DQoJCQkJCQkvLyBkaXNhYmxlIHNvbWUgZmllbGRzDQoJCQkJCQlcJGZvcm0tPnNldEZpZWxkQXR0cmlidXRlKCdzZW5kRW1haWwnLCAnZGlzYWJsZWQnLCAndHJ1ZScpOw0KCQkJCQkJXCRmb3JtLT5zZXRGaWVsZEF0dHJpYnV0ZSgnc2VuZEVtYWlsJywgJ2ZpbHRlcicsICd1bnNldCcpOw0KCQkJCQkJXCRmb3JtLT5yZW1vdmVGaWVsZCgnc2VuZEVtYWlsJyk7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCS8vIFRoZSB1c2VyIHNob3VsZCBub3QgYmUgYWJsZSB0byBzZXQgdGhlIHJlcXVpcmVSZXNldCB2YWx1ZSBvbiB0aGVpciBvd24gYWNjb3VudCIsDQoJCQkJCSJcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5tYW5hZ2UnLCAnY29tX3VzZXJzJykiID0+ICJcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5tYW5hZ2UnLCAnY29tX3VzZXJzJykgJiYgIFwkdXNlci0+YXV0aG9yaXNlKCdjb3JlLm9wdGlvbnMnLCAnY29tX1tbW2NvbXBvbmVudF1dXScpIikNCgkJCSksDQoJCQkyID0+IGFycmF5KA0KCQkJCSdwYXRoJyA9PiBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV91c2Vycy9jb250cm9sbGVycy91c2VyLnBocCcsDQoJCQkJJ3JlcGxhY2UnID0+IGFycmF5KA0KCQkJCQkicmV0dXJuIHBhcmVudDo6YWxsb3dFZGl0KFwkZGF0YSwgXCRrZXkpOyIgPT4gImlmICghRmFjdG9yeTo6Z2V0VXNlcigpLT5hdXRob3Jpc2UoJ2NvcmUuYWRtaW4nLCAnY29tX1tbW2NvbXBvbmVudF1dXScpICYmICFGYWN0b3J5OjpnZXRVc2VyKCktPmF1dGhvcmlzZSgnY29yZS5vcHRpb25zJywgJ2NvbV9bW1tjb21wb25lbnRdXV0nKSkNCgkJew0KCQkJLy8gbG9hZCBvdXIgaGVscGVyIGNsYXNzIGZvciBDb3N0IEJlbmVmaXQgUHJvamVjdGlvbiBDb21wb25lbnQNCgkJCUpMb2FkZXI6OnJlZ2lzdGVyKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9bW1tjb21wb25lbnRdXV0ucGhwJyk7DQoJCQkvLyBjaGVjayBpZiB0aGUgY29tcG9uZW50IGlzIGluc3RhbGxlZA0KCQkJaWYgKGNsYXNzX2V4aXN0cygnW1tbQ29tcG9uZW50XV1dSGVscGVyJykpDQoJCQl7DQoJCQkJXCRoaXNVc2VycyA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6aGlzVXNlcnMoKTsNCgkJCQlpZiAoIWluX2FycmF5KFwkZGF0YVtcJGtleV0sXCRoaXNVc2VycykpDQoJCQkJew0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIHBhcmVudDo6YWxsb3dFZGl0KFwkZGF0YSwgXCRrZXkpOyIpDQoJCQkpLA0KCQkJMyA9PiBhcnJheSgNCgkJCQkncGF0aCcgPT4gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fdXNlcnMvdmlld3MvdXNlcnMvdmlldy5odG1sLnBocCcsDQoJCQkJJ3JlcGxhY2UnID0+IGFycmF5KA0KCQkJCQkiaWYgKFwkY2FuRG8tPmdldCgnY29yZS5jcmVhdGUnKSkiID0+ICJpZiAoXCRjYW5Eby0+Z2V0KCdjb3JlLmNyZWF0ZScpICYmIFwkdXNlci0+YXV0aG9yaXNlKCdjb3JlLm9wdGlvbnMnLCAnY29tX2Nvc3RiZW5lZml0cHJvamVjdGlvbicpKSIpDQoJCQkpLA0KCQkJNCA9PiBhcnJheSgNCgkJCQkncGF0aCcgPT4gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fdXNlcnMvdmlld3MvdXNlcnMvdmlldy5odG1sLnBocCcsDQoJCQkJJ3JlcGxhY2UnID0+IGFycmF5KAkJCQkJDQoJCQkJCSIvLyBBZGQgYSBiYXRjaCBidXR0b25cblx0XHRpZiAoXCR1c2VyLT5hdXRob3Jpc2UoJ2NvcmUuY3JlYXRlJywgJ2NvbV91c2VycycpIiA9PiAiLy8gQWRkIGEgYmF0Y2ggYnV0dG9uIG9ubHkgaWYgdXNlciBhbHNvIGhhcyBhZG1pbiByaWdodCBpbiBjb21fY29zdGJlbmVmaXRwcm9qZWN0aW9uXG5cdFx0aWYgKFwkdXNlci0+YXV0aG9yaXNlKCdjb3JlLmNyZWF0ZScsICdjb21fdXNlcnMnKVxuXHRcdFx0JiYgXCR1c2VyLT5hdXRob3Jpc2UoJ2NvcmUub3B0aW9ucycsICdjb21fY29zdGJlbmVmaXRwcm9qZWN0aW9uJykiKQ0KCQkJKQ0KCQkpOw0KCQkvLyBjaGVjayBpZiBoYWNrIGlzIHN0aWxsIHNldA0KCQlyZXR1cm4gc2VsZjo6c2V0SGFjaygkZmlsZXMpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0SGFjaygkZmlsZXMpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZpbGVzKSkNCgkJew0KCQkJJGNoZWNraW5nID0gYXJyYXkoKTsNCgkJCS8vIGdldCB0aGUgZmlsZSB0b29scw0KCQkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uZmlsZScpOw0KCQkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKQ0KCQkJew0KCQkJCSR1cGRhdGUgPSBmYWxzZTsNCgkJCQkvLyBnZXQgcmVsYXRlZCBmaWxlcw0KCQkJCSRhY3R1YWxGaWxlID0gSkZpbGU6OnJlYWQoJGZpbGVbJ3BhdGgnXSk7DQoJCQkJLy8gY2hlY2sgaWYgaGFjayBpcyBzdGlsbCBzZXQNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZpbGVbJ3JlcGxhY2UnXSkpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkZmlsZVsncmVwbGFjZSddIGFzICRvcmlnaW5hbCA9PiAkdXBkYXRlU3RyaW5nKQ0KCQkJCQl7DQoJCQkJCQlpZiAoc3RycG9zKCRhY3R1YWxGaWxlLCR1cGRhdGVTdHJpbmcpID09PSBmYWxzZSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBzZXQgdGhlIGhhY2sgYWdhaW4NCgkJCQkJCQkkdXBkYXRlID0gdHJ1ZTsNCgkJCQkJCQkkYWN0dWFsRmlsZSA9IHN0cl9yZXBsYWNlKCRvcmlnaW5hbCwgJHVwZGF0ZVN0cmluZywgJGFjdHVhbEZpbGUpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkdXBkYXRlKQ0KCQkJCXsNCgkJCQkJJGRvbmVbJGZpbGVbJ3BhdGgnXV0gPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjp3cml0ZSgkZmlsZVsncGF0aCddLCRhY3R1YWxGaWxlKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGRvbmVbJGZpbGVbJ3BhdGgnXV0gPSB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkZG9uZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB3cml0ZUZpbGUoJHBhdGgsJGRhdGEpDQoJew0KCQkkZmggPSBmb3BlbigkcGF0aCwgInciKTsNCgkJaWYgKCFpc19yZXNvdXJjZSgkZmgpKQ0KCQl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJaWYgKGZ3cml0ZSgkZmgsICRkYXRhKSkNCgkJew0KCQkJLy8gY2xvc2UgZmlsZS4NCgkJCWZjbG9zZSgkZmgpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJLy8gY2xvc2UgZmlsZS4NCgkJZmNsb3NlKCRmaCk7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIEdldCBDU1YgSGVhZGVycw0KCSovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWxlSGVhZGVyc0NTVigkcGF0aCkNCgl7DQoJCS8vIHNldCB0aGUgaGVhZGVycw0KCQlpZigoJGhhbmRsZSA9IGZvcGVuKCRwYXRoLCAncicpKSAhPT0gZmFsc2UpDQoJCXsNCgkJCSRyZXN1bHQgPSBmZ2V0Y3N2KCRoYW5kbGUpOw0KCQkJZmNsb3NlKCRoYW5kbGUpOw0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRyZXN1bHQpKQ0KCQkJew0KCQkJCSRrZXkgPSAnQSc7DQoJCQkJZm9yZWFjaCAoJHJlc3VsdCBhcyAkaGVhZGVyKQ0KCQkJCXsNCgkJCQkJJGhlYWRlcnNbJGtleV0gPSAkaGVhZGVyOw0KCQkJCQkka2V5Kys7DQoJCQkJfQ0KCQkJCXJldHVybiAkaGVhZGVyczsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJVGhlIHVzZXIgbm90aWNlIGluZm8gRmlsZSBOYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXNlcm5vdGljZSA9IGZhbHNlOw0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWxlUGF0aCgkdHlwZSwgJG5hbWUgPSAnbGlzdGluZycsICRrZXkgPSAnJywgJGZpbGVUeXBlID0gJy5qc29uJywgJFBBVEggPSBKUEFUSF9DT01QT05FTlRfU0lURSkNCgl7DQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHskdHlwZS4kbmFtZX0pKQ0KCQl7DQoJCQkvLyBHZXQgbG9jYWwga2V5DQoJCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkJLy8gc2V0IHRoZSBuYW1lDQoJCQkkZmlsZU5hbWUgPSBtZDUoJHR5cGUuJG5hbWUuJGxvY2Fsa2V5LiRrZXkpOw0KCQkJLy8gc2V0IGZpbGUgcGF0aAkJCQ0KCQkJc2VsZjo6JHskdHlwZS4kbmFtZX0gPSAkUEFUSC4nL2hlbHBlcnMvJy4kZmlsZU5hbWUuJGZpbGVUeXBlOw0KCQl9DQoJCS8vIHJldHVybiB0aGUgcGF0aA0KCQlyZXR1cm4gc2VsZjo6JHskdHlwZS4kbmFtZX07DQoJfQ0KDQoJLyoqDQoJKiAJZ2V0IHRoZSBsb2NhbGtleQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGxvY2Fsa2V5ID0gZmFsc2U7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMb2NhbEtleSgpDQoJew0KCQlpZiAoIXNlbGY6OiRsb2NhbGtleSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBtYWluIGtleQ0KCQkJc2VsZjo6JGxvY2Fsa2V5ID0gbWQ1KEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdiYXNpYycsICdsb2NhbEtleTM0ZmRXRWtsJykpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokbG9jYWxrZXk7DQoJfQ==', '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXNlcklzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQl9DQoJCS8vIGdldCB0aGlzIHVzZXIgZ3JvdXBzDQoJCSRncm91cHMJPSAoYXJyYXkpICR1c2VyLT5nZXRBdXRob3Jpc2VkR3JvdXBzKCk7DQoJCS8vIGdldCBwYXJhbXMNCgkJJHBhcmFtcwk9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJLy8gZ2V0IHRhcmdldCBncm91cHMNCgkJJGNvdW50cnlHcm91cHMgCQkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnY291bnRyeXVzZXInKTsNCgkJJHNlcnZpY2Vwcm92aWRlckdyb3VwcwkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnc2VydmljZXByb3ZpZGVydXNlcicpOw0KCQkkbWVtYmVyR3JvdXBzIAkJCT0gKGFycmF5KSAkcGFyYW1zLT5nZXQoJ21lbWJlcnVzZXInKTsNCgkJLy8gbm93IGNoZWNrIGluIHdoYXQgZ3JvdXAgdGhpcyB1c2VyIGJlbG9uZ3MNCgkJaWYgKGFycmF5X2ludGVyc2VjdCgkY291bnRyeUdyb3VwcywgJGdyb3VwcykpDQoJCXsNCgkJCS8vIGlzIGNvdW50cnkNCgkJCXJldHVybiAzOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRzZXJ2aWNlcHJvdmlkZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBzZXJ2aWNlcHJvdmlkZXINCgkJCXJldHVybiAyOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBtZW1iZXINCgkJCXJldHVybiAxOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrSW50ZXJ2ZXRpb25BY2Nlc3MoJGlkLCAkc2hhcmUgPSBudWxsLCAkY29tcCA9IG51bGwpDQoJew0KICAgICAgICAgICAgICAgIC8vIHNldCBzaGFyZSB2YWx1ZSBpZiBub3Qgc2V0DQogICAgICAgICAgICAgICAgaWYgKCEkc2hhcmUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNoYXJlID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ3NoYXJlJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIGJhc2VkIG9uIHNoYXJlZCB3ZSBzZXQgbmVlZGVkIHZhbHVlcw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoaXMgaW50ZXJ2ZW50aW9ucyBjb21wYW55IChvd25lcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkY29tcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21wID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ2NvbXBhbnknKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgaGlzIGNvbXBhbmllcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGFuaWVzID0gc2VsZjo6aGlzQ29tcGFuaWVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB1c2VyIHR5cGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXJUeXBlID0gc2VsZjo6dXNlcklzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gYmFzZWQgb24gc2hhcmVkIHZhbHVlIHdlIHdpbGwgcmVzcG9uZA0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2hhcmluZyBpcyAxIG9ubHkgb3duZXIgbWF5IHNlZSBpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHVzZXJUeXBlID09IDEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCRjb21wLCAkY29tcGFuaWVzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaGFyaW5nIGlzIDIgb25seSBvd25lciBhbmQgc2VydmljZSBwcm92aWRlciBtYXkgc2VlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1c2VyVHlwZSA9PSAxIHx8ICR1c2VyVHlwZSA9PSAyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkY29tcCwgJGNvbXBhbmllcykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RIaXNVc2VycygkaWQgPSBudWxsKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IGFsbCB0aGUgdXNlcnMgdG8ga2VlcA0KCQkka2VlcFVzZXJzID0gc2VsZjo6aGlzVXNlcnMoJGlkKTsNCgkJaWYgKGlzX2FycmF5KCRrZWVwVXNlcnMpKQ0KCQl7DQoJCQkvLyByZXR1cm4gdGhvc2Ugbm90IHRvIGtlZXANCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ2lkJywka2VlcFVzZXJzLCd1c2VycycsJ2lkJywnTk9UIElOJywnJyk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGlzVXNlcnMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBoaW1zZWxmKQ0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuIGFycmF5KCRpZCk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvbXBhbmllcyB1c2VycyB0aGF0IGJlbG9uZyB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgaGltc2VsZikNCgkJCWNhc2UgMjoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwCQk9IHNlbGY6OmdldElkcygnaWQnLCRjb21wYW5pZXMsJ2NvbXBhbnknLCd1c2VyJyk7DQoJCQkvLyBub3cgY2hlY2sgdGhlIHJlc3VsdA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRrZWVwKSkNCgkJCXsNCgkJCQkka2VlcFtdID0gJGlkOw0KCQkJCXJldHVybiBhcnJheV91bmlxdWUoJGtlZXApOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCQkvLyBjb3VudHJ5IChvbmx5IGxvYWQgY29tcGFuaWVzIGFuZCBzZXJ2aWNlIHByb3ZpZGVycyB0aGF0IGJlbG9uZyB0byB0aGUgY291bnRyeSkNCgkJCWNhc2UgMzoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwQwkJPSBzZWxmOjpnZXRJZHMoJ2lkJywkY29tcGFuaWVzLCdjb21wYW55JywndXNlcicpOw0KCQkJJHNlcnZpY2UJPSBzZWxmOjpoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCk7DQoJCQkka2VlcFMJCT0gc2VsZjo6Z2V0SWRzKCdpZCcsJHNlcnZpY2UsJ3NlcnZpY2VfcHJvdmlkZXInLCd1c2VyJyk7DQoJCQkvLyBtZXJnZSB0aGVzZSB2YWx1ZXMNCgkJCSRrZWVwCQk9IHNlbGY6Om1lcmdlQXJyYXlzKGFycmF5KCRrZWVwQywka2VlcFMpKTsNCgkJCS8vIG5vdyBjaGVjayB0aGUgcmVzdWx0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGtlZXApKQ0KCQkJew0KCQkJCSRrZWVwW10gPSAkaWQ7DQoJCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgka2VlcCk7DQoJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNDb21wYW5pZXMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIG1lbWJlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY29tcGFueScpOw0KCQkJYnJlYWs7DQoJCQkvLyBzZXJ2ZXMgcHJvdmlkZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIpDQoJCQljYXNlIDI6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdzZXJ2aWNlX3Byb3ZpZGVyJyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnc2VydmljZV9wcm92aWRlcicpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvdW50cnkpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdjb3VudHJ5JyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY291bnRyeScpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRpZCA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJaWYgKDEgPT0gJGlzKSAvLyBtZW1iZXINCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygndXNlcicsJGlkLCdjb21wYW55Jywnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCWVsc2VpZiAoMiA9PSAkaXMpIC8vIHNlcnZlcyBwcm92aWRlcg0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoc2VsZjo6Z2V0SWQoJ3NlcnZpY2VfcHJvdmlkZXInLCRpZCkpOw0KCQl9DQoJCWVsc2VpZiAoMyA9PSAkaXMpIC8vIGNvdW50cnkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygnY291bnRyeScsc2VsZjo6Z2V0SWRzKCd1c2VyJywkaWQsJ2NvdW50cnknKSwnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0NvdW50cmllcygkdXNlcklkID0gbnVsbCwgJGlkID0gbnVsbCwgJGlzX3R5cGUgPSBudWxsKQ0KCXsNCgkJaWYoJHVzZXJJZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQllbHNlaWYoJGlkID4gMCAmJiAkaXNfdHlwZSkNCgkJew0KCQkJJHVzZXJJZCA9IHNlbGY6OmdldElkKCRpc190eXBlLCRpZCwnaWQnLCd1c2VyJyk7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdXNlcklkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJc3dpdGNoKCRpcykNCgkJew0KCQkJLy8gbWVtYmVyIChvbmx5IGxvYWQgY291bnRyaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBtZW1iZXIgdXNlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCR1c2VySWQsJ2NvbXBhbnknLCdjb3VudHJ5Jyk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvdW50cnkgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgdXNlcikNCgkJCWNhc2UgMjoNCgkJCXJldHVybiBhcnJheShzZWxmOjpnZXRJZCgnc2VydmljZV9wcm92aWRlcicsJHVzZXJJZCwndXNlcicsJ2NvdW50cnknKSk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb250cnllIHRoYXQgYmVsb25nIHRvIHRoZSBjb3VudHJ5IHVzZXIpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCd1c2VyJywkdXNlcklkLCdjb3VudHJ5JywnaWQnKTsNCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0N1cnJlbmNpZXMoJHVzZXJJZCA9IG51bGwsICRpZCA9IG51bGwsICRpc190eXBlID0gbnVsbCkNCgl7DQoJCSRjb3VudHJpZXMgPSBzZWxmOjpoaXNDb3VudHJpZXMoJHVzZXJJZCwkaWQsJGlzX3R5cGUpOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvdW50cmllcykpDQoJCXsNCgkJCSRjdXJyZW5jaWVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRjb3VudHJpZXMgYXMgJGNvdW50cnkpDQoJCQl7DQoJCQkJLy8gZ2V0IGN1cnJlbmN5IGlkDQoJCQkJJGN1cnJlbmNpZXNbXSA9IHNlbGY6OmdldFZhcignY3VycmVuY3knLCBzZWxmOjpnZXRWYXIoJ2NvdW50cnknLCAkY291bnRyeSwgJ2lkJywgJ2N1cnJlbmN5JyksICdjb2RldGhyZWUnLCAnaWQnKTsNCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY2llcykpDQoJCQl7DQoJCQkJcmV0dXJuICRjdXJyZW5jaWVzOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN1cnJlbmN5RGV0YWlscygkaWQgPSBmYWxzZSkNCgl7DQoJCWlmICghJGlkKQ0KCQl7DQoJCQkkaWQgPSBzZWxmOjpoaXNDdXJyZW5jaWVzKCk7DQoJCX0NCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRpZCkpDQoJCXsNCgkJCSRpZHMgPSBhcnJheV92YWx1ZXMoJGlkKTsNCgkJCSRpZCA9ICRpZFswXTsNCgkJfQ0KCQlpZihpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQknYS5kZWNpbWFsc3ltYm9sJywnYS5wb3NpdGl2ZXN0eWxlJywnYS5uZWdhdGl2ZXN0eWxlJyksDQoJCQkJYXJyYXkoCSdjdXJyZW5jeV9pZCcsJ2N1cnJlbmN5X25hbWUnLCdjdXJyZW5jeV9jb2RldGhyZWUnLCdjdXJyZW5jeV9udW1lcmljY29kZScsJ2N1cnJlbmN5X3N5bWJvbCcsDQoJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCSdjdXJyZW5jeV9uZWdhdGl2ZXN0eWxlJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2N1cnJlbmN5JywgJ2EnKSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZU1vbmV5KCRudW1iZXIsJGN1cnJlbmN5ID0gZmFsc2UpDQoJew0KCQkvLyBmaXJzdCBjaGVjayBpZiB3ZSBoYXZlIGEgbnVtYmVyDQoJCWlmIChpc19udW1lcmljKCRudW1iZXIpKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgbmVnYXRpdmUgZmluZGVyIGZpbGUNCgkJCWluY2x1ZGVfb25jZSAnbmVnYXRpdmVmaW5kZXIucGhwJzsNCgkJCS8vIGNoZWNrIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUNCgkJCSRuZWdhdGl2ZUZpbmRlck9iaiA9IG5ldyBOZWdhdGl2ZUZpbmRlcihuZXcgRXhwcmVzc2lvbigiJG51bWJlciIpKTsNCgkJCSRuZWdhdGl2ZSA9ICRuZWdhdGl2ZUZpbmRlck9iai0+aXNJdE5lZ2F0aXZlKCkgPyBUUlVFIDogRkFMU0U7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdFUlJPUiEgKCcuJG51bWJlci4nKSBpcyBub3QgYSBudW1iZXIhJyk7DQoJCX0NCgkJLy8gbm90IHNldHVwIHRoZSBjdXJyZW5jeQ0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGN1cnJlbmN5KSkNCgkJew0KCQkJaWYoIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfcG9zaXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfbmVnYXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFsc3ltYm9sKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9zeW1ib2wpKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkY3VycmVuY3ktPmN1cnJlbmN5X2lkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmN1cnJlbmN5X2lkKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc3NldCgkY3VycmVuY3ktPmlkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmlkKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGN1cnJlbmN5ID0gc2VsZjo6Y3VycmVuY3lEZXRhaWxzKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9CQ0KCQllbHNlDQoJCXsNCgkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3kpOw0KCQl9DQoJCS8vIHNldCB0aGUgbnVtYmVyIHRvIGN1cnJlbmN5DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY3kpKQ0KCQl7DQoJCQlpZiAoISRuZWdhdGl2ZSkNCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9wb3NpdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJysnOw0KCQkJfQ0KCQkJZWxzZSANCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9uZWdhdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJy0nOw0KCQkJCSRudW1iZXIgPSBhYnMoJG51bWJlcik7DQoJCQl9DQoJCQkkc2V0dXBOdW1iZXIgPSBudW1iZXJfZm9ybWF0KChmbG9hdCkkbnVtYmVyLCAoaW50KSRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlLCAkY3VycmVuY3ktPmN1cnJlbmN5X2RlY2ltYWxzeW1ib2wsICcgJyk7IC8vJGN1cnJlbmN5LT5jdXJyZW5jeV90aG91c2FuZHMgVE9ETyk7DQoJCQkkc2VhcmNoID0gYXJyYXkoJ3tzaWdufScsICd7bnVtYmVyfScsICd7c3ltYm9sfScpOw0KCQkJJHJlcGxhY2UgPSBhcnJheSgkc2lnbiwgJHNldHVwTnVtYmVyLCAkY3VycmVuY3ktPmN1cnJlbmN5X3N5bWJvbCk7DQoJCQkkbW9uZXlNYWRlID0gc3RyX3JlcGxhY2UgKCRzZWFyY2gsJHJlcGxhY2UsJGZvcm1hdCk7DQoNCgkJCXJldHVybiAkbW9uZXlNYWRlOw0KCQl9DQoJCXJldHVybiAkbnVtYmVyOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2F1c2VSaXNrRGV0YWlscygkaWQsJGRldGFpbHMgPSBudWxsKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGV0YWlscykpDQoJCXsNCgkJCSRkZXRhaWxzID0gYXJyYXkoJ25hbWUnLCdhbGlhcycsJ2Rlc2NyaXB0aW9uJywncmVmJyk7DQoJCX0NCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJGRldGFpbHMpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY2F1c2VyaXNrJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHVibGlzaGVkJykgLiAnID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJZCgkdGFibGUsICR3aGVyZSA9IG51bGwgLCAkd2hlcmVTdHJpbmcgPSAndXNlcicsICR3aGF0ID0gJ2lkJykNCgl7DQoJCWlmKCEkd2hlcmUpDQoJCXsNCgkJCSR3aGVyZSA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCX0NCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJHdoYXQpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuJHRhYmxlKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJHdoZXJlU3RyaW5nKSAuICcgPSAnLihpbnQpICR3aGVyZSk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldElkcygkd2hlcmVTdHJpbmcsJHdoZXJlLCR0YWJsZSwkd2hhdCA9ICdpZCcsJG9wZXJhdG9yID0gJ0lOJywkbWFpbl8gPSAnW1tbY29tcG9uZW50XV1dXycpDQoJew0KCQlpZiAoIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR3aGVyZSkgJiYgJHdoZXJlID4gMCkNCgkJew0KCQkJJHdoZXJlID0gYXJyYXkoJHdoZXJlKTsNCgkJfQ0KDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkd2hlcmUpKQ0KCQl7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJHdoYXQpKSk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfXycuJG1haW5fLiR0YWJsZSkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgkd2hlcmVTdHJpbmcpIC4gJyAnLiRvcGVyYXRvci4nICgnIC4gaW1wbG9kZSgnLCcsJHdoZXJlKSAuICcpJyk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQlyZXR1cm4gYXJyYXlfdW5pcXVlKCRkYi0+bG9hZENvbHVtbigpKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDb3VudHJ5TmFtZSgkaWQpDQoJew0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnbmFtZScpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJy4oaW50KSAkaWQpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21iaW5lKCRpdGVtcykNCgl7DQoJCS8vIG1ha2Ugc3VyZSB0aGUgc3VtIGNsYXNzIGlzIGxvYWRlZA0KCQlKTG9hZGVyOjppbXBvcnQoJ3N1bWNvbWJpbmUnLCBKUEFUSF9DT01QT05FTlRfQURNSU5JU1RSQVRPUiAuICcvaGVscGVycycpOw0KCQkvLyByZXR1cm4gdGhlIHJlc3VsdA0KCQlyZXR1cm4gbmV3IFN1bUNvbWJpbmUoJGl0ZW1zKTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbGN1bGF0ZSgkaWQsJGRhdGEpDQoJew0KCQlpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkYXRhKSkgPT09ICRkYXRhKXsNCgkJCS8vIHdlIGhhdmUgdmFsaWQgZGF0YSBub3cgY2hlY2sgaWYgc3RvcmVkIHJlc3VsdCBuZWVkcyB0byBiZSB1cGRhdGVkLg0KCQkJJGZpbGVOYW1lCT0gbWQ1KCRkYXRhKTsNCgkJCSRkYXRhCQk9IHVuc2VyaWFsaXplKGJhc2U2NF9kZWNvZGUoJGRhdGEpKTsNCgkJfSBlbHNlIHsNCgkJCS8vIG5vdCB2YWxpZCBkYXRhIGZpcnN0IGdldCB0aGUgdmFsaWQgZGF0YQ0KCQkJJG1vZGVsCQk9IHNlbGY6OmdldE1vZGVsKCdjb21wYW55ZGF0YScpOw0KCQkJJGRhdGEgCQk9ICRtb2RlbC0+Z2V0SXRlbSgoaW50KSRpZCk7DQoJCQkvLyB3ZSBoYXZlIHZhbGlkIGRhdGEgbm93IGNoZWNrIGlmIHN0b3JlZCByZXN1bHQgbmVlZHMgdG8gYmUgdXBkYXRlZC4NCgkJCSRmaWxlTmFtZQk9IG1kNShiYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkZGF0YSkpKTsNCgkJfQ0KCQkvLyBzZXQgc29tZSBkZWZhdWx0cw0KCQkkcGFyYW1zCT0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQkkcGF0aAk9ICRwYXJhbXMtPmdldCgncmVzdWx0cGF0aCcsIEpQQVRIX0FETUlOSVNUUkFUT1IuJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycycpOw0KCQkvLyBidWlsZCBmdWxsIHBhdGggdG8gZmlsZQ0KCQkkZnVsbFBhdGggPSAkcGF0aC4nLycuJGZpbGVOYW1lLicuanNvbic7DQoJCS8vIGNoZWNrIGlmIGZpbGUgZXhpc3RzDQoJCWlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpICYmICgoJGpzb25GaWxlID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0Q29udGVudCgkZnVsbFBhdGgsIEZBTFNFKSkgIT09IEZBTFNFKSkNCgkJew0KCQkJLy8gZ3JlYXQgd2UgYXJlIGRvbmUgcmV0dXJuIHJlc3VsdHMNCgkJCXJldHVybiBqc29uX2RlY29kZSgkanNvbkZpbGUpOw0KCQl9DQoJCS8vIGRvIHRoZSBjYWxjdWxhdGlvbiBhZ2Fpbg0KCQkkcmVzdWx0ID0gc2VsZjo6ZG9DYWxjdWxhdGlvbigkZGF0YSk7DQoJCS8vIGRpZCB3ZSBnZXQgYSB2YWxpZCByZXN1bHQgc2V0DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0KSB8fCBTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0KSkNCgkJew0KCQkJLy8gbm93IHNhdmUgZm9yIG5leHQgdGltZQ0KCQkJc2VsZjo6c2F2ZUpzb24oJHJlc3VsdCwgJGZ1bGxQYXRoLCAkcGF0aCk7DQoJCQkvLyByZXR1cm4gcmVzdWx0IHNldA0KCQkJcmV0dXJuICBqc29uX2RlY29kZShqc29uX2VuY29kZSgkcmVzdWx0KSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZG9DYWxjdWxhdGlvbigkZGF0YSkNCgl7DQoJCS8vIGRpZCB3ZSBnZXQgYSB2YWxpZCByZXN1bHQgc2V0DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIG1ha2Ugc3VyZSB0aGUgc3VtIGNsYXNzIGlzIGxvYWRlZA0KCQkJSkxvYWRlcjo6aW1wb3J0KCdzdW0nLCBKUEFUSF9DT01QT05FTlRfQURNSU5JU1RSQVRPUiAuICcvaGVscGVycycpOw0KCQkJLy8gcmV0dXJuIHRoZSByZXN1bHQNCgkJCXJldHVybiBuZXcgU3VtKCRkYXRhKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCA9IF9fRElSX18pDQoJew0KCQkvLyBjaGVjayBpZiBwYXRoIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJew0KCQkJLy8gaWYgbm90IHRoZSBtYWtlIHRoZSBwYXRoDQoJCQlta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB0aGUgc3RyaW5nIGlzIGpzb24NCgkJaWYgKCFzZWxmOjppc0pzb24oJGRhdGEpKQ0KCQl7DQoJCQkvLyBqc29uIGVuY29kZSBpZiBub3QganNvbg0KCQkJJGRhdGEgPSBqc29uX2VuY29kZSgkZGF0YSk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHRoaXMgaXMgYSBzdHJpbmcNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJew0KCQkJJGZwID0gZm9wZW4oJGZ1bGxQYXRoLCAndycpOw0KCQkJZndyaXRlKCRmcCwgJGRhdGEpOw0KCQkJZmNsb3NlKCRmcCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0pzb24oJHN0cmluZykNCgl7DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc3RyaW5nKSkNCgkJew0KCQkJanNvbl9kZWNvZGUoJHN0cmluZyk7DQoJCQlyZXR1cm4gKGpzb25fbGFzdF9lcnJvcigpID09PSBKU09OX0VSUk9SX05PTkUpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKglzZXQgZ3JvdXBzIG5hbWVzDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRHcm91cE5hbWVzKCRncm91cHMpDQoJew0KCQkvLyBjaGFuZ2UgYXJyYXkgb2YgZ3JvdXAgaWRzIHRvIHN0cmluZyBvZiBncm91cCBuYW1lcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdyb3VwcykpDQoJCXsNCgkJCSRncm91cHNOYW1lcyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkZ3JvdXBzIGFzICRncm91cCkNCgkJCXsNCgkJCQkkZ3JvdXBzTmFtZXNbXSA9IHNlbGY6OmdldEdyb3VwTmFtZSgkZ3JvdXApOw0KCQkJfQ0KCQkJcmV0dXJuIGltcGxvZGUoJywgJywkZ3JvdXBzTmFtZXMpOw0KCQl9DQoJCXJldHVybiAnJzsNCgl9', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbmFtaWJpYS9DQlAtSm9vbWxhLTMtQ29tcG9uZW50L21hc3Rlci9hZG1pbi9hc3NldHMvaW1hZ2VzL3ZkbS1jb21wb25lbnQucG5nICJUaGUgIyMjQ29tcG9uZW50X25hbWUjIyMiKQ0KDQojIyNERVNDUklQVElPTiMjIw0KDQojIFJlcXVpcmVtZW50cw0KDQpEdWUgdG8gdGhlIHNpemUgb2YgdGhlIHBlcm1pc3Npb25hbCBzdHJ1Y3R1cmUsIHlvdSB3aWxsIG5lZWQgdG8gaW5jcmVhc2UgbWF4X2lucHV0X3ZhcnMgdW50aWwgdGhlIHBlcm1pc3Npb25zIGFyZSBhYmxlIHRvIHNhdmUuDQpgYGANCm1heF9pbnB1dF92YXJzID0gNTAwMA0KYGBgDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oaHR0cHM6Ly93d3cuc3RhZmZoZWFsdGhjYnAuY29tLykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdKGh0dHBzOi8vd3d3LnN0YWZmaGVhbHRoY2JwLmNvbS8pDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3LnZkbS5pby9qb29tbGEtY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbyk=', '', '', 'Cost Benefit Projection Tool.', '', '', 'Cost Benefit Projection (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/Llewellynvdm/Joomla-Cost-Benefit-Projection/master/costbenefitprojection_update_server.xml', 'http://www.vdm.io', '', 'KF4DOoTG/SbAenJVZ+C70b8v2mo/9AGoHRUZn38fNjGbD5l8WbBkTcAJsbhGhgenVlLqlgMCYhDPW1id2M7vdg==', 'http://www.vdm.io/access/', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 229, '', 1, 6), +(4, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '3.0.2', 'Copyright (C) 2014. All Rights Reserved', '2015-07-16 21:16:17', '', '', '', '', '', '', '', '', 1, '', 'Adding PHP/JS/CSS to your joomla articles and modules has never been so easy!', 'joomla@vdm.io', '', '', 'ikiTKPjL3OpNgd4GSy83H6r6AqvvqqJL3eq1OJcbwZY=', '', '79cd73b9-3989-4e44-ad15-4c8e44fe272e', 'images/vdm/codebox500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2017-08-17 21:48:57', 1, 'Code Box', 'codebox', '', 4, '', '', '', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKSA=', '', '', 'Adding PHP/JS/CSS', '', '', 'Code Box', '', '', '', 1, '', 'http://www.vdm.io/joomla', '', '614dod0JnHfCW3c4CWFarRBQIwKacNEPkOsMoRdEfjY=', '', '', 1, 20, '', 1, 3), +(5, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'default.txt', '', '', 'Vast Development Method', '1.0.5', 'Copyright (C) 2015. All Rights Reserved', '2015-08-05 00:40:06', '', 'fJ8k5rxm0gLeNHfPfCHRUdLna4XdjaIF6J2QAv6Jd4M=', 'sQUMRQJ3xdXI2mZ/01zGerfPjyaNSu+2B/qqqGPboCg=', '', 'Q1plhG96+yqMLlJnmvFINIm6j3X6XnOLfhnre4pAcZU=', '', '', '', 1, '', 'Just a basic demo of the most basic implementations of the [Joomla] (http://www.joomla.org) Component Builder\'s ability.', 'info@vdm.io', '', 'http://vdm.bz/get-advance-demo-key', 'Arlr/PFBJ+vUM2vgEoMU6IyzriNLJ8dfZQZ39QyPL4pAVL02VyXNvoMUo8M3q0wV', '', 'ec2c3e36-e2b1-4bab-842d-bd0f9d07ea00', 'images/vdm/demo500.jpg', '', 'https://github.com/vdm-io/JCB-Packages/raw/master/JCB_demoAdvanced.zip', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2020-11-17 17:18:18', '', 'Demo', 'demo', '', 4, '', '', '', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIVsjIyNDb21wb25lbnRfbmFtZSMjIyBpbWFnZV0gKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9uYW1pYmlhL2RlbW8tam9vbWxhLTMtY29tcG9uZW50L21hc3Rlci9hZG1pbi9hc3NldHMvaW1hZ2VzL3ZkbS1jb21wb25lbnQuanBnICJUaGUgIyMjQ29tcG9uZW50X25hbWUjIyMiKQ0KDQojIyNERVNDUklQVElPTiMjIw0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10gKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXSAobWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10gKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCg0KIyMgQnVpbGQgVGltZQ0KDQoqKiMjI3RvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI3RvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKiAoYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzYXZlZCAtDQpkdWUgdG8gW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0gKGh0dHBzOi8vd3d3LnZkbS5pby9qb29tbGEtY29tcG9uZW50LWJ1aWxkZXIpKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdIChodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0gKG1haWx0bzpqb29tbGFAdmRtLmlvKQ0KDQpbQ1VTVE9NQ09ERT1yZWFkTUVjb250cmlidXRvcnNd', '', '', 'Demo Component', '', '', 'Demo - advanced (public)', '.git', '', 1, 1, 'https://www.vdm.io/updates/demo_update_server.xml', 'https://www.vdm.io/', '', 'WNVXyWZW/ISgKhNT6u/2tJuir0CX7eM+kOhmLyGdh7g=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 33, '', 1, 8), +(7, 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, 1, '{}', 3, 1, 2, 3, 'Llewellyn van der Merwe', '', 'member.txt', '', '', 'Joomla Component Builder', '2.1.0', 'Copyright (C) 2015. All Rights Reserved', '2018-07-06 07:11:12', 1, '68wV5f9XVz3GHqOVYxj2taJbVlf8VAuydrJiTerSRcg=', 'v9x/NUXzZ3Sr0jujcwzSi9+vLlW825igzyKS8VKSa6Q=', '', 'g9p4Kk67OAYDRed7Ci4v96amxeN72DdzI6dVt/P+KyI=', '', 'LmZpZWxkLWNhbGVuZGFyIGlucHV0IHsNCglmb250OmNhcHRpb24gIWltcG9ydGFudDsNCn0=', 'A_177', 2, '', 'A [Members manager](https://github.com/vdm-io/Joomla-Members-Manager) to use as a base for any kind of project that needs user integration. You can with much ease adapt it using the [JCB package](https://github.com/vdm-io/JCB-Community-Packages/raw/master/JCB_membersManager.zip).\r\n\r\nWatch this [tutorial](https://youtu.be/lkE0ZiSWufg) to see how.', 'joomla@vdm.io', '', 'https://vdm.bz/how-to-get-free-vdm-package-keys', 'kBdRTTE3bIx3bSYH77nanyPGPm4sktWK6zWiZjaXbb3bJ1at45ns37DLeH17pszTwEqgwZR2kfYWVsHgDbu5vA==', '', '40130d87-591c-4f8a-b0ba-62c65fa2ec5d', 'images/membermanager300.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Members-Manager', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '★', '2021-03-08 03:19:07', 2, 'Members Manager', 'membersmanager', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9bWVtYmVybWFuYWdlckhlbHBlckJvdGhdDQoJLyoqDQoJICogQ2FuIGEgbWVtYmVyIGFjY2VzcyBhbm90aGVyIG1lbWJlcidzIGRhdGENCgkgKg0KCSAqIEBwYXJhbSAgIG1peCAgICAgICRtZW1iZXIgICAgVGhlIHRoZSBtZW1iZXIgYmVpbmcgYWNjZXNzZWQNCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGRvIGEgZHluYW1pYyBnZXQgb2YgbWVtYmVyIElEIHVzZSB0aGUgZm9sbG93aW5nIGFycmF5DQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSggdGFibGUsIHdoZXJlLCB3aGVyZVN0cmluZywgd2hhdCkNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkdHlwZXMgICAgIFRoZSB0eXBlIG9mIG1lbWJlciBiZWluZyBhY2Nlc3NlZA0KCSAqIEBwYXJhbSAgIG1peCAgICAgICR1c2VyICAgICAgVGhlIGFjdGl2ZSB1c2VyDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRiICAgICAgICBUaGUgZGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAcmV0dXJuICBib29sIHRydWUgb2YgY2FuIGFjY2Vzcw0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYW5BY2Nlc3NNZW1iZXIoJG1lbWJlciA9IG51bGwsICR0eXBlcyA9IG51bGwsICR1c2VyID0gbnVsbCwgJGRiID0gbnVsbCkNCgl7DQoJCS8vIGhlcmUgeW91IGNhbiBkbyB5b3VyIG93biBjdXN0b20gdmFsaWRhdGlvbg0KCQlyZXR1cm4gdHJ1ZTsNCgl9', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoSk1NKQ0KWyFbR2l0SHViIHJlbGVhc2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3JlbGVhc2UvbGxld2VsbHludmRtL0pvb21sYS1NZW1iZXJzLU1hbmFnZXIuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2xsZXdlbGx5bnZkbS9Kb29tbGEtTWVtYmVycy1NYW5hZ2VyL3JlbGVhc2VzKQ0KDQogIVtNZW1iZXJzIE1hbmFnZXIgaW1hZ2VdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9sbGV3ZWxseW52ZG0vSm9vbWxhLU1lbWJlcnMtTWFuYWdlci9tYXN0ZXIvYWRtaW4vYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlIE1lbWJlcnMgTWFuYWdlciIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IG5ldmVyIG1ha2luZyBvbmUgbWlzdGFrZSBvciB0YWtpbmcgYW55IGNvZmZlZSBicmVhay4pDQoNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCioqIyMjYWN0dWFsSG91cnNTcGVudCMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsRGF5c1NwZW50IyMjIEVpZ2h0IEhvdXIgRGF5cyoqICh0aGUgYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzcGVudCkNCg0KPiAod2l0aCB0aGUgZm9sbG93aW5nIGJyZWFrIGRvd246DQo+ICoqZGVidWdnaW5nIEAjIyNkZWJ1Z2dpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNDsNCj4gKipwbGFubmluZyBAIyMjcGxhbm5pbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNzsNCj4gKiptYXBwaW5nIEAjIyNtYXBwaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDEwOw0KPiAqKm9mZmljZSBAIyMjb2ZmaWNlSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDY7KQ0KDQoqKiMjI2FjdHVhbFRvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbFRvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKg0KKGEgdG90YWwgb2YgdGhlIHJlYWxpc3RpYyB0aW1lIGZyYW1lIGZvciB0aGlzIHByb2plY3QpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IHdpdGggdGhlIG5vcm1hbCBldmVyeWRheSByZWFsaXRpZXMgYXQgdGhlIG9mZmljZSwgdGhhdCBpbmNsdWRlcyB0aGUgY29tcG9uZW50IHBsYW5uaW5nLCBtYXBwaW5nICYgZGVidWdnaW5nLikNCg0KUHJvamVjdCBkdXJhdGlvbjogKiojIyNwcm9qZWN0V2Vla1RpbWUjIyMgd2Vla3MqKiBvciAqKiMjI3Byb2plY3RNb250aFRpbWUjIyMgbW9udGhzKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KW0NVU1RPTUNPREU9cmVhZE1FY29udHJpYnV0b3JzXQ==', '', '', 'Members Manager', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGAgKA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTsNCg0KQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbl9tYXBgICgNCglgcmVsYXRpb25gIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTs=', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGA7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3JlbGF0aW9uX21hcGA7', 'Members Manager (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/llewellynvdm/Joomla-Members-Manager/master/membersmanager_server.xml', 'https://www.joomlacomponentbuilder.com/', '', 'mwbQuahJB22SvquixI5MRucHYJFNOn2yLIUdF2q/9wU=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 243, '', 1, 49), +(8, '', 1, '', '', '', 1, '', '', 1, 1, '', 1, '', '', '', 1, '', 1, '', 1, '', '', '', '', 1, '{}', 1, 1, 2, 3, 'Llewellyn van der Merwe', '/var/www/sermondistributor_j3', 'SD.txt', '', '', 'Vast Development Method', '3.0.4', 'Copyright (C) 2015. All Rights Reserved', '2015-10-22 16:59:20', '', 'ZKUukroWwDG76wW55dhuJx1syv/siy0FTMf+luh7V7E=', 'uKEL3D/OAqh3fm21KTakHQMlMHJywXvPgRQmRSWb/28=', '', 'ntJ42FGYUvbPqWaIIj5uFAtmIrKbUk+LNtcmjE2ptuQ=', '', '', '', 1, '', 'Distributor is a highly advanced sermon distributor that runs on the [Joomla 3.x](http://www.joomla.org) framework. You can link a shared folder from Dropbox to the component and use Dropbox as your file host, not to mention the advanced auto builder that gives you the ability to simply load sermons to your website by only adding them to Dropbox.', 'joomla@vdm.io', 1, 'http://vdm.bz/get-sermon-distributor-key', 'dS20XbfUACMfeeeKiURfZJAuxLcOZ8HT6pQQzWhg0LsaP4JEn2B4/s9+PLBHV+QjgKJ6grZntqY+ltqzNgVAVQ==', '/var/git_', '11b41fbe-26e2-4257-a987-5b1278784539', 'images/vdm/SD500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Sermon-Distributor', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2024-03-07 13:39:29', 2, 'Sermon Distributor', 'sermondistributor', 'TrueChristianChurch', 4, '', '', 'CS8qKg0KCSogCVRoZSBnbG9iYWwgcGFyYW1zDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zID0gZmFsc2U7DQoNCgkvKioNCgkqIAlVcGRhdGUgV2F0Y2hlcg0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHVwZGF0ZVdhdGNoID0gMTsNCg0KCS8qKg0KCSogCVVwZGF0ZSBXYXRjaGVyIChpZiBhcnJheSBpcyBvbmx5IG9uZSB2YWx1ZSkNCgkqKi8NCglwdWJsaWMgc3RhdGljICR1cGRhdGVXYXRjaF8gPSAwOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBsaW5rcyBhdXRvDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZXh0ZXJuYWxzb3VyY2VfYXV0bzsNCg0KCS8qKg0KCSogCVRoZSBleHRlcm5hbCBzb3VyY2UgbGlua3MgbWFudWFsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZXh0ZXJuYWxzb3VyY2VfbWFudWFsOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBzZWxlY3Rpb24gYXV0bw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHNlbGVjdF9leHRlcm5hbHNvdXJjZV9hdXRvOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBzZWxlY3Rpb24gbWFudWFsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkc2VsZWN0X2V4dGVybmFsc291cmNlX21hbnVhbDsNCg0KCS8qKg0KCSogCVRoZSB1cGRhdGUgZXJyb3JzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXBkYXRlRXJyb3JzID0gYXJyYXkoKTsNCltDVVNUT01DT0RFPWJhc2VTaXh0eUZvdXJVUkxdDQoJLyoqDQoJKiAJZ2V0IERvd25sb2FkIGxpbmtzIG9mIGEgc2VybW9uDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREb3dubG9hZExpbmtzKCYkc2VybW9uKQ0KCXsNCgkJJGxpbmtzID0gYXJyYXkoKTsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkvLyBkZWNyeXB0IHRoZSB1cmxzDQoJCSRzYWZlID0gbmV3IEZPRkVuY3J5cHRBZXMoJGxvY2Fsa2V5LCAxMjgpOw0KCQkvLyBpbnRlcm5hbCBkb3dubG9hZCB1cmwNCgkJJGtleUNvdW50ZXIgPSBuZXcgXHN0ZENsYXNzOw0KCQkka2V5Q291bnRlci0+c2VybW9uID0gJHNlcm1vbi0+aWQ7DQoJCWlmICgkc2VybW9uLT5wcmVhY2hlcikNCgkJew0KCQkJJGtleUNvdW50ZXItPnByZWFjaGVyID0gJHNlcm1vbi0+cHJlYWNoZXI7DQoJCX0NCgkJaWYgKCRzZXJtb24tPnNlcmllcykNCgkJew0KCQkJJGtleUNvdW50ZXItPnNlcmllcyA9ICRzZXJtb24tPnNlcmllczsNCgkJfQ0KCQkka2V5Q291bnRlclJBVyA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKGpzb25fZW5jb2RlKCRrZXlDb3VudGVyKSk7DQoJCSRrZXlDb3VudGVyID0gc2VsZjo6YmFzZTY0X3VybGVuY29kZSgka2V5Q291bnRlclJBVyk7DQoJCSR0b2tlbiA9IEpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKTsNCgkJJGRvd25sb2FkVVJMID0gVXJpOjpyb290KCkuJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWRvd25sb2FkLmZpbGUma2V5PScuJGtleUNvdW50ZXIuJyZ0b2tlbj0nLiR0b2tlbjsNCgkJLy8gY2hlY2sgaWYgbG9jYWwgLmh0YWNjZXNzIHNob3VsZCBiZSBzZXQNCgkJJHNldEh0YWNjZXNzID0gZmFsc2U7DQoJCSRvbmNsaWNrID0gJyBvbmNsaWNrPSJzZXJtb25Db3VudGVyKFwnJy4ka2V5Q291bnRlclJBVy4nXCcsXCdGSUxFTkFNRVwnKTsiJzsNCgkJLy8gY2hlY2sgd2hhdCBzb3VyY2Ugb2Ygb3VyIGxpbmsNCgkJc3dpdGNoICgkc2VybW9uLT5zb3VyY2UpDQoJCXsNCgkJCWNhc2UgMToNCgkJCQkvLyBsb2NhbCBmaWxlIGdldCBsb2NhbCBmb2xkZXIgYW5kIGNoZWNrIGlmIG91dHNpZGUgcm9vdCAoaWYgbm90IHRoZW4gYWxsb3cgZGlyZWN0KQ0KCQkJCSRsb2NhbEZvbGRlciA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdsb2NhbGZvbGRlcicsIEpQQVRIX1JPT1QuJy9pbWFnZXMnKS4nLyc7DQoJCQkJLy8gc2hvdWxkIHdlIGFsbG93IGRpcmVjdCBkb3dubG9hZHMNCgkJCQkkYWxsb3dEaXJlY3QgPSBmYWxzZTsNCgkJCQlpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgc3RycG9zKCRsb2NhbEZvbGRlciwgSlBBVEhfUk9PVCkgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGFsbG93RGlyZWN0ID0gdHJ1ZTsNCgkJCQkJJGxvY2FsRm9sZGVyVVJMID0gVXJpOjpyb290KCkuc3RyX3JlcGxhY2UoSlBBVEhfUk9PVCwgJycsICRsb2NhbEZvbGRlcik7DQoJCQkJCS8vIGluc3VyZSBubyBkb3VibGUgLy8gaXMgaW4gdGhlIFVSTA0KCQkJCQkkbG9jYWxGb2xkZXJVUkwgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlclVSTCk7DQoJCQkJCSRsb2NhbEZvbGRlclVSTCA9IHN0cl9yZXBsYWNlKCc6LycsICc6Ly8nLCAkbG9jYWxGb2xkZXJVUkwpOw0KCQkJCX0NCgkJCQkvLyBpbnN1cmUgbm8gZG91YmxlIC8vIGlzIGluIHRoZSBwYXRoIG5hbWUNCgkJCQkkbG9jYWxGb2xkZXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlcik7DQoJCQkJJGxvY2FsRm9sZGVyID0gc3RyX3JlcGxhY2UoJzovJywgJzovLycsICRsb2NhbEZvbGRlcik7DQoJCQkJaWYgKHNlbGY6OmNoZWNrQXJyYXkoJHNlcm1vbi0+bG9jYWxfZmlsZXMpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCgkc2VybW9uLT5sb2NhbF9maWxlcyBhcyAka2V5KQ0KCQkJCQl7DQoJCQkJCQlpZiAoMSA9PSAkc2VybW9uLT5saW5rX3R5cGUgfHwgISRhbGxvd0RpcmVjdCkNCgkJCQkJCXsNCgkJCQkJCQkvLyBnZXQgdGhlIGZpbGUgbmFtZSB1c2UgdGhlIHNhbWUgbWV0aG9kIGFzIHRoZSBhdXRvDQoJCQkJCQkJJGZpbGVuYW1lID0gc2VsZjo6Z2V0RG93bmxvYWRGaWxlTmFtZSgkc2VybW9uLCRrZXksJ2xvY2FsJyk7DQoJCQkJCQkJJGxvY2tlZEZvbGRlclBhdGggPSAkc2FmZS0+ZW5jcnlwdFN0cmluZygkbG9jYWxGb2xkZXIuJGtleSk7DQoJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkb3dubG9hZFVSTC4nJmxpbms9Jy5zZWxmOjpiYXNlNjRfdXJsZW5jb2RlKCRsb2NrZWRGb2xkZXJQYXRoKS4nJmZpbGVuYW1lPScuJGZpbGVuYW1lOw0KCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZWlmICgyID09ICRzZXJtb24tPmxpbmtfdHlwZSAmJiAkYWxsb3dEaXJlY3QpDQoJCQkJCQl7DQoJCQkJCQkJJGZpbGVuYW1lID0gJGtleTsNCgkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJGxvY2FsRm9sZGVyVVJMLiRrZXk7DQoJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJJHNldEh0YWNjZXNzID0gdHJ1ZTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgMjoNCgkJCQkvLyBEcm9wYm94IGdldCBnbG9iYWwgZHJvcGJveCBzd2l0Y2ggDQoJCQkJJGFkZFRvQnV0dG9uID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2FkZF90b19idXR0b24nLCAwKTsNCgkJCQlpZiAoMSA9PSAkc2VybW9uLT5idWlsZCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjpjaGVja0FycmF5KCRzZXJtb24tPm1hbnVhbF9maWxlcykpDQoJCQkJCXsNCgkJCQkJCS8vIG1hbnVhbCBkcm9wYm94DQoJCQkJCQlmb3JlYWNoKCRzZXJtb24tPm1hbnVhbF9maWxlcyBhcyAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RXh0ZXJuYWxTb3VyY2VMaW5rKCdtYW51YWwnLDEsJGtleSk7DQoJCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJGtleSwnZHJvcGJveF9tYW51YWwnKTsNCgkJCQkJCQkJLy8gc2hvdWxkIHdlIGVuY3J5cHQgc3RyaW5nIHRoaXMgc3RyaW5nDQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5IHx8IChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRyb3BVUkwsIHRydWUpKSAhPT0gJGRyb3BVUkwpKSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0DQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRkcm9wVVJMID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGRyb3BVUkwpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIGxvY2sgdGhlIGluZm8ga2V5DQoJCQkJCQkJCSRpbmZvS2V5ID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGtleSk7DQoJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZG93bmxvYWRVUkwuJyZpbmZvPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkaW5mb0tleSkuJyZsaW5rPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkZHJvcFVSTCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzdHJfcmVwbGFjZSgnVkRNX3BMZUtfaDB1RXIvJywgJycsICRrZXkpOw0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldCAoc28gZG9uJ3QgZGVjcnlwdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkcm9wVVJMOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2UNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9IHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKCRkcm9wVVJMKSwgIlwwIik7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGJ1aWxkIGRyb3Bib3ggc3dpdGNoIGlmIG5lZWRlZA0KCQkJCQkJCWlmICgxID09ICRhZGRUb0J1dHRvbiAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5KSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0IChzbyBkb24ndCBkZWNyeXB0KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsICRkcm9wVVJMKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRyb3Bib3hfYnV0dG9uc1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJz9kbD0xJywgJz9kbD0wJywgcnRyaW0oJHNhZmUtPmRlY3J5cHRTdHJpbmcoJGRyb3BVUkwpLCAiXDAiKSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja19kcm9ib3hbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+YnVpbGQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6Y2hlY2tBcnJheSgkc2VybW9uLT5hdXRvX3Nlcm1vbnMpKQ0KCQkJCQl7DQoJCQkJCQkvLyBhdXRvbWF0aWMgZHJvcGJveA0KCQkJCQkJZm9yZWFjaCgkc2VybW9uLT5hdXRvX3Nlcm1vbnMgYXMgJGZpbGVuYW1lID0+ICRrZXkpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHRoZSBsaW5rDQoJCQkJCQkJJGRyb3BVUkwgPSBzZWxmOjpnZXRFeHRlcm5hbFNvdXJjZUxpbmsoJ2F1dG8nLDEsJGtleSk7DQoJCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gc2hvdWxkIHdlIGVuY3J5cHQgc3RyaW5nIHRoaXMgc3RyaW5nDQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5IHx8IChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRyb3BVUkwsIHRydWUpKSAhPT0gJGRyb3BVUkwpKSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0DQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRkcm9wVVJMID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGRyb3BVUkwpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIGxvY2sgdGhlIGluZm8ga2V5DQoJCQkJCQkJCSRpbmZvS2V5ID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGtleSk7DQoJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZG93bmxvYWRVUkwuJyZpbmZvPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkaW5mb0tleSkuJyZsaW5rPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkZHJvcFVSTCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldCAoc28gZG9uJ3QgZGVjcnlwdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkcm9wVVJMOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2UNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9IHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKCRkcm9wVVJMKSwgIlwwIik7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGJ1aWxkIGRyb3Bib3ggc3dpdGNoIGlmIG5lZWRlZA0KCQkJCQkJCWlmICgxID09ICRhZGRUb0J1dHRvbiAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5KSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0IChzbyBkb24ndCBkZWNyeXB0KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsICRkcm9wVVJMKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRyb3Bib3hfYnV0dG9uc1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJz9kbD0xJywgJz9kbD0wJywgcnRyaW0oJHNhZmUtPmRlY3J5cHRTdHJpbmcoJGRyb3BVUkwpLCAiXDAiKSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja19kcm9ib3hbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgMzoNCgkJCQkvLyB1cmwgZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCSRmaWxlbmFtZSA9IHNlbGY6OmdldERvd25sb2FkRmlsZU5hbWUoJHNlcm1vbiwkc2VybW9uLT51cmwsJ3VybCcpOw0KCQkJCWlmICgxID09ICRzZXJtb24tPmxpbmtfdHlwZSkNCgkJCQl7DQoJCQkJCSRsb2NrZWRVUkwgPSAkc2FmZS0+ZW5jcnlwdFN0cmluZygkc2VybW9uLT51cmwpOw0KCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJGRvd25sb2FkVVJMLicmbGluaz0nLnNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGxvY2tlZFVSTCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUpDQoJCQkJew0KCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJHNlcm1vbi0+dXJsOw0KCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCX0NCgkJLy8gcmVtb3ZlIHRoZSB2YWx1ZXMgbm8gbG9uZ2VyIG5lZWRlZA0KCQl1bnNldCgkc2VybW9uLT5sb2NhbF9maWxlcyk7DQoJCXVuc2V0KCRzZXJtb24tPm1hbnVhbF9maWxlcyk7DQoJCXVuc2V0KCRzZXJtb24tPmF1dG9fc2VybW9ucyk7DQoJCXVuc2V0KCRzZXJtb24tPnVybCk7DQoJCS8vIHNob3VsZCB3ZSBzZXQgdGhlIGxvY2FsIC5odGFjY2VzcyBmb3IgdGhlIGRvd25sb2FkIGZvbGRlcg0KCQlpZiAoJHNldEh0YWNjZXNzKQ0KCQl7DQoJCQkvLyBUT0RPIHdlIG1heSBuZWVkIHRvIGFkZCB0aGlzIGxhdHRlciB0byBlbmZvcmNlIGRvd25sb2FkIG9mIGZpbGVzLg0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TmV4dFVwZGF0ZVZhbHVlcygkYXNBcnJheSA9IGZhbHNlKQ0KCXsNCgkJLy8gZmluZCB0aGUgbmV4dCB2YWx1ZQ0KCQkkbmV4dCA9IGZhbHNlOw0KCQkvLyBnZXQgYWN0dWFsIHVwZGF0ZSB2YWx1ZXMNCgkJJHVwZGF0ZXMgPSBzZWxmOjpnZXRFeHRlcm5hbExpc3RpbmdVcGRhdGVLZXlzKCk7DQoJCS8vIGdldCBsYXN0IHVwZGF0ZQ0KCQkkdXBkYXRlUGF0aCA9IHNlbGY6OmdldEZpbGVQYXRoKCdwYXRoJywgJ3VwZGF0ZWxhc3QnLCAndHh0JywgJ3ZEbScsIEpQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SKTsNCgkJaWYgKCgkbGFzdFVwZGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkdXBkYXRlUGF0aCkpICE9PSBGQUxTRSAmJiBzZWxmOjpjaGVja0FycmF5KCR1cGRhdGVzKSkNCgkJew0KCQkJLy8gaXMgaXQgdGltZSB0byB3YXRjaA0KCQkJaWYgKHNlbGY6OiR1cGRhdGVXYXRjaF8gPiAwKQ0KCQkJew0KCQkJCS8vIGluY3JlbWVudCB0aGUgd2F0Y2gsIGFzIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIG5ldyByb3VuZA0KCQkJCXNlbGY6OiR1cGRhdGVXYXRjaCsrOw0KCQkJCS8vIG5ldyByb3VuZCBoYXMgc3RhcnRlZA0KCQkJCXNlbGY6OiR1cGRhdGVXYXRjaF8gPSAwOw0KCQkJfQ0KCQkJLy8gbm93IGNoZWNrIHdoYXQgaXMgbmV4dA0KCQkJJGxhc3RLZXkgPSBhcnJheV9zZWFyY2goJGxhc3RVcGRhdGUsICR1cGRhdGVzKTsNCgkJCWlmICghaXNfbnVsbCgkbGFzdEtleSkpDQoJCQl7DQoJCQkJJG5leHRLZXkgPSAkbGFzdEtleSArIDE7DQoJCQkJaWYgKGlzc2V0KCR1cGRhdGVzWyRuZXh0S2V5XSkpDQoJCQkJew0KCQkJCQkkbmV4dCA9ICR1cGRhdGVzWyRuZXh0S2V5XTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gbGFzdCBpdGVtIGluIGFycmF5LCBzbyBuZXh0IHJvdW5kIGFib3V0IHRvIHN0YXJ0DQoJCQkJCXNlbGY6OiR1cGRhdGVXYXRjaF8rKzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gcmVzdCBhbmQgc3RhcnQgd2l0aCB0aGUgZmlyc3Qga2V5DQoJCWlmICghJG5leHQgJiYgc2VsZjo6Y2hlY2tBcnJheSgkdXBkYXRlcykpDQoJCXsNCgkJCS8vIHNhdmUgdGhlIGZpcnN0IHNldA0KCQkJJHN0YXJ0ID0gcmVzZXQoJHVwZGF0ZXMpOw0KCQkJJG5leHQgPSAkc3RhcnQ7DQoJCX0NCgkJLy8gc2F2ZSB0byBmaWxlIGlmIG5leHQgaXMgZm91bmQNCgkJaWYgKCRuZXh0KQ0KCQl7DQoJCQlzZWxmOjp3cml0ZUZpbGUoJHVwZGF0ZVBhdGgsJG5leHQpOw0KCQkJLy8gY29udmVydCB0byBhcnJheSBvZiBuZWVkZWQNCgkJCWlmICgkYXNBcnJheSkNCgkJCXsNCgkJCQlpZiAoc3RycG9zKCRuZXh0LCAnLCcpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRuZXh0ID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsICRuZXh0KSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRuZXh0Ow0KCX0NCltDVVNUT01DT0RFPWdldEZpbGVQYXRoXQ0KW0NVU1RPTUNPREU9d3JpdGVGaWxlXQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2F2ZUZpbGUoJGRhdGEsICRwYXRoX2ZpbGVuYW1lKQ0KCXsNCgkJcmV0dXJuIHNlbGY6OndyaXRlRmlsZSgkcGF0aF9maWxlbmFtZSwgJGRhdGEpOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RXh0ZXJuYWxMaXN0aW5nVXBkYXRlS2V5cygkaWQgPSBudWxsLCAkdXBkYXRlTWV0aG9kID0gMiwgJHJldHVyblR5cGUgPSAxKQ0KCXsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBmaWxlIGFscmVhZHkgaGFzIHN0YXRpc3RpY3MNCgkJJGRiID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCdzaGFyZWR1cmwnLCdmb2xkZXInLCdwZXJtaXNzaW9udHlwZScsJ2Ryb3Bib3hvcHRpb25zJywnYnVpbGQnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9leHRlcm5hbF9zb3VyY2UnKSk7DQoJCWlmICgkdXBkYXRlTWV0aG9kICYmIGlzX251bWVyaWMoJHVwZGF0ZU1ldGhvZCkpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3VwZGF0ZV9tZXRob2QnKSAuICcgPSAnLiAoaW50KSAkdXBkYXRlTWV0aG9kKTsNCgkJfQ0KCQlpZiAoJGlkICYmIGlzX251bWVyaWMoJGlkKSkNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPSAnLiAoaW50KSAkaWQpOw0KCQl9DQoJCWVsc2VpZiAoJGlkICYmIHNlbGY6OmNoZWNrQXJyYXkoJGlkKSkNCgkJew0KCQkJJGlkcyA9IGltcGxvZGUoJywnLCBhcnJheV9tYXAoICdpbnR2YWwnLCAkaWQpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnIElOICAoJyAuICRpZHMgLiAnKScpOw0KCQl9DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkcmVzdWx0cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCSR1cGRhdGVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRyZXN1bHRzIGFzICRyZXN1bHQpDQoJCQl7DQoJCQkJaWYgKCdmdWxsJyA9PSAkcmVzdWx0LT5wZXJtaXNzaW9udHlwZSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgZm9sZGVyIG9yIHVybHMNCgkJCQkJc3dpdGNoICgkcmVzdWx0LT5kcm9wYm94b3B0aW9ucykNCgkJCQkJew0KCQkJCQkJY2FzZSAxOiAvLyBzaGFyZWR1cmwNCgkJCQkJCQlpZiAoc2VsZjo6Y2hlY2tKc29uKCRyZXN1bHQtPnNoYXJlZHVybCkpDQoJCQkJCQkJew0KCQkJCQkJCQkkdGFyZ2V0cyA9IGpzb25fZGVjb2RlKCRyZXN1bHQtPnNoYXJlZHVybCktPnRzaGFyZWR1cmw7DQoJCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlIDI6IC8vIGZvbGRlcnMNCgkJCQkJCQlpZiAoc2VsZjo6Y2hlY2tKc29uKCRyZXN1bHQtPmZvbGRlcikpDQoJCQkJCQkJew0KCQkJCQkJCQkkdGFyZ2V0cyA9IGpzb25fZGVjb2RlKCRyZXN1bHQtPmZvbGRlciktPnRmb2xkZXI7DQoJCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQkJaWYgKHNlbGY6OmNoZWNrQXJyYXkoJHRhcmdldHMpKQ0KCQkJCQl7DQoJCQkJCQlmb3JlYWNoICgkdGFyZ2V0cyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCQkJCXsNCgkJCQkJCQkkbnIgPSAka2V5ICsgMTsNCgkJCQkJCQkvLyBpZCwgdGFyZ2V0LCB0eXBlDQoJCQkJCQkJaWYgKDEgPT0gJHJldHVyblR5cGUpDQoJCQkJCQkJew0KCQkJCQkJCQkkdXBkYXRlc1tdID0gJHJlc3VsdC0+aWQgLiAnLCAnLiAkbnIgLiAnLCAnIC4gJHJlc3VsdC0+YnVpbGQ7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UgLy8gb25seSByZXR1cm4gdGhlIHRhcmdldHMNCgkJCQkJCQl7DQoJCQkJCQkJCSR1cGRhdGVzW10gPSAkbnI7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCS8vIGlkLCB0YXJnZXQsIHR5cGUNCgkJCQkJaWYgKDEgPT0gJHJldHVyblR5cGUpDQoJCQkJCXsNCgkJCQkJCSR1cGRhdGVzW10gPSAkcmVzdWx0LT5pZCAuICcsIDEsICcuICRyZXN1bHQtPmJ1aWxkOw0KCQkJCQl9DQoJCQkJCWVsc2UgLy8gb25seSByZXR1cm4gdGhlIHRhcmdldHMNCgkJCQkJew0KCQkJCQkJJHVwZGF0ZXNbXSA9IDE7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gJHVwZGF0ZXM7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RXh0ZXJuYWxTb3VyY2VMaW5rKCR0eXBlLCAkcmV0dXJuID0gNywgJGdldCA9IGZhbHNlLCAkdGFyZ2V0ID0gJ2xpbmtzJykNCgl7DQoJCS8vIG1ha2Ugc3VyZSBhbGwgZGVmYXVsdHMgYXJlIHNldA0KCQkkZm91bmQgPSBzZWxmOjpjaGVja0V4dGVybmFsU291cmNlTG9jYWxMaXN0aW5nKCR0eXBlLCAkdGFyZ2V0KTsNCgkJaWYgKCRmb3VuZCkNCgkJew0KCQkJc3dpdGNoKCRyZXR1cm4pDQoJCQl7DQoJCQkJY2FzZSAxOg0KCQkJCQkvLyByZXR1cm4gYSBsaW5rDQoJCQkJCWlmIChpc3NldChzZWxmOjokeyR0YXJnZXQuJ19leHRlcm5hbHNvdXJjZV8nLiR0eXBlfVskZ2V0XSkpDQoJCQkJCXsNCgkJCQkJCXJldHVybiBzZWxmOjokeyR0YXJnZXQuJ19leHRlcm5hbHNvdXJjZV8nLiR0eXBlfVskZ2V0XTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlIDI6DQoJCQkJCS8vIHJldHVybiBhbGwgbGlua3MNCgkJCQkJcmV0dXJuIHNlbGY6OiR7JHRhcmdldC4nX2V4dGVybmFsc291cmNlXycuJHR5cGV9Ow0KCQkJCQlicmVhazsNCgkJCQlkZWZhdWx0IDoNCgkJCQkJLy8ganVzdCBjb25maXJtIHRoYXQgaXQgaXMgc2V0DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb3VudERvd25sb2FkKCRjb3VudGVyLCAkZmlsZW5hbWUpDQoJew0KCQkvLyBHZXQgbG9jYWwga2V5DQoJCSRsb2NhbGtleSA9IHNlbGY6OmdldExvY2FsS2V5KCk7DQoJCSRvcGVuZXIgPSBuZXcgRk9GRW5jcnlwdEFlcygkbG9jYWxrZXksIDEyOCk7DQoJCSRjb3VudGVyID0ganNvbl9kZWNvZGUocnRyaW0oJG9wZW5lci0+ZGVjcnlwdFN0cmluZygkY291bnRlciksICJcMCIpKTsNCgkJaWYgKHNlbGY6OmNoZWNrT2JqZWN0KCRjb3VudGVyKSkNCgkJew0KCQkJJGNvdW50ZXItPmZpbGVuYW1lID0gJGZpbGVuYW1lOw0KCQkJLy8gc2V0IHRoZSBkYXRlIG9iamVjdA0KCQkJJGRhdGUgPSBKb29tbGFfX18zOTQwMzA2Ml84NGZiXzQ2ZTBfYmFjNF8wMDIzZjc2NmU4MjdfX19Qb3dlcjo6Z2V0RGF0ZSgpOw0KCQkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBmaWxlIGFscmVhZHkgaGFzIHN0YXRpc3RpY3MNCgkJCSRkYiA9IEpvb21sYV9fXzM5NDAzMDYyXzg0ZmJfNDZlMF9iYWM0XzAwMjNmNzY2ZTgyN19fX1Bvd2VyOjpnZXREYm8oKTsNCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCdjb3VudGVyJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3N0YXRpc3RpYycpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3Nlcm1vbicpIC4gJyA9ICcuIChpbnQpICRjb3VudGVyLT5zZXJtb24pOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZmlsZW5hbWUnKSAuICcgPSAnLiAkZGItPnF1b3RlKCRjb3VudGVyLT5maWxlbmFtZSkpOw0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJHN0YXRpc3RpYyA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJCS8vIGFscmVhZHkgaGFzIGFuIGVudHJ5DQoJCQkJJHN0YXRpc3RpYy0+Y291bnRlcisrOw0KCQkJCSRzdGF0aXN0aWMtPm1vZGlmaWVkID0gJGRhdGUtPnRvU3FsKCk7DQoJCQkJLy8gdXBkYXRlIHRoZSBlbnRyeQ0KCQkJCXJldHVybiAkZGItPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX3N0YXRpc3RpYycsICRzdGF0aXN0aWMsICdpZCcpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHNldCBhIG5ldyBlbnRyeQ0KCQkJCSRjb3VudGVyLT5jb3VudGVyID0gMTsNCgkJCQkkY291bnRlci0+cHVibGlzaGVkID0gMTsNCgkJCQkkY291bnRlci0+Y3JlYXRlZCA9ICRkYXRlLT50b1NxbCgpOw0KCQkJCSRjb3VudGVyLT5hY2Nlc3MgPSAxOw0KCQkJCSRjb3VudGVyLT52ZXJzaW9uID0gMTsNCgkJCQkvLyBzZXQgYSBuZXcgZW50cnkNCgkJCQkkZG9uZSA9ICRkYi0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJGNvdW50ZXIpOw0KCQkJCS8vIGlmIGRvbmUgcmV0dXJuIGxhc3QgdXNlZCBpZA0KCQkJCWlmICgkZG9uZSkNCgkJCQl7DQoJCQkJCSRuZXdJZCA9ICAkZGItPmluc2VydGlkKCk7DQoJCQkJCS8vIG1ha2Ugc3VyZSB0aGUgYWNjZXNzIG9mIGFzc2V0IGlzIHNldA0KCQkJCQlyZXR1cm4gc2VsZjo6c2V0QXNzZXQoJG5ld0lkLCdzdGF0aXN0aWMnKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZUluZm8oJGtleSkNCgl7DQoJCWlmIChzZWxmOjpjaGVja1N0cmluZygka2V5KSAmJiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRrZXksIHRydWUpKSA9PT0gJGtleSkpDQoJCXsNCgkJCS8vIEdldCBsb2NhbCBrZXkNCgkJCSRsb2NhbGtleSA9IHNlbGY6OmdldExvY2FsS2V5KCk7DQoJCQkkb3BlbmVyID0gbmV3IEZPRkVuY3J5cHRBZXMoJGxvY2Fsa2V5LCAxMjgpOw0KCQkJJGtleSA9IHJ0cmltKCRvcGVuZXItPmRlY3J5cHRTdHJpbmcoJGtleSksICJcMCIpOw0KCQkJLy8gbG9hZCB0aGUgbGlua3MgZnJvbSB0aGUgZGF0YWJhc2UNCgkJCSRkYiA9IEpvb21sYV9fXzM5NDAzMDYyXzg0ZmJfNDZlMF9iYWM0XzAwMjNmNzY2ZTgyN19fX1Bvd2VyOjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoJ3NpemUnKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2xvY2FsX2xpc3RpbmcnKSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdrZXknKSAuICcgPSAnLiAkZGItPnF1b3RlKCRrZXkpKTsNCiAJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkaW5mbyA9IGFycmF5KCk7DQoJCQkJLy8gZ2V0IHRoZSBzaXplIG9mIHRoZSBmaWxlDQoJCQkJJGluZm9bJ2ZpbGVzaXplJ10gPSAkZGItPmxvYWRSZXN1bHQoKTsNCgkJCQkvLyBnZXQgdGhlIG1pbWUgdHlwZQ0KCQkJCSRpbmZvWyd0eXBlJ10gPSBTdXBlcl9fX2YxMWRjNzkwXzcxM2VfNDcwNl85YTg1X2EzMThlZDNhZDU2ZV9fX1Bvd2VyOjptaW1lVHlwZSgka2V5KTsNCgkJCQkvLyByZXR1cm4gaW5mbw0KCQkJCXJldHVybiAkaW5mbzsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXREb3dubG9hZEZpbGVOYW1lKCYkc2VybW9uLCAkZmlsZSwgJHR5cGUpDQoJew0KCQkvLyBmaXJzdCBnZXQgZmlsZSBuYW1lIGFuZCBmaWxlIHR5cGUNCgkJJGZpbGUgPSBzdHJfcmVwbGFjZSgnVkRNX3BMZUtfaDB1RXIvJywgJycsICRmaWxlKTsNCgkJJGZpbGVUeXBlID0gcGF0aGluZm8oJGZpbGUsIFBBVEhJTkZPX0VYVEVOU0lPTik7DQoJCWlmICgkZmlsZVR5cGUpDQoJCXsNCgkJCSRmaWxlID0gc3RyX3JlcGxhY2UoJy4nLiRmaWxlVHlwZSwgJycsICRmaWxlKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRmaWxlVHlwZSA9ICdlcnJvcic7DQoJCX0NCgkJLy8gbm93IGJ1aWxkIGRvd25sb2FkIG5hbWUNCgkJJGRvd25sb2FkTmFtZSA9IGFycmF5KCk7DQoJCS8vIGJ1aWxkIHRoZSBEb3dubG9hZCBGaWxlIE5hbWUgLSBmaXJzdCBhZGQgdGhlIHByZWFjaGVyIG5hbWUgaWYgc2V0DQoJCWlmICgkc2VybW9uLT5wcmVhY2hlcikNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gc2VsZjo6c2FmZVN0cmluZygkc2VybW9uLT5wcmVhY2hlcl9uYW1lLCdVJyk7DQoJCX0NCgkJLy8gYWRkIHRoZSBzZXJpZXMgbmFtZSBpZiBzZXQNCgkJaWYgKCRzZXJtb24tPnNlcmllcykNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gc2VsZjo6c2FmZVN0cmluZygkc2VybW9uLT5zZXJpZXNfbmFtZSwnRicpOw0KCQl9DQoJCS8vIGFkZCB0aGUgY2F0ZWdvcnkgbmFtZSBpZiBzZXQNCgkJaWYgKCRzZXJtb24tPmNhdGlkICYmIHNlbGY6OmNoZWNrU3RyaW5nKCRzZXJtb24tPmNhdGVnb3J5KSkNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gc2VsZjo6c2FmZVN0cmluZygkc2VybW9uLT5jYXRlZ29yeSwgJ0YnKTsNCgkJfQ0KCQlpZiAoJ2Ryb3Bib3hfbWFudWFsJyA9PSAkdHlwZSB8fCAnbG9jYWwnID09ICR0eXBlKQ0KCQl7DQoJCQkvLyBhZGQgdGhlIG1haW4gZmlsZSBuYW1lDQoJCQkkZG93bmxvYWROYW1lW10gPSBzZWxmOjpzYWZlU3RyaW5nKCRzZXJtb24tPm5hbWUsJ0YnKTsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IHNlbGY6OnNhZmVTdHJpbmcoJGZpbGUsJ0YnKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IHNlbGY6OnNhZmVTdHJpbmcoJHNlcm1vbi0+bmFtZSwnRicpOw0KCQkJaWYgKCdlcnJvcicgPT0gJGZpbGVUeXBlIHx8IHN0cnBvcygnPycsICRmaWxlVHlwZSkgIT09IGZhbHNlIHx8IHN0cnBvcygnJicsICRmaWxlVHlwZSkgIT09IGZhbHNlICkNCgkJCXsNCgkJCQkkZmlsZVR5cGUgPSAnbXAzJzsgLy8gVE9ETyB3ZSBkb24ndCBrbm93IHRoZSB1cmwgZmlsZXR5cGUgKHNldHRpbmcgdG8gbXAzIGJ1dCB0aGlzIGNvdWxkIGJlIHdyb25nKQ0KCQkJfQ0KCQl9DQoJCS8vIG5vdyBidWlsZCB0aGUgZG93bmxvYWQgZmlsZSBuYW1lDQoJCXJldHVybiBpbXBsb2RlKCdfXycsICRkb3dubG9hZE5hbWUpLicuJy4kZmlsZVR5cGU7DQoJfQ0KDQoJLyoqDQoJKiAJY2hlY2sgRXh0ZXJuYWwgU291cmNlIExvY2FsIExpc3RpbmcgKGRvIHdlIGhhdmUgdGhlIGZpbGVzKQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tFeHRlcm5hbFNvdXJjZUxvY2FsTGlzdGluZygkdHlwZSwgJGdldCA9ICdsaW5rcycpDQoJew0KCQkvLyBnZXQgdGhlIGxvY2FsIGxpbmtzDQoJCWlmIChpc3NldChzZWxmOjokeyRnZXQuJ19leHRlcm5hbHNvdXJjZV8nLiR0eXBlfSkgJiYgc2VsZjo6Y2hlY2tBcnJheShzZWxmOjokeyRnZXQuJ19leHRlcm5hbHNvdXJjZV8nLiR0eXBlfSkpDQoJCXsNCgkJCS8vIHJldHVybiB0cnVlIHdlIGhhdmUgbGlua3MgbG9hZGVkDQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0YXJnZXQgPSBhcnJheSgnbGlua3MnID0+ICd1cmwnLCAnc2VsZWN0JyA9PiAnbmFtZScpOw0KCQkJJGJ1aWxkID0gYXJyYXkoICdhdXRvJyA9PiAyLCAnbWFudWFsJyA9PiAxKTsNCgkJCWlmIChpc3NldCgkYnVpbGRbJHR5cGVdKSkNCgkJCXsNCgkJCQkvLyBsb2FkIHRoZSBsaW5rcyBmcm9tIHRoZSBkYXRhYmFzZQ0KCQkJCSRkYiA9IEpvb21sYV9fXzM5NDAzMDYyXzg0ZmJfNDZlMF9iYWM0XzAwMjNmNzY2ZTgyN19fX1Bvd2VyOjpnZXREYm8oKTsNCgkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2tleScsICR0YXJnZXRbJGdldF0pKSk7DQoJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbG9jYWxfbGlzdGluZycpKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdidWlsZCcpIC4gJyA9ICcuIChpbnQpICRidWlsZFskdHlwZV0pOw0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA9IDEnKTsgLy8gVE9ETyB3ZSBjYW4gbm93IGxpbWl0IHRoZSBsaW5rcyB0byBhY2Nlc3MgZ3JvdXBzDQogCQkJCS8vIFJlc2V0IHRoZSBxdWVyeSB1c2luZyBvdXIgbmV3bHkgcG9wdWxhdGVkIHF1ZXJ5IG9iamVjdC4NCgkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JHskZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX0gPSAkZGItPmxvYWRBc3NvY0xpc3QoJ2tleScsICR0YXJnZXRbJGdldF0pOw0KCQkJCQkvLyByZXR1cm4gdHJ1ZSB3ZSBoYXZlIGxpbmtzIGxvYWRlZA0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCWdldCB0aGUgbG9jYWxrZXkNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRsb2NhbGtleSA9IGFycmF5KCk7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMb2NhbEtleSgkdHlwZSA9ICdiYXNpY19rZXknKQ0KCXsNCgkJaWYgKCFpc3NldChzZWxmOjokbG9jYWxrZXlbJHR5cGVdKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBtYWluIGtleQ0KCQkJc2VsZjo6JGxvY2Fsa2V5WyR0eXBlXSA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCR0eXBlLCAnbG9jYWxLZXkzNGZkV0VrbCcpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokbG9jYWxrZXlbJHR5cGVdOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXBkYXRlRXh0ZXJuYWxTb3VyY2UoJGlkLCAkdGFyZ2V0ID0gMCwgJHR5cGUgPSBmYWxzZSwgJGZvcmNlID0gZmFsc2UsICRzbGV1dGVsID0gbnVsbCkNCgl7DQoJCSRzb3VyY2UgPSBzZWxmOjpnZXRWYXIoJ2V4dGVybmFsX3NvdXJjZScsIChpbnQpICRpZCwgJ2lkJywgJ2V4dGVybmFsc291cmNlcycpOw0KCQlpZiAoMSA9PSAkc291cmNlKSAvLyBEcm9wYm94IGlzIHRoZSBzb3VyY2UNCgkJew0KCQkJLy8gbG9hZCB0aGUgZmlsZQ0KCQkJSkxvYWRlcjo6aW1wb3J0KCdkcm9wYm94dXBkYXRlcicsIEpQQVRIX0NPTVBPTkVOVF9TSVRFLicvaGVscGVycycpOw0KCQkJLy8gdXBkYXRlIHR5cGVzDQoJCQkkdHlwZXMgPSBhcnJheSgnbWFudWFsJywnYXV0bycpOw0KCQkJLy8gb2theSBub3cgdXBkYXRlIHRoaXMgdHlwZQ0KCQkJaWYgKHNlbGY6OmNoZWNrU3RyaW5nKCR0eXBlKSAmJiBpbl9hcnJheSgkdHlwZSwkdHlwZXMpKQ0KCQkJew0KCQkJCSRkcm9wYm94ID0gbmV3IERyb3Bib3h1cGRhdGVyKCk7DQoJCQkJaWYgKCRkcm9wYm94LT51cGRhdGUoJGlkLCAkdGFyZ2V0LCAkdHlwZSwgJGZvcmNlLCAkc2xldXRlbCkpDQoJCQkJew0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQl9DQoJCQkJc2VsZjo6c2V0VXBkYXRlRXJyb3IoJGlkLCAkZHJvcGJveC0+Z2V0RXJyb3JzKCkpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJfQ0KCQlzZWxmOjpzZXRVcGRhdGVFcnJvcigkaWQsIGFycmF5KEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdUaGUgZXh0ZXJuYWwgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZC4nKSkpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTb3VyY2VTdGF0dXMoJGlkKQ0KCXsNCgkJLy8gZmlzdCBnZXQgZXJyb3JzIGlmIGFueSBpcyBmb3VuZA0KCQkkZXJyb3JzID0gYXJyYXkoKTsNCgkJaWYgKCR0YXJnZXRzID0gc2VsZjo6Z2V0RXh0ZXJuYWxMaXN0aW5nVXBkYXRlS2V5cygkaWQsIG51bGwsIDEpKQ0KCQl7DQoJCQlmb3JlYWNoICgkdGFyZ2V0cyBhcyAkdGFyZ2V0KQ0KCQkJew0KCQkJCSRrZXkgPSBwcmVnX3JlcGxhY2UoJy9bICxdKy8nLCAnJywgdHJpbSgkdGFyZ2V0KSk7DQoJCQkJaWYgKCRlcnJvciA9IHNlbGY6OmdldFVwZGF0ZUVycm9yKDAsICRrZXkpKQ0KCQkJCXsNCgkJCQkJJGVycm9yc1tdID0gJGVycm9yOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyBjaGVjayB3aGVuIHdhcyB0aGUgbGFzdCB1cGRhdGUNCgkJJHVwZGF0ZUluZm8gPSBzZWxmOjp1cGRhdGVJbmZvKCRpZCk7DQoJCWlmICghJHVwZGF0ZUluZm8pDQoJCXsNCgkJCSRlcnJvcnNbXSA9IEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdUaGlzIHNvdXJjZSBoYXMgbm8gbG9jYWwgbGlzdGluZyBzZXQuJyk7DQoJCX0NCgkJLy8gYnVpbGQgdGhlIHJldHVybiBzdHJpbmcNCgkJaWYgKGlzc2V0KCR1cGRhdGVJbmZvWydsYXN0J10pIHx8IHNlbGY6OmNoZWNrQXJyYXkoJGVycm9ycykpDQoJCXsNCgkJCSRib2R5ID0gYXJyYXkoKTsNCgkJCS8vIGdyZWF0IHdlIGhhdmUgc291cmNlIHN0YXR1cw0KCQkJaWYgKGlzc2V0KCR1cGRhdGVJbmZvWydsYXN0J10pKQ0KCQkJew0KCQkJCSRib2R5W10gPSAnPGgzPicuIEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdMaXN0aW5nIEluZm8nKSAuICc8L2gzPic7DQoJCQkJJGJvZHlbXSA9ICc8cD48Yj4nLiBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnTGFzdCBVcGRhdGUnKSAuICc6PC9iPiA8ZW0+Jy4kdXBkYXRlSW5mb1snbGFzdCddOw0KCQkJCSRib2R5W10gPSAnPC9lbT48YnIgLz48Yj4nLiBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnTnVtYmVyIG9mIEZpbGVzIExpc3RlZCcpIC4gJzo8L2I+IDxlbT4nLiR1cGRhdGVJbmZvWydxdHknXTsNCgkJCQkkYm9keVtdID0gJzwvZW0+PC9wPic7DQoJCQl9DQoJCQkvLyBub3cgc2V0IGFueSBlcnJvcnMgZm91bmQNCgkJCWlmIChzZWxmOjpjaGVja0FycmF5KCRlcnJvcnMpKQ0KCQkJew0KCQkJCSRib2R5W10gPSAnPGgzPicuIEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdOb3RpY2UhJykgLiAnPC9oMz4nOw0KCQkJCSRib2R5W10gPSBpbXBsb2RlKCcnLCAkZXJyb3JzKTsNCgkJCX0NCgkJCXJldHVybiAnPGEgY2xhc3M9ImJ0biBidG4tc21hbGwgYnRuLXN1Y2Nlc3MiIGhyZWY9IiNzb3VyY2Utc3RhdHVzJy4kaWQuJyIgZGF0YS10b2dnbGU9Im1vZGFsIj4nLkpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdWaWV3IFVwZGF0ZSBTdGF0dXMnKS4nPC9hPicgDQoJCQkJLiBKb29tbGFfX18zNDY5MGM3NV8xMDkwXzQ3ZWJfOGMwNl83MjI4ZGM3ZWVkZDZfX19Qb3dlcjo6XygnYm9vdHN0cmFwLnJlbmRlck1vZGFsJywgJ3NvdXJjZS1zdGF0dXMnLiRpZCwgYXJyYXkoJ3RpdGxlJyA9PiBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnU291cmNlIFN0YXR1cyBSZXBvcnQuJykpLCBpbXBsb2RlKCcnLCAkYm9keSkpOw0KCQl9DQogCQkvLyBubyBzdGF0dXMgZm91bmQNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXBkYXRlSW5mbygkaWQpDQoJew0KCQkkZGIgPSBKb29tbGFfX18zOTQwMzA2Ml84NGZiXzQ2ZTBfYmFjNF8wMDIzZjc2NmU4MjdfX19Qb3dlcjo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLmNyZWF0ZWQnLCdhLm1vZGlmaWVkJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbG9jYWxfbGlzdGluZycsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmV4dGVybmFsX3NvdXJjZScpIC4gJyA9ICcgLiAoaW50KSAkaWQpOw0KIAkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJHF0eSA9ICRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkZGF0YSA9ICRkYi0+bG9hZFJvd0xpc3QoKTsNCgkJCSRsYXN0ID0gMDsNCgkJCWZvcmVhY2ggKCRkYXRhIGFzICRkYXRlcykNCgkJCXsNCgkJCQlmb3JlYWNoICgkZGF0ZXMgYXMgJGRhdGUpDQoJCQkJew0KCQkJCQkkdGltZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCQkJCWlmICgkdGltZSA+ICRsYXN0KQ0KCQkJCQl7DQoJCQkJCQkkbGFzdCA9ICR0aW1lOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJJGluZm9bJ3F0eSddID0gKGludCkgJHF0eTsNCgkJCSRpbmZvWydsYXN0J10gPSBzZWxmOjpmYW5jeURhdGUoJGxhc3QpOw0KCQkJcmV0dXJuICRpbmZvOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVwZGF0ZUVycm9yKCRpZCwgJGZpbGVLZXkgPSBudWxsKQ0KCXsNCgkJLy8gZ2V0IHVwZGF0ZSBlcnJvciBmcm9tIGZpbGUNCgkJaWYgKCRmaWxlS2V5KQ0KCQl7DQoJCQkkZmlsZV9wYXRoID0gc2VsZjo6Z2V0RmlsZVBhdGgoJ3BhdGgnLCAndXBkYXRlZXJyb3InLCAndHh0JywgJGZpbGVLZXksIEpQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SKTsNCgkJCS8vIGNoZWNrIGlmIGl0IGlzIHNldA0KCQkJaWYgKCgkdGV4dCA9IEBmaWxlX2dldF9jb250ZW50cygkZmlsZV9wYXRoKSkgIT09IEZBTFNFKQ0KCQkJew0KCQkJCS8vIG5vIGVycm9yIG9uIHN1Y2Nlc3MNCgkJCQlpZiAoJ3N1Y2Nlc3MnICE9ICR0ZXh0KQ0KCQkJCXsNCgkJCQkJcmV0dXJuICR0ZXh0Ow0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQllbHNlaWYgKGlzc2V0KHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkgJiYgc2VsZjo6Y2hlY2tBcnJheShzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0pKQ0KCQl7DQoJCQlyZXR1cm4gJzx1bD48bGk+Jy5pbXBsb2RlKCc8L2xpPjxsaT4nLCBzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0pLic8L2xpPjwvdWw+JzsNCgkJfQ0KCQlyZXR1cm4gSm9vbWxhX19fYmE2MzI2ZWZfY2I3OV80MzQ4XzgwZjRfYWIwODYwODJlM2M1X19fUG93ZXI6Ol8oJ1Vua25vd24gZXJyb3IgaGFzIG9jY3VycmVkLicpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0VXBkYXRlRXJyb3IoJGlkLCAkZXJyb3JBcnJheSkNCgl7DQoJCWlmIChzZWxmOjpjaGVja0FycmF5KCRlcnJvckFycmF5KSAmJiAkaWQgPiAwKQ0KCQl7DQoJCQlmb3JlYWNoICgkZXJyb3JBcnJheSBhcyAkZXJyb3IpDQoJCQl7DQoJCQkJaWYgKCFpc3NldChzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0pKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JHVwZGF0ZUVycm9yc1skaWRdID0gYXJyYXkoKTsNCgkJCQl9DQoJCQkJc2VsZjo6JHVwZGF0ZUVycm9yc1skaWRdW10gPSAkZXJyb3I7DQoJCQl9DQoJCX0NCgl9DQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXQ0KW0NVU1RPTUNPREU9Y3VybFdvcmtlckhlbHBlcl0NCltDVVNUT01DT0RFPWxvY2tlcl0=', '', '', '', 'CQkJLy8gY2hlY2sgaWYgYW55IGxpbmtzIHdlcmUgZm91bmQNCgkJCWlmICgoaXNzZXQoJHRoaXMtPnVwZGF0ZVRhcmdldHNVKSAmJiBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmNoZWNrQXJyYXkoJHRoaXMtPnVwZGF0ZVRhcmdldHNVKSkgfHwgKGlzc2V0KCR0aGlzLT51cGRhdGVUYXJnZXRzRikgJiYgW1tbQ29tcG9uZW50XV1dSGVscGVyOjpjaGVja0FycmF5KCR0aGlzLT51cGRhdGVUYXJnZXRzRikpKQ0KCQkJew0KCQkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkJJGRiID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldERibygpOw0KDQoJCQkJLy8gZ2V0IHRoZSBmaWxlIHR5cGVzDQoJCQkJJGRyb3Bib3hfZmlsZXR5cGVzID0gJHRoaXMtPmNvbVBhcmFtcy0+Z2V0KCJkcm9wYm94X2ZpbGV0eXBlcyIsIG51bGwpOw0KDQoJCQkJLy8gc29tZSBkZWZhdWx0cw0KCQkJCSR1c2VyID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldFVzZXIoKTsNCgkJCQkkdG9kYXlEYXRlID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldERhdGUoKS0+dG9TcWwoKTsNCg0KCQkJCS8vIG5vdyBzdG9yZSB0aGUgb2xkIGRhdGEgdG8gdGhlIG5ldyBhcmVhDQoJCQkJaWYgKGlzc2V0KCR0aGlzLT51cGRhdGVUYXJnZXRzVSkgJiZbW1tDb21wb25lbnRdXV1IZWxwZXI6OmNoZWNrQXJyYXkoJHRoaXMtPnVwZGF0ZVRhcmdldHNVKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCR0aGlzLT51cGRhdGVUYXJnZXRzVSBhcyAkdHlwZSA9PiAkdXJscykNCgkJCQkJew0KCQkJCQkJJGRlc2NyaXB0aW9uID0gJ0NvbmZpZyAnLiAkdHlwZSAuICcgdXJsICc7DQoJCQkJCQkkYnVpbGRPcHRpb24gPSAxOw0KCQkJCQkJaWYgKCdhdXRvJyA9PSAkdHlwZSkNCgkJCQkJCXsNCgkJCQkJCQkkYnVpbGRPcHRpb24gPSAyOw0KCQkJCQkJfQ0KCQkJCQkJJHVybHMgPSAnIicuaW1wbG9kZSgnIiwgIicsICR1cmxzKS4nIic7DQoJCQkJCQkkZGF0YSA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkJCWlmIChbW1tDb21wb25lbnRdXV1IZWxwZXI6OmNoZWNrQXJyYXkoJGRyb3Bib3hfZmlsZXR5cGVzKSkNCgkJCQkJCXsNCgkJCQkJCQkkZGF0YS0+ZmlsZXR5cGVzID0ganNvbl9lbmNvZGUoJGRyb3Bib3hfZmlsZXR5cGVzKTsNCgkJCQkJCX0NCgkJCQkJCSRkYXRhLT5leHRlcm5hbHNvdXJjZXMgPSAxOw0KCQkJCQkJJGRhdGEtPmJ1aWxkID0gJGJ1aWxkT3B0aW9uOw0KCQkJCQkJJGRhdGEtPmRlc2NyaXB0aW9uID0gJGRlc2NyaXB0aW9uOw0KCQkJCQkJJGRhdGEtPnVwZGF0ZV9tZXRob2QgPSAxOw0KCQkJCQkJJGRhdGEtPnVwZGF0ZV90aW1lciA9IDA7DQoJCQkJCQkkZGF0YS0+cGVybWlzc2lvbnR5cGUgPSAnZnVsbCc7DQoJCQkJCQkkZGF0YS0+Y3JlYXRlZCA9ICR0b2RheURhdGU7DQoJCQkJCQkkZGF0YS0+Y3JlYXRlZF9ieSA9ICR1c2VyLT5pZDsNCgkJCQkJCSRkYXRhLT5zaGFyZWR1cmwgPSAneyJ0c2hhcmVkdXJsIjpbJy4kdXJscy4nXX0nOw0KCQkJCQkJLy8gYWRkIHRvIGRhdGFiYXNlDQoJCQkJCQlpZiAoJGRiLT5pbnNlcnRPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9leHRlcm5hbF9zb3VyY2UnLCAkZGF0YSkpDQoJCQkJCQl7DQoJCQkJCQkJJGFJZCA9ICRkYi0+aW5zZXJ0aWQoKTsNCgkJCQkJCQkvLyBtYWtlIHN1cmUgdGhlIGFjY2VzcyBvZiBhc3NldCBpcyBzZXQNCgkJCQkJCQlbW1tDb21wb25lbnRdXV1IZWxwZXI6OnNldEFzc2V0KCRhSWQsJ2V4dGVybmFsX3NvdXJjZScpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChpc3NldCgkdGhpcy0+dXBkYXRlVGFyZ2V0c0YpICYmIFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Y2hlY2tBcnJheSgkdGhpcy0+dXBkYXRlVGFyZ2V0c0YpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJHRoaXMtPnVwZGF0ZVRhcmdldHNGIGFzICR0eXBlID0+ICRmb2xkZXIpDQoJCQkJCXsNCgkJCQkJCSRkZXNjcmlwdGlvbiA9ICdDb25maWcgJy4gJHR5cGUgLiAnIGZvbGRlciAnOw0KCQkJCQkJJGJ1aWxkT3B0aW9uID0gMTsNCgkJCQkJCWlmICgnYXV0bycgPT0gJHR5cGUpDQoJCQkJCQl7DQoJCQkJCQkJJGJ1aWxkT3B0aW9uID0gMjsNCgkJCQkJCX0NCgkJCQkJCSRmb2xkZXIgPSAnIicuaW1wbG9kZSgnIiwgIicsICRmb2xkZXIpLiciJzsNCgkJCQkJCSRkYXRhID0gbmV3IFxzdGRDbGFzcygpOw0KCQkJCQkJaWYgKFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Y2hlY2tBcnJheSgkZHJvcGJveF9maWxldHlwZXMpKQ0KCQkJCQkJew0KCQkJCQkJCSRkYXRhLT5maWxldHlwZXMgPSBqc29uX2VuY29kZSgkZHJvcGJveF9maWxldHlwZXMpOw0KCQkJCQkJfQ0KCQkJCQkJJGRhdGEtPmV4dGVybmFsc291cmNlcyA9IDE7DQoJCQkJCQkkZGF0YS0+YnVpbGQgPSAkYnVpbGRPcHRpb247DQoJCQkJCQkkZGF0YS0+ZGVzY3JpcHRpb24gPSAkZGVzY3JpcHRpb247DQoJCQkJCQkkZGF0YS0+dXBkYXRlX21ldGhvZCA9IDE7DQoJCQkJCQkkZGF0YS0+dXBkYXRlX3RpbWVyID0gMDsNCgkJCQkJCSRkYXRhLT5wZXJtaXNzaW9udHlwZSA9ICdmdWxsJzsNCgkJCQkJCSRkYXRhLT5jcmVhdGVkID0gJHRvZGF5RGF0ZTsNCgkJCQkJCSRkYXRhLT5jcmVhdGVkX2J5ID0gJHVzZXItPmlkOw0KCQkJCQkJJGRhdGEtPmZvbGRlciA9ICd7InRmb2xkZXIiOlsnLiRmb2xkZXIuJ119JzsNCgkJCQkJCS8vIGFkZCB0byBkYXRhYmFzZQ0KCQkJCQkJaWYgKCRkYi0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fZXh0ZXJuYWxfc291cmNlJywgJGRhdGEpKQ0KCQkJCQkJew0KCQkJCQkJCSRhSWQgPSAkZGItPmluc2VydGlkKCk7DQoJCQkJCQkJLy8gbWFrZSBzdXJlIHRoZSBhY2Nlc3Mgb2YgYXNzZXQgaXMgc2V0DQoJCQkJCQkJW1tbQ29tcG9uZW50XV1dSGVscGVyOjpzZXRBc3NldCgkYUlkLCdleHRlcm5hbF9zb3VyY2UnKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBHZXQgQXBwbGljYXRpb24gb2JqZWN0DQoJCQkJJGFwcCA9IEpvb21sYV9fXzM5NDAzMDYyXzg0ZmJfNDZlMF9iYWM0XzAwMjNmNzY2ZTgyN19fX1Bvd2VyOjpnZXRBcHBsaWNhdGlvbigpOw0KCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdZb3VyIERyb3Bib3ggaW50ZWdyYXRpb24gaGFzIGJlZW4gbW92ZWQsIGFuZCBjYW4gbm93IGJlIHZpZXdlZCBhdCB0aGUgbmV3IGV4dGVybmFsIHNvdXJjZSB2aWV3LiBZb3Ugd2lsbCBub3cgbmVlZCBhbiBBUFAgdG9rZW4gdG8gdXBkYXRlIHlvdXIgbG9jYWwgbGlzdGluZyBvZiB0aGUgRHJvcGJveCBmaWxlcy4gUGxlYXNlIHJldmlldyB0aGUgV2lraSB0YWIgd2hlbiBjcmVhdGluZy9lZGl0aW5nIHRoZSBleHRlcm5hbCBzb3VyY2UsIG9yIG9wZW4gYW4gaXNzdWUgb24gZ2l0aHViIGlmIHlvdSBleHBlcmllbmNlIGFueSBtb3JlIGRpZmZpY3VsdGllcy4nLCAnSW5mbycpOw0KCQkJfQ==', '', 'CQkvLyBsb2FkIHRoZSBoZWxwZXIgY2xhc3MNCgkJSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCgkJLy8gY2hlY2sgdGhlIHZlcnNpb24gb2YgU2VybW9uIERpc3RyaWJ1dG9yDQoJCSRtYW5pZmVzdCA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6bWFuaWZlc3QoKTsNCgkJaWYgKGlzc2V0KCRtYW5pZmVzdC0+dmVyc2lvbikgJiYgc3RycG9zKCRtYW5pZmVzdC0+dmVyc2lvbiwgJy4nKSAhPT0gZmFsc2UpDQoJCXsNCgkJCSR2ZXJzaW9uID0gZXhwbG9kZSgnLicsICRtYW5pZmVzdC0+dmVyc2lvbik7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldERibygpOw0KCQkJaWYgKCR2ZXJzaW9uWzBdID09IDEgJiYgJHZlcnNpb25bMV0gPCA0KQ0KCQkJew0KCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCQkvLyB1cGRhdGUgYWxsIG1hbnVhbCBhbmQgYXV0byBsaW5rcyBpbiBzZXJtb25zDQoJCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2lkJywgJ21hbnVhbF9maWxlcycpKSk7DQoJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc2VybW9uJykpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3NvdXJjZScpIC4gJyA9IDInKTsNCgkJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCSRyb3dzID0gJGRiLT5sb2FkQXNzb2NMaXN0KCdpZCcsICdtYW51YWxfZmlsZXMnKTsNCgkJCQkJZm9yZWFjaCAoJHJvd3MgYXMgJGlkID0+ICRmaWxlcykNCgkJCQkJew0KCQkJCQkJaWYgKFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Y2hlY2tKc29uKCRmaWxlcykpDQoJCQkJCQl7DQoJCQkJCQkJJGZpbGVzID0ganNvbl9kZWNvZGUoJGZpbGVzLCB0cnVlKTsNCgkJCQkJCQlpZiAoW1tbQ29tcG9uZW50XV1dSGVscGVyOjpjaGVja0FycmF5KCRmaWxlcykpDQoJCQkJCQkJew0KCQkJCQkJCQlmb3JlYWNoICgkZmlsZXMgYXMgJG5yID0+ICYkZmlsZSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHRtcCA9IHN0cl9yZXBsYWNlKCdWRE1fcExlS19oMHVFci8nLCAnJywgJGZpbGUpOw0KCQkJCQkJCQkJJG5ldyA9IHN0cnRvbG93ZXIoJHRtcCk7DQoJCQkJCQkJCQkvLyBub3cgdXBkYXRlIHRoZSBmaWxlDQoJCQkJCQkJCQkkZmlsZSA9IHN0cl9yZXBsYWNlKCR0bXAsICRuZXcsICRmaWxlKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCS8vIG9ubHkgdXBkYXRlIGlmIGl0IHdhcyBmaXhlZA0KCQkJCQkJaWYgKFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Y2hlY2tBcnJheSgkZmlsZXMpKQ0KCQkJCQkJew0KCQkJCQkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJCQkJLy8gbWFrZSBzdXJlIHRoZSBmaWxlcyBhcmUgc2V0IHRvIGpzb24NCgkJCQkJCQkkb2JqZWN0LT5tYW51YWxfZmlsZXMgPSBqc29uX2VuY29kZSgkZmlsZXMpOw0KCQkJCQkJCSRvYmplY3QtPmlkID0gJGlkOw0KCQkJCQkJCUpvb21sYV9fXzM5NDAzMDYyXzg0ZmJfNDZlMF9iYWM0XzAwMjNmNzY2ZTgyN19fX1Bvd2VyOjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc2VybW9uJywgJG9iamVjdCwgJ2lkJyk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gZG8gYW4gdXBkYXRlIGJ5IG1vdmluZyBjb25maWcgZGF0YSB0byB0aGUgbmV3IGV4dGVybmFsIHNvdXJjZSBhcmVhLg0KCQkJCSR0aGlzLT5jb21QYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCQkJLy8gdGhlIG51bWJlciBvZiBsaW5rcw0KCQkJCSRudW1iZXJzID0gcmFuZ2UoMSwgNCk7DQoJCQkJLy8gdGhlIHR5cGVzIG9mIGxpbmtzDQoJCQkJJHR5cGVzID0gYXJyYXkoJ2F1dG8nLCdtYW51YWwnKTsNCgkJCQkvLyB0aGUgdXBkYXRlIHRhcmdldHMNCgkJCQkkdGhpcy0+dXBkYXRlVGFyZ2V0c1UgPSBhcnJheSgpOw0KCQkJCSR0aGlzLT51cGRhdGVUYXJnZXRzRiA9IGFycmF5KCk7DQoJCQkJLy8gZ2V0IGFsbCBsaXN0ZWQgdGFyZ2V0cyBiYXN0IG9uIHR5cGUNCgkJCQlmb3JlYWNoICgkdHlwZXMgYXMgJHR5cGUpDQoJCQkJew0KCQkJCQkvLyBub3cgY2hlY2sgaWYgdGhleSBhcmUgc2V0DQoJCQkJCWZvcmVhY2ggKCRudW1iZXJzIGFzICRudW1iZXIpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCB0aGUgbnVtYmVyIHRvIHN0cmluZw0KCQkJCQkJJG51bVN0ciA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6c2FmZVN0cmluZygkbnVtYmVyKTsNCgkJCQkJCS8vIEdldCB0aGUgdXJsDQoJCQkJCQkkdXJsID0gJHRoaXMtPmNvbVBhcmFtcy0+Z2V0KCR0eXBlLidkcm9wYm94Jy4kbnVtU3RyLCBudWxsKTsNCgkJCQkJCS8vIG9ubHkgbG9hZCB0aG9zZSB0aGF0IGFyZSBzZXQNCgkJCQkJCWlmICgkdXJsICYmIFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6Y2hlY2tTdHJpbmcoJHVybCkpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKCFpc3NldCgkdGhpcy0+dXBkYXRlVGFyZ2V0c1VbJHR5cGVdKSkNCgkJCQkJCQl7DQoJCQkJCQkJCSR0aGlzLT51cGRhdGVUYXJnZXRzVVskdHlwZV0gPSBhcnJheSgpOw0KCQkJCQkJCX0NCgkJCQkJCQkkdGhpcy0+dXBkYXRlVGFyZ2V0c1VbJHR5cGVdW10gPSAkdXJsOw0KCQkJCQkJfQ0KCQkJCQkJLy8gR2V0IHRoZSBmb2xkZXJzIGlmIHNldA0KCQkJCQkJJGZvbGRlciA9ICR0aGlzLT5jb21QYXJhbXMtPmdldCgkdHlwZS4nZHJvcGJveGZvbGRlcicuJG51bVN0ciwgbnVsbCk7DQoJCQkJCQkvLyBvbmx5IGxvYWQgdGhvc2UgdGhhdCBhcmUgc2V0DQoJCQkJCQlpZiAoJGZvbGRlciAmJiBbW1tDb21wb25lbnRdXV1IZWxwZXI6OmNoZWNrU3RyaW5nKCRmb2xkZXIpKQ0KCQkJCQkJew0KCQkJCQkJCWlmICghaXNzZXQoJHRoaXMtPnVwZGF0ZVRhcmdldHNGWyR0eXBlXSkpDQoJCQkJCQkJew0KCQkJCQkJCQkkdGhpcy0+dXBkYXRlVGFyZ2V0c0ZbJHR5cGVdID0gYXJyYXkoKTsNCgkJCQkJCQl9DQoJCQkJCQkJJHRoaXMtPnVwZGF0ZVRhcmdldHNGWyR0eXBlXVtdID0gJGZvbGRlcjsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIHRhcmdldCB2ZXJzaW9uIGxlc3MgdGhlbiBvciBlcXVhbCB0byAyLjAuMg0KCQkJaWYgKGNvdW50KCR2ZXJzaW9uKSA9PSAzICYmICgkdmVyc2lvblswXSA9PSAyICYmICR2ZXJzaW9uWzFdID09IDAgJiYgJHZlcnNpb25bMl0gPD0gMykgfHwgICgkdmVyc2lvblswXSA8IDIpKQ0KCQkJew0KCQkJCS8vIHdlIG5lZWQgdG8gbWFrZSBhIGRhdGFiYXNlIGNvcnJlY3Rpb24NCgkJCQkkZml4X2NhdGVnb3JpZXMgPSBhcnJheSgNCgkJCQkJJ2NvbV9zZXJtb25kaXN0cmlidXRvci5zZXJtb25zJyA9PiAnY29tX3Nlcm1vbmRpc3RyaWJ1dG9yLnNlcm1vbicNCgkJCQkpOw0KW0NVU1RPTUNPREU9Zml4Q2F0ZWdvcmllc05hbWluZ10NCgkJCX0NCgkJfQ==', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvY2hyaXN0aWFuL0pvb21sYS1TZXJtb24tRGlzdHJpYnV0b3IvcmF3L2JyYW5jaC9tYXN0ZXIvYWRtaW4vYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KVGhlIGJlc3Qgd2F5IHRvIHNlZSBhbGwgeW91ciBvcHRpb25zIGlzIHRvIGluc3RhbGwgdGhpcyBjb21wb25lbnQgb24geW91IEpvb21sYSB3ZWJzaXRlIGFuZCB0ZXN0IGFsbCBmZWF0dXJlcyB5b3Vyc2VsZi4gSGVyZSBpcyBhIFtkaXJlY3QgZG93bmxvYWQgbGlua10oaHR0cHM6Ly9naXQudmRtLmRldi9jaHJpc3RpYW4vSm9vbWxhLVNlcm1vbi1EaXN0cmlidXRvci9hcmNoaXZlL21hc3Rlci56aXApDQoNCiAqKklmIHlvdSBsaWtlIG91ciBjb21wb25lbnQgcGxlYXNlIHJhdGUgaXQgb24gdGhlIFtKb29tbGEgSW5kZXhdKGh0dHA6Ly9leHRlbnNpb25zLmpvb21sYS5vcmcvZXh0ZW5zaW9ucy9leHRlbnNpb24vbGl2aW5nL3JlbGlnaW9uL3Nlcm1vbi1kaXN0cmlidXRvcikqKg0KDQojIyMgRXhhbXBsZSBXZWJzaXRlLCBUaGF0IEhhcyBPdmVyIDYwMDAgQXVkaW8gRmlsZXMNCg0KW0xvdWRWb2ljZS5vcmddKGh0dHA6Ly93d3cubG91ZHZvaWNlLm9yZykNCltUcnVlQ2hyaXN0aWFuLkNodXJjaF0oaHR0cHM6Ly90cnVlY2hyaXN0aWFuLmNodXJjaC8pDQoNCiMjIyBTb21lIFZpZGVvIERlbW9uc3RyYXRpb25zDQoNCisgW1NldHVwIG92ZXJ2aWV3XShodHRwczovL3lvdXR1LmJlL3lNUHAxQ3AzV18wP3Q9MjBtOHMpDQorIFtTZXR1cCBEcm9wYm94XShodHRwczovL3lvdXR1LmJlL2J0cEtGRGswLWRJKQ0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCg0KIyMgQnVpbGQgVGltZSA6aG91cmdsYXNzOg0KDQoqKiMjI3RvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI3RvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKiAoYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzYXZlZCAtDQpkdWUgdG8gW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmxsZXdlbGx5bkBqb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSk=', 1, '', 'A sermon distributor that links to Dropbox.', '', '', 'SermonDistributor (public)', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', '', 2, 'https://git.vdm.dev/christian/Joomla-Sermon-Distributor/raw/branch/3.x/sermondistributor_update_server.xml', 'https://www.vdm.io/', '', 'wYUPtkF7wf9oElDwxV+wpc7+8d1dEbx+60+sCitHg6I=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_site_helper\":[]}}', 1, 456, '', 1, 51), +(9, '', 1, '', '', '', 1, '', '', '', 1, '', 1, '', '', 1, 1, 1, 1, '', 1, '', '', 1, '', 1, '{\"addcontributors0\":{\"name\":\"CrossWire\",\"title\":\"Modules\",\"email\":\"sword-support@crosswire.org\",\"website\":\"https:\\/\\/wiki.crosswire.org\\/\",\"use\":\"2\",\"show\":\"3\"}}', 3, 1, 3, 2, 'Llewellyn van der Merwe', '/var/www/getbible_j3', 'getBible.txt', '', '', 'Vast Development Method', '3.0.9', 'Copyright (C) 2015. All Rights Reserved', '2015-12-03 01:42:15', '', 'WhakPvjCkWnGdctg/smdT6v066C5C4LVSQEB6mI8IUY=', 'ufh7xN30c2gDeh3Ond+j0avLsgeYmHCznjyggIFu9II=', '', 'jfhmfXB1y7wL18HAkAe05yoha/QmICC3BDTbmW8LcnY=', '', '', '', 1, '', 'Welcome to the next level of scripture engagement - The Bible for Joomla! Our purpose is to bring the Word of God to every person, in their native language, entirely free. This isn\'t just a typical extension; it\'s a groundbreaking tool developed to span language divides and deliver a rich, customizable Bible study experience to users worldwide.\r\n\r\nWith an impressive array of 80 translations, our Joomla extension allows people from all corners of the globe to read, comprehend, and meditate on the Holy Scriptures in their preferred language. Moreover, we offer the unique opportunity for individuals to host the Bible on their own website, further extending the reach of the Word.\r\n\r\nWe\'ve integrated robust features such as note-taking, tagging, and a search function, to enhance your interaction with the Scriptures. This allows users to immerse themselves in the text, crafting a personal journey through the Bible that can be revisited in future sessions. Furthermore, our innovative linker system assigns each visitor a unique identifier (GUID) - no login required. This means you can create notes, select favorite verses, and even share sessions, while maintaining control over your personalized content.\r\n\r\nA distinctive feature of our application is the integration with OpenAI. This advanced capability allows website owners to create custom prompts to interact with OpenAI using text from any translation. This function allows you to ask questions, gain clarity, and deepen your understanding of the Scriptures in an engaging and user-friendly manner.\r\n\r\nIn essence, The Bible for Joomla is designed to transform how the Word of God is shared, studied, and comprehended. Its comprehensive features, combined with a user-friendly interface, make it an essential tool for individuals, churches, and website owners alike. Join us on this journey of faith as we make the wisdom and guidance of the Scriptures accessible to all, one verse, one language, and one website at a time.', 'joomla@vdm.io', '', 'https://vdm.bz/get-bible', 'p80zGYsGeHr9dMLJ3A4I1NFtH/rbsPznXzsY6dSKtUM=', '/var/git_', '294267c5-bcf9-4b61-b462-af2364e0358b', 'images/getBible.jpg', '', 'https://git.vdm.dev/getBible/joomla-component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2024-04-25 15:35:03', '', 'Get Bible', 'Getbible', 'TrueChristianChurch', 4, '', '', 'CS8qKg0KCSAqIExvYWQgdGhlIHNjcmlwdHVyZSBpbnRvIGNvbnRlbnQNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICYkcm93ICAgICBUaGUgYXJ0aWNsZSBvYmplY3QuICBOb3RlICRhcnRpY2xlLT50ZXh0IGlzIGFsc28gYXZhaWxhYmxlDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJHBsdWdpbiAgIFRoZSBwbHVnaW4gcGFyYW1zDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgMi4wLjENCgkgKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkU2NyaXB0dXJlKG9iamVjdCAmJHJvdywgb2JqZWN0ICRwbHVnaW4pOiB2b2lkDQoJew0KCQkvLyBnZXQgY2FsbCBzdHJpbmcNCgkJJGNhbGxfY2xhc3MgPSAkcGx1Z2luLT5nZXQoJ2NhbGxfY2xhc3MnLCAnZ2V0QmlibGUnKTsNCg0KCQkvLyBTaW1wbGUgcGVyZm9ybWFuY2UgY2hlY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYm90IHNob3VsZCBwcm9jZXNzIGZ1cnRoZXINCgkJaWYgKHN0cnBvcygkcm93LT50ZXh0LCAkY2FsbF9jbGFzcykgPT09IGZhbHNlKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlTdXBlcl9fXzExODkyY2ZhXzM3NGVfNGUzZl9iMGJjXzUzMTg3MWM4MjJkOV9fX1Bvd2VyOjpfKCdHZXRCaWJsZS5Mb2FkZXInKS0+c2V0KCRyb3csICRwbHVnaW4pOw0KCX0=', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJGFwcF0=', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJGFwcF0=', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskYXBwXQ==', 'CQkJLy8gY2hlY2sgaWYgdGhpcyBoYXMgdGhlIG9sZCBnZXRCaWJsZSBleHRlbnNpb24gaW5zdGFsbGVkDQoJCQkkcGF0aCA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL2dldC5waHAnOw0KCQkJaWYgKGlzX3JlYWRhYmxlKCRwYXRoKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgiDQoJCQkJCTxwPlVuZm9ydHVuYXRlbHksIHlvdXIgYXR0ZW1wdCB0byBpbnN0YWxsIGdldEJpYmxlIFZlcnNpb24gMiBoYXMgZmFpbGVkLiBUaGUgcmVhc29uIGZvciB0aGlzIGZhaWx1cmUgaXMgZHVlIHRvIGFuIGV4aXN0aW5nIGluc3RhbGxhdGlvbiBvZiB0aGUgcHJldmlvdXMgdmVyc2lvbiB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBvdXIgbGF0ZXN0IHVwZGF0ZS4NCgkJCQkJV2UgZGVlcGx5IHJlZ3JldCB0aGlzIGludGVycnVwdGlvbiB0byB5b3VyIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBUbyByZXNvbHZlIHRoaXMgaXNzdWUsIHBsZWFzZSBmaXJzdCB1bmluc3RhbGwgdGhlIG9sZCB2ZXJzaW9uIG9mIGdldEJpYmxlLiBJZiB5b3UgaGF2ZSBwZXJzb25hbGl6ZWQgbm90ZXMgYW5kIHRhZ3MgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiwgPGI+ZG9uJ3QgZm9yZ2V0IHRvIG1hbnVhbGx5IGJhY2sgdGhlbSB1cDwvYj4sIGFzIHRoZXkgd2lsbCBiZSBsb3N0IG90aGVyd2lzZS48L3A+DQoJCQkJCTxwPldlIHVuZGVyc3RhbmQgdGhhdCB0aGlzIHByb2Nlc3MgbWF5IGJlIGluY29udmVuaWVudCBhbmQgY291bGQgcG90ZW50aWFsbHkgcG9zZSBjaGFsbGVuZ2VzLiBUaGVyZWZvcmUsIHdlJ3ZlIHB1dCBhIHN1cHBvcnQgdGVhbSBpbiBwbGFjZSB0byBhc3Npc3QgeW91LiBTaG91bGQgeW91IHJlcXVpcmUgYW55IHRlY2huaWNhbCBhc3Npc3RhbmNlIG9yIGhhdmUgcXVlc3Rpb25zLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0IHRvIHVzIGF0OiA8YSBocmVmPSdodHRwczovL2dpdC52ZG0uZGV2L2dldEJpYmxlL3N1cHBvcnQnIHRpdGxlPSdnZXRCaWJsZSBTdXBwb3J0Jz5nZXRCaWJsZSBTdXBwb3J0PC9hPi4NCgkJCQkJV2UgYXBwcmVjaWF0ZSB5b3VyIHVuZGVyc3RhbmRpbmcgYW5kIGNvb3BlcmF0aW9uIGR1cmluZyB0aGlzIHRyYW5zaXRpb24gdG8gZ2V0QmlibGUgVmVyc2lvbiAyLiBPdXIgdGVhbSBpcyBjb21taXR0ZWQgdG8gaGVscGluZyB5b3UgZXZlcnkgc3RlcCBvZiB0aGUgd2F5LiBUaGFuayB5b3UhPC9wPiIsICdlcnJvcicpOw0KDQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KW0NVU1RPTUNPREU9Z2V0QmlibGVSZW1vdmVPbGRMaWJdDQpbQ1VTVE9NQ09ERT1waHBDb25maWd1cmF0aW9uQ2hlY2tDYWxsKyRhcHBd', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvZ2V0QmlibGUvam9vbWxhLWNvbXBvbmVudC9yYXcvYnJhbmNoL21hc3Rlci9hZG1pbi9hc3NldHMvaW1hZ2VzL3ZkbS1jb21wb25lbnQuanBnICJHZXRCaWJsZSIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IG5ldmVyIG1ha2luZyBvbmUgbWlzdGFrZSBvciB0YWtpbmcgYW55IGNvZmZlZSBicmVhay4pDQoNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCioqIyMjYWN0dWFsSG91cnNTcGVudCMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsRGF5c1NwZW50IyMjIEVpZ2h0IEhvdXIgRGF5cyoqICh0aGUgYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzcGVudCkNCg0KPiAod2l0aCB0aGUgZm9sbG93aW5nIGJyZWFrIGRvd246DQo+ICoqZGVidWdnaW5nIEAjIyNkZWJ1Z2dpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNDsNCj4gKipwbGFubmluZyBAIyMjcGxhbm5pbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNzsNCj4gKiptYXBwaW5nIEAjIyNtYXBwaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDEwOw0KPiAqKm9mZmljZSBAIyMjb2ZmaWNlSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDY7KQ0KDQoqKiMjI2FjdHVhbFRvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbFRvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKg0KKGEgdG90YWwgb2YgdGhlIHJlYWxpc3RpYyB0aW1lIGZyYW1lIGZvciB0aGlzIHByb2plY3QpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IHdpdGggdGhlIG5vcm1hbCBldmVyeWRheSByZWFsaXRpZXMgYXQgdGhlIG9mZmljZSwgdGhhdCBpbmNsdWRlcyB0aGUgY29tcG9uZW50IHBsYW5uaW5nLCBtYXBwaW5nICYgZGVidWdnaW5nLikNCg0KUHJvamVjdCBkdXJhdGlvbjogKiojIyNwcm9qZWN0V2Vla1RpbWUjIyMgd2Vla3MqKiBvciAqKiMjI3Byb2plY3RNb250aFRpbWUjIyMgbW9udGhzKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', 1, '', 'The Bible for Joomla', 'Q1JFQVRFIElOREVYIGlkeF8jX19bW1tjb21wb25lbnRdXV1fdGFnZ2VkX3ZlcnNlX29uX2xpbmtlcl9hbmRfdGFnDQpPTiAjX19bW1tjb21wb25lbnRdXV1fdGFnZ2VkX3ZlcnNlKGxpbmtlciwgdGFnKTsNCg0KQ1JFQVRFIElOREVYIGlkeF8jX19bW1tjb21wb25lbnRdXV1fdmVyc2Vfb25fdmVyc2VfYW5kX2FiYnJldmlhdGlvbg0KT04gI19fW1tbY29tcG9uZW50XV1dX3ZlcnNlKHZlcnNlLCBhYmJyZXZpYXRpb24pOw0KDQpDUkVBVEUgSU5ERVggaWR4XyNfX1tbW2NvbXBvbmVudF1dXV9ib29rX29uX25yX2FuZF9hYmJyZXZpYXRpb24NCk9OICNfX1tbW2NvbXBvbmVudF1dXV9ib29rKG5yLCBhYmJyZXZpYXRpb24pOw0KDQpDUkVBVEUgSU5ERVggaWR4XyNfX1tbW2NvbXBvbmVudF1dXV90YWdfb25fZ3VpZF9hbmRfcHVibGlzaGVkDQpPTiAjX19bW1tjb21wb25lbnRdXV1fdGFnKGd1aWQsIHB1Ymxpc2hlZCk7', '', 'Get Bible', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', '', 2, 'https://git.vdm.dev/getBible/joomla-component/raw/branch/3.x/update_server.xml', 'https://getbible.net', '', 'q9tMo1AjOAL6I9oZqofypze1ACLIXoHGBjPM4tQ3i20=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"\",\"power_admin_helper\":{\"power_admin_helper0\":{\"power\":\"11892cfa-374e-4e3f-b0bc-531871c822d9\",\"as\":\"GetBibleFactory\",\"build\":\"2\"},\"power_admin_helper1\":{\"power\":\"4612af84-5a42-4ea5-87bf-9d79cc19c330\",\"as\":\"GiteaFactory\",\"build\":\"2\"}},\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 231, '', 1, 53), +(10, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'JCB.txt', '', '', 'Joomla Component Builder', '1.0.6', 'Copyright (C) 2015. All Rights Reserved', '2015-08-05 00:40:06', '', 'Sb63t8FUeBmJerlrccYnV+c45itSf6qozwyJbovlt00=', 'Scf4AZ51hU0np7AfozZ9okVz5XH/+i2h7HG0vAuMxzs=', '', 'n/IPG15cndggdC4wOdJ39irK69zVxjsQvlGLtJQWF5w=', '', '', '', 1, '', 'Just a basic country listing with currency and region linkage.', 'joomla@vdm.io', '', '', 'TMwZZ6OZ74oJ8SHkEmmHI6+8kFIcSE79ZVaUl6FEGWU=', '', '1813baef-e42d-4673-aca6-94327e1fe873', 'images/vdm/jcb500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2020-11-17 17:18:47', 2, 'JCB Countries', 'jcb_countries', '', 4, '', '', '', '', '', '', '', '', '', '', 'ICMgIyMjQ29tcG9uZW50X25hbWUjIyMgKCMjI1ZFUlNJT04jIyMpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IG5ldmVyIG1ha2luZyBvbmUgbWlzdGFrZSBvciB0YWtpbmcgYW55IGNvZmZlZSBicmVhay4pDQoNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCioqIyMjYWN0dWFsSG91cnNTcGVudCMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsRGF5c1NwZW50IyMjIEVpZ2h0IEhvdXIgRGF5cyoqICh0aGUgYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzcGVudCkNCg0KPiAod2l0aCB0aGUgZm9sbG93aW5nIGJyZWFrIGRvd246DQo+ICoqZGVidWdnaW5nIEAjIyNkZWJ1Z2dpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNDsNCj4gKipwbGFubmluZyBAIyMjcGxhbm5pbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNzsNCj4gKiptYXBwaW5nIEAjIyNtYXBwaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDEwOw0KPiAqKm9mZmljZSBAIyMjb2ZmaWNlSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDY7KQ0KDQoqKiMjI2FjdHVhbFRvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbFRvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKg0KKGEgdG90YWwgb2YgdGhlIHJlYWxpc3RpYyB0aW1lIGZyYW1lIGZvciB0aGlzIHByb2plY3QpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IHdpdGggdGhlIG5vcm1hbCBldmVyeWRheSByZWFsaXRpZXMgYXQgdGhlIG9mZmljZSwgdGhhdCBpbmNsdWRlcyB0aGUgY29tcG9uZW50IHBsYW5uaW5nLCBtYXBwaW5nICYgZGVidWdnaW5nLikNCg0KUHJvamVjdCBkdXJhdGlvbjogKiojIyNwcm9qZWN0V2Vla1RpbWUjIyMgd2Vla3MqKiBvciAqKiMjI3Byb2plY3RNb250aFRpbWUjIyMgbW9udGhzKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KW0NVU1RPTUNPREU9cmVhZE1FY29udHJpYnV0b3JzXQ==', '', '', 'JCB Country Component', '', '', 'JCB Countries (public)', '.git', '', '', 1, 'https://www.vdm.io/updates/demointernal_update_server.xml', 'http://www.joomlacomponentbuilder.com', '', 'B4bdzi10xwbp40t4yt2GfwJHBHY4jZKHXBEOUqcSR1E=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 31, '', 1, 4), +(11, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', 1, '', 1, 3, 'Llewellyn van der Merwe', '', 'JCB.txt', '', '', 'Joomla Component Builder', '2.10.0', 'Copyright (C) 2015. All Rights Reserved', '2015-04-30 12:04:35', '', 'eowQ0CIjxqtgfLAW0VSgzSDJLZOeYQVvAaBcSgQLsn8=', 'QkCHQBQPz4f6gdF6impjQPKUtbWS0aq0tLfRA6nWGyw=', '', 'fUkVTE3M3hVpj/Nmb/klQBRsOLD33eE9yP7JdwU0fNs=', '', '', 'A_134', 2, '', 'The Component helps to update/sync all your field types to the latest release of JCB without the need to install a fresh JCB. Since all JCB packages also include the data down to the field-type layer, we basically build one view that has all field types in it and so will include all field-types as per/say to update your system.\r\n\r\nShould you have customized your field-types, it will probably override them!', 'joomla@vdm.io', '', '', 'IHelGQOmQQriHgaIu3hZcGbfg2ooXq5p+9BTWRsd1V8=', '', '551053a0-0e17-4cec-909a-28079878ce1e', 'images/vdm/jcb500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '«', '2022-06-22 14:47:21', 3, 'Field Type Updater', 'field_type_updater', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'JCB Field Type Updater', '', '', 'Field Type Updater (public)', '.git', '', '', 1, 'https://www.vdm.io/updates/componentbuilder_basic_update_server.xml', 'http://www.joomlacomponentbuilder.com', '', 'oDiIF5J79N0K4p7b6ygC6MYCzSEIH7iVML4/SlvsFwg=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 43, '', 1, 55), +(12, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, '', 2, 3, 'Llewellyn van der Merwe', '', 'JCB.txt', '', '', 'Joomla Component Builder', '1.0.1', 'Copyright (C) 2015. All Rights Reserved', '2015-04-30 13:04:35', '', 'sajfsZ/cXooNKDqU/c9mb8GPS2LhFpIcHFtG0p7HcnI=', 'wFf9c7zgXfT5EeLS81c1EfTkTGNDbp2sVo6qMqilMgU=', '', 'SQ28+O95n2Iw3QJquIZOTi0SDj2ORX4iJYP+BgIaPIY=', '', '', '', 1, '', 'The Component Builder\'s Compiler Configuration Architect', 'joomla@vdm.io', '', '', 'aMOO874VLYioby1Mp/sowVQ/lsbMV1maSl+R40gxrVY=', '', 'e3272f27-e9ec-42a5-bdd4-e45976f67ce3', 'images/vdm/jcb500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2019-07-04 01:17:05', 2, 'Compiler Configuration Architect', 'compilerconfigurationarchitect', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Builds JCB Compiler', '', '', 'Compiler Configuration Architect', '.git', '', '', 2, 'https://raw.githubusercontent.com/vdm-io/Compiler-Configuration-Architect/master/compilerconfigurationarchitect_update_server.xml', 'http://www.joomlacomponentbuilder.com', '', '6wcdNcmqeGJ8qOOVr0KBv/GSfHo6NFLlQK/Tw7ZRtro=', '', '', 1, 41, '', 1, 57), +(13, 1, '', '', '', '', '', '', '', 1, '', '', 1, 1, '', '', '', '', '', '', 1, '', '', '', '', '', '{}', 3, 1, 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.3', 'Copyright (C) 2019 Vast Development Method. All rights reserved.', '2019-07-30 11:04:35', '', '0L8umlMVGbIHBECkJo9MdF/WOL+DKQ36mdkuHyiSfc4=', 'TJMfFavY9uf+yMAG9r2+PP/+p5+th76IQsqYDUq7Dd4=', '', '5z12QnQCfREITlFuWJKPAy2AyjYtFg+Z5oqxtZgAe1o=', '', '', '', 1, '', 'The library of books, documents, media and other type of files.', 'dev@vdm.io', '', '', 'zprR7+IHQCH3c3V94azOxAawULNZzTAHdgrseaOKw4M=', '', 'b8fa56f7-483b-4b8f-9845-4479ce15ccc7', 'images/vdm/Libary500.jpg', '', '', 'GNU General Public License version 2 or later; see LICENSE.txt', 1, 'ℂ𝕃', '2021-03-08 03:13:22', 3, 'Library', 'librarydatabase', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9ZmlsZUhlbHBlckJvdGhd', 'W0NVU1RPTUNPREU9Y291bnRMb2NhbERvd25sb2FkXQ==', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXSgvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV8jIyNjb21wb25lbnQjIyMvYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMgQ29tcG9uZW50IE51bWJlcg0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCiMgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyDQoNCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEpDQiB2aXNpdCBbVkRNXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKSBUb2RheSEgVGhlIGZ1dHVyZSBpcyBoZXJlIQ==', '', '', 'Library of books and more', '', '', 'Library (books)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Plugin-Builder/master/pluginbuilder_update_server.xml', 'https://www.vdm.io/', '', 'uxsjjVYguNu3me77pIvjROAyZO635/LEg6Xv32Xs24o=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 96, '', 1, 54), +(14, 1, '', 1, '', 1, '', '', '', 1, '', '', 1, '', '', '', 1, '', 1, '', 1, '', 1, 1, 1, 1, '{}', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'JCB-pro.txt', '', '', 'Vast Development Method', '3.1.6', 'Copyright (C) 2015 Vast Development Method. All rights reserved.', '2015-04-30 12:04:35', '', 'Szn2KFyt+xquQEoCXEQGYeN/K01CYQG9mzQ6/5sy0kY=', '2apXsgmRStpvRORC56BI8bYI0tCfEK5qrmgVx5eclh/JUyy3NLstqb7a8IWAow/3VIk5aovN3J7hQccaiFb54A==', 'joomla-component-builder', 'fk1chg/pRL/5EzYsisjrDCv/+I72xNIpZzRjakzqsWo=', 'LmZpZWxkTWVkaXVtIHsgd2lkdGg6IDEyMHB4OyB9DQouZmllbGRMYXJnZSB7IHdpZHRoOiAzMjBweDsgfQ0KLmZpZWxkTWlkIHsgd2lkdGg6IDgwcHg7IH0NCi5maWVsZEZ1bGwgeyB3aWR0aDogMTAwJTsgfQ0KLmZpZWxkU21hbGwgeyB3aWR0aDogNjBweDsgfQ0KY29kZSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAzcHg7fQ==', '', '', 1, '', 'The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.\r\n\r\nWhether you\'re a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!', 'joomla@vdm.io', '', 'https://vdm.bz/contribute-financially-to-jcb', 'wtbW3I4qj/wjgY5xeJ1EF65i5V2eyZmXu6dRGsbBYi8Qg05hB39CdFNEeVZjIqDKkkTO98phUEkK2+q3E0HD7g==', '', '67d8681b-6556-45a0-94f1-a53cd9cdad97', 'images/vdm/jcb500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder', 'GNU General Public License version 2 or later; see LICENSE.txt', 1, '✓', '2023-10-21 13:48:20', 2, 'Component Builder', 'componentbuilder', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'CS8qDQoJICogQ29tcGlsZXIgYXV0b2xvYWRlcg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXV0b0xvYWRlcigpDQoJew0KCQkvLyBsb2FkIHRoZSBjb21waWxlciBjbGFzc2VzDQoJCXJlcXVpcmVfb25jZSBKUEFUSF9BRE1JTklTVFJBVE9SLicvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvZ2V0LnBocCc7DQoJCXJlcXVpcmVfb25jZSBKUEFUSF9BRE1JTklTVFJBVE9SLicvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvc3RydWN0dXJlLnBocCc7DQoJCXJlcXVpcmVfb25jZSBKUEFUSF9BRE1JTklTVFJBVE9SLicvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvaW50ZXJwcmV0YXRpb24ucGhwJzsNCgkJcmVxdWlyZV9vbmNlIEpQQVRIX0FETUlOSVNUUkFUT1IuJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9pbmZ1c2lvbi5waHAnOw0KCX0NCg0KCS8qKg0KCSAqCWluZGVudCBIVE1MDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbmRlbnQoJGh0bWwpDQoJew0KCQkvLyBsb2FkIHRoZSBjbGFzcw0KCQlyZXF1aXJlX29uY2UgSlBBVEhfQURNSU5JU1RSQVRPUi4nL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL2luZGVudGVyLnBocCc7DQoJCS8vIHNldCBuZXcgaW5kZW50ZXINCgkJJGluZGVudGVyID0gbmV3IEluZGVudGVyKCk7DQoJCS8vIHJldHVybiBpbmRlbnRlZCBodG1sDQoJCXJldHVybiAkaW5kZW50ZXItPmluZGVudCgkaHRtbCk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja0ZpbGVUeXBlKCRmaWxlLCAkc3VmaXgpIHsNCgkJLy8gbm93IGNoZWNrIGlmIHRoZSBmaWxlIGVuZHMgd2l0aCB0aGUgc3VmaXgNCgkJcmV0dXJuICRzdWZpeCA9PT0gIiIgfHwgKCRzdWZpeCA9PSBzdWJzdHIoc3RycmNocigkZmlsZSwgIi4iKSwgLXN0cmxlbigkc3VmaXgpKSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbWFnZUluZm8oJHBhdGgsJHJlcXVlc3QgPSAndHlwZScpDQoJew0KCQkvLyBzZXQgaW1hZ2UNCgkJJGltYWdlID0gSlBBVEhfU0lURS4nLycuJHBhdGg7DQoJCS8vIGNoYWNrIGlmIGV4aXN0cw0KCQlpZiAoZmlsZV9leGlzdHMoJGltYWdlKSkNCgkJew0KCQkJLy8gZ2V0IGltYWdlIGluZm8NCgkJCSRyZXN1bHQgPSBnZXRpbWFnZXNpemUoJGltYWdlKTsNCgkJCS8vIHJldHVybiB0eXBlIHJlcXVlc3QNCgkJCXN3aXRjaCAoJHJlcXVlc3QpDQoJCQl7DQoJCQkJY2FzZSAnd2lkdGgnOg0KCQkJCQlyZXR1cm4gJHJlc3VsdFswXTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnaGVpZ2h0JzoNCgkJCQkJcmV0dXJuICRyZXN1bHRbMV07DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3R5cGUnOg0KCQkJCQkkZXh0ZW5zaW9ucyA9IGFycmF5KA0KCQkJCQkJSU1BR0VUWVBFX0dJRiA9PiAiZ2lmIiwNCgkJCQkJCUlNQUdFVFlQRV9KUEVHID0+ICJqcGciLA0KCQkJCQkJSU1BR0VUWVBFX1BORyA9PiAicG5nIiwNCgkJCQkJCUlNQUdFVFlQRV9TV0YgPT4gInN3ZiIsDQoJCQkJCQlJTUFHRVRZUEVfUFNEID0+ICJwc2QiLA0KCQkJCQkJSU1BR0VUWVBFX0JNUCA9PiAiYm1wIiwNCgkJCQkJCUlNQUdFVFlQRV9USUZGX0lJID0+ICJ0aWZmIiwNCgkJCQkJCUlNQUdFVFlQRV9USUZGX01NID0+ICJ0aWZmIiwNCgkJCQkJCUlNQUdFVFlQRV9KUEMgPT4gImpwYyIsDQoJCQkJCQlJTUFHRVRZUEVfSlAyID0+ICJqcDIiLA0KCQkJCQkJSU1BR0VUWVBFX0pQWCA9PiAianB4IiwNCgkJCQkJCUlNQUdFVFlQRV9KQjIgPT4gImpiMiIsDQoJCQkJCQlJTUFHRVRZUEVfU1dDID0+ICJzd2MiLA0KCQkJCQkJSU1BR0VUWVBFX0lGRiA9PiAiaWZmIiwNCgkJCQkJCUlNQUdFVFlQRV9XQk1QID0+ICJ3Ym1wIiwNCgkJCQkJCUlNQUdFVFlQRV9YQk0gPT4gInhibSIsDQoJCQkJCQlJTUFHRVRZUEVfSUNPID0+ICJpY28iDQoJCQkJCSk7DQoJCQkJCXJldHVybiAkZXh0ZW5zaW9uc1skcmVzdWx0WzJdXTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnYXR0cic6DQoJCQkJCXJldHVybiAkcmVzdWx0WzNdOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdhbGwnOg0KCQkJCWRlZmF1bHQ6DQoJCQkJCXJldHVybiAkcmVzdWx0Ow0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QmV0d2VlbigkY29udGVudCwkc3RhcnQsJGVuZCkNCgl7DQoJCSRyID0gZXhwbG9kZSgkc3RhcnQsICRjb250ZW50KTsNCgkJaWYgKGlzc2V0KCRyWzFdKSkNCgkJew0KCQkJJHIgPSBleHBsb2RlKCRlbmQsICRyWzFdKTsNCgkJCXJldHVybiAkclswXTsNCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QWxsQmV0d2VlbigkY29udGVudCwkc3RhcnQsJGVuZCkNCgl7DQoJCSRidWtldCA9IGFycmF5KCk7DQoJCWZvciAoJGkgPSAwOyA7ICRpKyspDQoJCXsNCgkJCSRmb3VuZCA9IFN1cGVyX19fZGI4N2MzMzlfNWJiNl80MjkxX2E3ZWZfMmM0OGVhMWIwNmJjX19fUG93ZXI6OmJldHdlZW4oJGNvbnRlbnQsJHN0YXJ0LCRlbmQpOw0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRmb3VuZCkpDQoJCQl7DQoJCQkJJGJ1a2V0W10gPSAkZm91bmQ7DQoJCQkJJHJlbW92ZSA9ICRzdGFydC4kZm91bmQuJGVuZDsNCgkJCQkkY29udGVudCA9IHN0cl9yZXBsYWNlKCRyZW1vdmUsJycsJGNvbnRlbnQpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWJyZWFrOw0KCQkJfQ0KCQkJLy8gc2FmZXR5IGNhdGNoDQoJCQlpZiAoJGkgPT0gNTAwKQ0KCQkJew0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAgYXJyYXlfdW5pcXVlKCRidWtldCk7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdHlwZUZpZWxkKCR0eXBlLCRvcHRpb24gPSAnZGVmYXVsdCcpDQoJew0KCQkvLyBsaXN0IG9mIGRlZmF1bHQgZmllbGRzDQoJCS8vIGh0dHBzOi8vZG9jcy5qb29tbGEub3JnL0Zvcm1fZmllbGQNCgkJJGZpZWxkcyA9IGFycmF5KA0KCQkJJ2RlZmF1bHQnID0+IGFycmF5KA0KCQkJCSdhY2Nlc3NsZXZlbCcsJ2NhY2hlaGFuZGxlcicsJ2NhbGVuZGFyJywnY2FwdGNoYScsJ2NhdGVnb3J5JywnY2hlY2tib3gnLA0KCQkJCSdjaGVja2JveGVzJywnY29sb3InLCdjb21ibycsJ2NvbXBvbmVudGxheW91dCcsJ2NvbnRlbnRsYW5ndWFnZScsJ2VkaXRvcicsDQoJCQkJJ2Nocm9tZXN0eWxlJywnY29udGVudHR5cGUnLCdkYXRhYmFzZWNvbm5lY3Rpb24nLCdlZGl0b3JzJywnZW1haWwnLCdmaWxlJywNCgkJCQknZmlsZWxpc3QnLCdmb2xkZXJsaXN0JywnZ3JvdXBlZGxpc3QnLCdoaWRkZW4nLCdmaWxlJywnaGVhZGVydGFnJywnaGVscHNpdGUnLA0KCQkJCSdpbWFnZWxpc3QnLCdpbnRlZ2VyJywnbGFuZ3VhZ2UnLCdsaXN0JywnbWVkaWEnLCdtZW51Jywnbm90ZScsJ3Bhc3N3b3JkJywNCgkJCQkncGx1Z2lucycsJ3JhbmdlJywncmFkaW8nLCdyZXBlYXRhYmxlJywncnVsZXMnLCdzZXNzaW9uaGFuZGxlcicsJ3NwYWNlcicsJ3NxbCcsJ3RhZycsDQoJCQkJJ3RlbCcsJ21lbnVpdGVtJywnbW9kdWxlbGF5b3V0JywnbWV0ZXInLCdtb2R1bGVvcmRlcicsJ21vZHVsZXBvc2l0aW9uJywnbW9kdWxldGFnJywNCgkJCQkndGVtcGxhdGVzdHlsZScsJ3RleHQnLCd0ZXh0YXJlYScsJ3RpbWV6b25lJywndXJsJywndXNlcicsJ3VzZXJncm91cCcNCgkJCSksIA0KCQkJJ3RleHQnID0+IGFycmF5KA0KCQkJCSdjYWxlbmRhcicsJ2NvbG9yJywnZWRpdG9yJywnZW1haWwnLCdwYXNzd29yZCcsJ3RlbCcsJ3RleHQnLCd0ZXh0YXJlYScsJ3VybCcsJ251bWJlcicsJ3JhbmdlJw0KCQkJKSwgDQoJCQknbGlzdCcgPT4gYXJyYXkoDQoJCQkJJ2NoZWNrYm94ZXMnLCdjaGVja2JveCcsJ2xpc3QnLCdyYWRpbycNCgkJCSksIA0KCQkJJ2R5bmFtaWMnID0+IGFycmF5KA0KCQkJCSdjYXRlZ29yeScsJ2hlYWRlcnRhZycsJ3RhZycsJ3J1bGVzJywndXNlcicsJ2ZpbGUnLCdmaWxlbGlzdCcsJ2ZvbGRlcmxpc3QnLCdpbWFnZWxpc3QnLCdpbnRlZ2VyJywndGltZXpvbmUnLCdtZWRpYScsJ21ldGVyJw0KCQkJKQ0KCQkpOw0KCQkNCgkJaWYgKGluX2FycmF5KCR0eXBlLCRmaWVsZHNbJG9wdGlvbl0pKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7CQkNCgl9', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlckhlbHBlckJvdGhd', '', '', '', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclBvc3RmbGlnaHRVcGRhdGVdDQoJCQkvLyB3ZSBtdXN0IHVwZGF0ZSBhbGwgYXJlYXMgdGhhdCBtYXkgaGF2ZSBsaW5rZWQgcG93ZXJzIGluIHRoZSB0YXJnZXQgZmllbGRzIG9mIHRoZWlyIHBhcmFtcw0KCQkJJHRhcmdldHMgPSBbDQoJCQkJJ2FkbWluX3ZpZXcnID0+IFsNCgkJCQkJJ2FkZF9hZG1pbl92aWV3X21vZGVsJyA9PiAncG93ZXJfYWRtaW5fdmlld19tb2RlbCcsDQoJCQkJCSdhZGRfYWRtaW5fdmlldycgPT4gJ3Bvd2VyX2FkbWluX3ZpZXcnLA0KCQkJCQknYWRkX2FkbWluX3ZpZXdfaHRtbCcgPT4gJ3Bvd2VyX2FkbWluX3ZpZXdfaHRtbCcsDQoJCQkJCSdhZGRfc2l0ZV9hZG1pbl92aWV3X2h0bWwnID0+ICdwb3dlcl9zaXRlX2FkbWluX3ZpZXdfaHRtbCcsDQoJCQkJCSdhZGRfYWRtaW5fdmlld19jb250cm9sbGVyJyAgPT4gJ3Bvd2VyX2FkbWluX3ZpZXdfY29udHJvbGxlcicsDQoJCQkJCSdhZGRfYWpheF9tb2RlbCcgPT4gJ3Bvd2VyX2FqYXhfbW9kZWwnLA0KCQkJCQknYWRkX2FkbWluX3ZpZXdzX21vZGVsJyA9PiAncG93ZXJfYWRtaW5fdmlld3NfbW9kZWwnLA0KCQkJCQknYWRkX2FkbWluX3ZpZXdzJyA9PiAncG93ZXJfYWRtaW5fdmlld3MnLA0KCQkJCQknYWRkX2FkbWluX3ZpZXdzX2h0bWwnID0+ICdwb3dlcl9hZG1pbl92aWV3c19odG1sJywNCgkJCQkJJ2FkZF9hZG1pbl92aWV3c19jb250cm9sbGVyJyA9PiAncG93ZXJfYWRtaW5fdmlld3NfY29udHJvbGxlcicNCgkJCQldLA0KCQkJCSdzaXRlX3ZpZXcnID0+IFsNCgkJCQkJJ2FkZF9zaXRlX3ZpZXdfbW9kZWwnID0+ICdwb3dlcl9zaXRlX3ZpZXdfbW9kZWwnLA0KCQkJCQknYWRkX3NpdGVfdmlldycgPT4gJ3Bvd2VyX3NpdGVfdmlldycsDQoJCQkJCSdhZGRfc2l0ZV92aWV3X2h0bWwnID0+ICdwb3dlcl9zaXRlX3ZpZXdfaHRtbCcsDQoJCQkJCSdhZGRfc2l0ZV92aWV3X2NvbnRyb2xsZXInICA9PiAncG93ZXJfc2l0ZV92aWV3X2NvbnRyb2xsZXInLA0KCQkJCQknYWRkX3NpdGVfdmlld3NfbW9kZWwnID0+ICdwb3dlcl9zaXRlX3ZpZXdzX21vZGVsJywNCgkJCQkJJ2FkZF9zaXRlX3ZpZXdzJyA9PiAncG93ZXJfc2l0ZV92aWV3cycsDQoJCQkJCSdhZGRfc2l0ZV92aWV3c19odG1sJyA9PiAncG93ZXJfc2l0ZV92aWV3c19odG1sJywNCgkJCQkJJ2FkZF9zaXRlX3ZpZXdzX2NvbnRyb2xsZXInID0+ICdwb3dlcl9zaXRlX3ZpZXdzX2NvbnRyb2xsZXInLA0KCQkJCQknYWRkX2FqYXhfbW9kZWwnID0+ICdwb3dlcl9hamF4X21vZGVsJw0KCQkJCV0sDQoJCQkJJ2N1c3RvbV9hZG1pbl92aWV3JyA9PiBbDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfbW9kZWwnID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlld19tb2RlbCcsDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXcnID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlldycsDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfaHRtbCcgPT4gJ3Bvd2VyX2N1c3RvbV9hZG1pbl92aWV3X2h0bWwnLA0KCQkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3X2NvbnRyb2xsZXInICA9PiAncG93ZXJfY3VzdG9tX2FkbWluX3ZpZXdfY29udHJvbGxlcicsDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX21vZGVsJyA9PiAncG93ZXJfY3VzdG9tX2FkbWluX3ZpZXdzX21vZGVsJywNCgkJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3MnID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlld3MnLA0KCQkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3c19odG1sJyA9PiAncG93ZXJfY3VzdG9tX2FkbWluX3ZpZXdzX2h0bWwnLA0KCQkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3c19jb250cm9sbGVyJyA9PiAncG93ZXJfY3VzdG9tX2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInLA0KCQkJCQknYWRkX2FqYXhfbW9kZWwnID0+ICdwb3dlcl9hamF4X21vZGVsJw0KCQkJCV0sDQoJCQkJJ2R5bmFtaWNfZ2V0JyA9PiBbDQoJCQkJCSdhZGRfc2l0ZV92aWV3X21vZGVsJyA9PiAncG93ZXJfc2l0ZV92aWV3X21vZGVsJywNCgkJCQkJJ2FkZF9zaXRlX3ZpZXcnID0+ICdwb3dlcl9zaXRlX3ZpZXcnLA0KCQkJCQknYWRkX3NpdGVfdmlld19odG1sJyA9PiAncG93ZXJfc2l0ZV92aWV3X2h0bWwnLA0KCQkJCQknYWRkX3NpdGVfdmlld19jb250cm9sbGVyJyAgPT4gJ3Bvd2VyX3NpdGVfdmlld19jb250cm9sbGVyJywNCgkJCQkJJ2FkZF9zaXRlX3ZpZXdzX21vZGVsJyA9PiAncG93ZXJfc2l0ZV92aWV3c19tb2RlbCcsDQoJCQkJCSdhZGRfc2l0ZV92aWV3cycgPT4gJ3Bvd2VyX3NpdGVfdmlld3MnLA0KCQkJCQknYWRkX3NpdGVfdmlld3NfaHRtbCcgPT4gJ3Bvd2VyX3NpdGVfdmlld3NfaHRtbCcsDQoJCQkJCSdhZGRfc2l0ZV92aWV3c19jb250cm9sbGVyJyA9PiAncG93ZXJfc2l0ZV92aWV3c19jb250cm9sbGVyJywNCgkJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld19tb2RlbCcgPT4gJ3Bvd2VyX2N1c3RvbV9hZG1pbl92aWV3X21vZGVsJywNCgkJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlldycgPT4gJ3Bvd2VyX2N1c3RvbV9hZG1pbl92aWV3JywNCgkJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld19odG1sJyA9PiAncG93ZXJfY3VzdG9tX2FkbWluX3ZpZXdfaHRtbCcsDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdfY29udHJvbGxlcicgID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlld19jb250cm9sbGVyJywNCgkJCQkJJ2FkZF9jdXN0b21fYWRtaW5fdmlld3NfbW9kZWwnID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlld3NfbW9kZWwnLA0KCQkJCQknYWRkX2N1c3RvbV9hZG1pbl92aWV3cycgPT4gJ3Bvd2VyX2N1c3RvbV9hZG1pbl92aWV3cycsDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX2h0bWwnID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlld3NfaHRtbCcsDQoJCQkJCSdhZGRfY3VzdG9tX2FkbWluX3ZpZXdzX2NvbnRyb2xsZXInID0+ICdwb3dlcl9jdXN0b21fYWRtaW5fdmlld3NfY29udHJvbGxlcicsDQoJCQkJCSdhZGRfYWpheF9tb2RlbCcgPT4gJ3Bvd2VyX2FqYXhfbW9kZWwnDQoJCQkJXSwNCgkJCQknY29tcG9uZW50X2Rhc2hib2FyZCcgPT4gWw0KCQkJCQknYWRkX2Rhc2hib2FyZF9tb2RlbCcgPT4gJ3Bvd2VyX2Rhc2hib2FyZF9tb2RlbCcsDQoJCQkJCSdhZGRfZGFzaGJvYXJkX3ZpZXcnID0+ICdwb3dlcl9kYXNoYm9hcmRfdmlldycsDQoJCQkJCSdhZGRfZGFzaGJvYXJkX3ZpZXdfaHRtbCcgID0+ICdwb3dlcl9kYXNoYm9hcmRfdmlld19odG1sJywNCgkJCQkJJ2FkZF9kYXNoYm9hcmRfY29udHJvbGxlcicgPT4gJ3Bvd2VyX2Rhc2hib2FyZF9jb250cm9sbGVyJywNCgkJCQkJJ2FkZF9hamF4X21vZGVsJyA9PiAncG93ZXJfYWpheF9tb2RlbCcNCgkJCQldLA0KCQkJCSdqb29tbGFfY29tcG9uZW50JyA9PiBbDQoJCQkJCSdhZGRfYWRtaW5fY29tcG9uZW50JyA9PiAncG93ZXJfYWRtaW5fY29tcG9uZW50JywNCgkJCQkJJ2FkZF9zaXRlX2NvbXBvbmVudCcgID0+ICdwb3dlcl9zaXRlX2NvbXBvbmVudCcsDQoJCQkJCSdhZGRfYWRtaW5faGVscGVyJyA9PiAncG93ZXJfYWRtaW5faGVscGVyJywNCgkJCQkJJ2FkZF9zaXRlX2hlbHBlcicgPT4gJ3Bvd2VyX3NpdGVfaGVscGVyJw0KCQkJCV0NCgkJCV07DQoJCQkvLyB0YXJnZXQgdmVyc2lvbiBsZXNzIHRoZW4gb3IgZXF1YWwgdG8gMy4wLjEwDQoJCQlpZiAoY291bnQoJHRoaXMtPkpDQnZlcnNpb24pID09IDMgJiYgJHRoaXMtPkpDQnZlcnNpb25bMF0gPD0gMyAmJiAkdGhpcy0+SkNCdmVyc2lvblsxXSA9PSAwICYmICR0aGlzLT5KQ0J2ZXJzaW9uWzJdIDw9IDEwKQ0KCQkJew0KCQkJCS8vIGtlZXAgdHJhY2sgb2YgdXNlZA0KCQkJCSRtYXBwZXIgPSBhcnJheSgpOw0KCQkJCS8vIG91ciBnZXQgZnVuY3Rpb24NCgkJCQkkZ2V0R3VpZEZyb21JZCA9IGZ1bmN0aW9uICgkaWQpIHVzZSgmJG1hcHBlcikNCgkJCQl7DQoJCQkJCWlmIChpc19udW1lcmljKCRpZCkgJiYgaXNzZXQoJG1hcHBlclskaWRdKSkNCgkJCQkJew0KCQkJCQkJLy8gdG8gdXBkYXRlIHRoaXMgcG93ZXINCgkJCQkJCXJldHVybiAkbWFwcGVyWyRpZF07DQoJCQkJCX0NCgkJCQkJZWxzZWlmIChpc19udW1lcmljKCRpZCkgJiYNCgkJCQkJCSgkZ3VpZCA9IFN1cGVyX19fZGI4N2MzMzlfNWJiNl80MjkxX2E3ZWZfMmM0OGVhMWIwNmJjX19fUG93ZXI6OnZhcigncG93ZXInLCAkaWQsICdpZCcsICdndWlkJykpICE9PSBmYWxzZSkNCgkJCQkJew0KCQkJCQkJLy8gbm90IHRvIGZldGNoIGl0IGFnYWluDQoJCQkJCQkkbWFwcGVyWyRpZF0gPSAkZ3VpZDsNCgkJCQkJCXJldHVybiAkZ3VpZDsNCgkJCQkJfQ0KCQkJCQllbHNlaWYoIWlzX251bWVyaWMoJGlkKSAmJiANCgkJCQkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6dmFsaWRHVUlEKCRpZCkpDQoJCQkJCXsNCgkJCQkJCS8vIGtlZXAgdGhpcyBwb3dlcg0KCQkJCQkJcmV0dXJuICRpZDsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJfTsNCgkJCQkvLyB1cGRhdGUgYWxsIHRhYmxlcw0KCQkJCWZvcmVhY2ggKCR0YXJnZXRzIGFzICR0YWJsZSA9PiAkZmllbGRzKQ0KCQkJCXsNCgkJCQkJLy8gY2hlY2sgaXQgdGhpcyB0YWJsZSBhY3RpdmUNCgkJCQkJJGFjdGl2ZSA9ICR0YWJsZSAuICdfaGVhZGVycyc7DQoJCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkJCS8vIGdldCBhbGwgaWRzIGFuZCBndWlkcyBvZiBlYWNoIHRhYmxlDQoJCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcsICdwYXJhbXMnKSkpOw0KCQkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nIC4gJHRhYmxlKSk7DQoJCQkJCS8vIFJlc2V0IHRoZSBxdWVyeSB1c2luZyBvdXIgbmV3bHkgcG9wdWxhdGVkIHF1ZXJ5IG9iamVjdC4NCgkJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJCQl7DQoJCQkJCQkvLyBnZXQgdGhlIHJvd3MNCgkJCQkJCSRyb3dzID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJCQkJZm9yZWFjaCAoJHJvd3MgYXMgJHJvdykNCgkJCQkJCXsNCgkJCQkJCQkvLyBsb2FkIHZhbHVlIG5vdCB0byB1c2UgaXQgYWdhaW4NCgkJCQkJCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJHJvdy0+cGFyYW1zKSkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIG5vdyBvcGVuIHRoZSBwYXJhbXMNCgkJCQkJCQkJJHBhcmFtcyA9IGpzb25fZGVjb2RlKCRyb3ctPnBhcmFtcyk7DQoJCQkJCQkJCSR1cGRhdGUgPSBmYWxzZTsNCgkJCQkJCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBhY3RpdmUgZGF0YQ0KCQkJCQkJCQlpZiAoaXNzZXQoJHBhcmFtcy0+eyRhY3RpdmV9KSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkYWRkID0+ICRwb3dlcikNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBjaGVjayBpZiBoZWFkZXJzIGluIGFjdGl2ZQ0KCQkJCQkJCQkJCWlmIChpc3NldCgkcGFyYW1zLT57JGFjdGl2ZX0tPnskYWRkfSkgJiYNCgkJCQkJCQkJCQkJJHBhcmFtcy0+eyRhY3RpdmV9LT57JGFkZH0gJiYNCgkJCQkJCQkJCQkJaXNfYXJyYXkoJHBhcmFtcy0+eyRhY3RpdmV9LT57JHBvd2VyfSkpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkvLyBnZXQgcG93ZXJzIGFuZCB1cGRhdGUNCgkJCQkJCQkJCQkJJHBvd2VycyA9IFtdOw0KCQkJCQkJCQkJCQlmb3JlYWNoICgkcGFyYW1zLT57JGFjdGl2ZX0tPnskcG93ZXJ9IGFzICRpZCkNCgkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJaWYgKCgkZ3VpZCA9ICRnZXRHdWlkRnJvbUlkKCRpZCkpICE9PWZhbHNlKQ0KCQkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJCS8vIHRvIHVwZGF0ZSB0aGlzIHBvd2VyDQoJCQkJCQkJCQkJCQkJJHBvd2Vyc1tdID0gJGd1aWQ7DQoJCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIGZvdW5kIHBvd2VycyB0byB1cGRhdGUNCgkJCQkJCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwb3dlcnMpKQ0KCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQkvLyB1cGRhdGUgdGhlIGxvY2FsIHBhcmFtcw0KCQkJCQkJCQkJCQkJJHBhcmFtcy0+eyRhY3RpdmV9LT57JHBvd2VyfSA9ICRwb3dlcnM7DQoJCQkJCQkJCQkJCQkvLyB0byB1cGRhdGUgdGhpcyBwYXJhbXMNCgkJCQkJCQkJCQkJCSR1cGRhdGUgPSB0cnVlOw0KCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIGNoZWNrIGlmIHVwZGF0ZSBtdXN0IGJlIG1hZGUNCgkJCQkJCQkJaWYgKCR1cGRhdGUpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJCQkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCQkJCQkJLy8gbG9hZCB0aGUgZ3VpZA0KCQkJCQkJCQkJJHVwZGF0ZV9maWVsZHMgPSBhcnJheSgNCgkJCQkJCQkJCQkkZGItPnF1b3RlTmFtZSgncGFyYW1zJykgLiAnID0gJyAuICRkYi0+cXVvdGUoanNvbl9lbmNvZGUoJHBhcmFtcykpDQoJCQkJCQkJCQkpOw0KCQkJCQkJCQkJLy8gQ29uZGl0aW9ucyBmb3Igd2hpY2ggcmVjb3JkcyBzaG91bGQgYmUgdXBkYXRlZC4NCgkJCQkJCQkJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCQkJCQkJCQkJJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJyAuIChpbnQpICRyb3ctPmlkDQoJCQkJCQkJCQkpOw0KCQkJCQkJCSAJCS8vIHVwZGF0ZSB0aGUgcm93DQoJCQkJCQkJCQkkcXVlcnktPnVwZGF0ZSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuICR0YWJsZSkpLT5zZXQoJHVwZGF0ZV9maWVsZHMpLT53aGVyZSgkY29uZGl0aW9ucyk7DQoJCQkJCQkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJCQkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyB3ZSBtdXN0IHVwZGF0ZSBhbGwgcG93ZXJzIGFzLXdlbGwgd2hlcmUgaXQgaGFzIGxpbmtlZCBJRCdzIGluIGl0cyBvd24gZmllbGRzDQoJCQkJJGZpZWxkcyA9IFsNCgkJCQkJJ3VzZV9zZWxlY3Rpb24nID0+ICd1c2UnLA0KCQkJCQknbG9hZF9zZWxlY3Rpb24nID0+ICdsb2FkJywNCgkJCQkJJ2ltcGxlbWVudHMnID0+IDIsDQoJCQkJCSdleHRlbmRzJyA9PiAxDQoJCQkJXTsNCgkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkJLy8gZ2V0IGFsbCBpZHMgYW5kIGd1aWRzIG9mIGVhY2ggdGFibGUNCgkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnKSkpOw0KCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5X2tleXMoJGZpZWxkcykpKTsNCgkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9wb3dlcicpKTsNCgkJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCS8vIGdldCB0aGUgcm93cw0KCQkJCQkkcm93cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQkJZm9yZWFjaCAoJHJvd3MgYXMgJHJvdykNCgkJCQkJew0KCQkJCQkJJHVwZGF0ZSA9IGZhbHNlOw0KCQkJCQkJJHVwZGF0ZV9maWVsZHMgPSBbXTsNCgkJCQkJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJGZpZWxkID0+ICRrZXkpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKGlzX2ludCgka2V5KSAmJiAka2V5ID09IDEpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoaXNfbnVtZXJpYygkcm93LT57JGZpZWxkfSkgJiYNCgkJCQkJCQkJCSRyb3ctPnskZmllbGR9ID4gMCAmJg0KCQkJCQkJCQkJKCRndWlkID0gJGdldEd1aWRGcm9tSWQoJHJvdy0+eyRmaWVsZH0pKSAhPT1mYWxzZSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJLy8gbG9hZCB0aGUgZmllbGQNCgkJCQkJCQkJCSR1cGRhdGVfZmllbGRzW10gPSAkZGItPnF1b3RlTmFtZSgkZmllbGQpIC4gJyA9ICcgLiAkZGItPnF1b3RlKCRndWlkKTsNCgkJCQkJCQkJCSR1cGRhdGUgPSB0cnVlOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoaXNfaW50KCRrZXkpICYmICRrZXkgPT0gMikNCgkJCQkJCQl7DQoJCQkJCQkJCSRhcnJheSA9IChhcnJheSkganNvbl9kZWNvZGUoJHJvdy0+eyRmaWVsZH0sIHRydWUpOw0KCQkJCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGFycmF5LCB0cnVlKSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHBvd2VycyA9IFtdOw0KCQkJCQkJCQkJZm9yZWFjaCAoJGFycmF5IGFzICRpZCkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQlpZiAoaXNfbnVtZXJpYygkaWQpICYmICRpZCA+IDAgJiYNCgkJCQkJCQkJCQkJKCRndWlkID0gJGdldEd1aWRGcm9tSWQoJGlkKSkgIT09ZmFsc2UpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkvLyB0byB1cGRhdGUgdGhpcyBwb3dlcg0KCQkJCQkJCQkJCQkkcG93ZXJzW10gPSAkZ3VpZDsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBvd2VycykpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJLy8gbG9hZCB0aGUgZmllbGQNCgkJCQkJCQkJCQkkdXBkYXRlX2ZpZWxkc1tdID0gJGRiLT5xdW90ZU5hbWUoJGZpZWxkKSAuICcgPSAnIC4gJGRiLT5xdW90ZShqc29uX2VuY29kZSgkcG93ZXJzKSk7DQoJCQkJCQkJCQkJJHVwZGF0ZSA9IHRydWU7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcm93LT57JGZpZWxkfSkpDQoJCQkJCQkJew0KCQkJCQkJCQkkc3ViZm9ybSA9IGpzb25fZGVjb2RlKCRyb3ctPnskZmllbGR9LCB0cnVlKTsNCgkJCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzdWJmb3JtLCB0cnVlKSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHBvd2VycyA9IFtdOw0KCQkJCQkJCQkJZm9yZWFjaCAoJHN1YmZvcm0gYXMgJHNlbGVjdGlvbiA9PiAkdmFsdWUpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJaWYgKGlzc2V0KCR2YWx1ZVska2V5XSkgJiYgaXNfbnVtZXJpYygkdmFsdWVbJGtleV0pICYmICR2YWx1ZVska2V5XSA+IDAgJiYNCgkJCQkJCQkJCQkJKCRndWlkID0gJGdldEd1aWRGcm9tSWQoJHZhbHVlWyRrZXldKSkgIT09ZmFsc2UpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkvLyB0byB1cGRhdGUgdGhpcyBwb3dlcg0KCQkJCQkJCQkJCQkkcG93ZXJzWyRzZWxlY3Rpb25dID0gWyRrZXkgPT4gJGd1aWRdOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcG93ZXJzKSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBsb2FkIHRoZSBmaWVsZA0KCQkJCQkJCQkJCSR1cGRhdGVfZmllbGRzW10gPSAkZGItPnF1b3RlTmFtZSgkZmllbGQpIC4gJyA9ICcgLiAkZGItPnF1b3RlKGpzb25fZW5jb2RlKCRwb3dlcnMpKTsNCgkJCQkJCQkJCQkkdXBkYXRlID0gdHJ1ZTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCS8vIGNoZWNrIGlmIHdlIHNob3VsZCB1cGRhdGUgdGhpcyBwb3dlcg0KCQkJCQkJaWYgKCR1cGRhdGUpDQoJCQkJCQl7DQoJCQkJCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCQkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCQkJCS8vIENvbmRpdGlvbnMgZm9yIHdoaWNoIHJlY29yZHMgc2hvdWxkIGJlIHVwZGF0ZWQuDQoJCQkJCQkJJGNvbmRpdGlvbnMgPSBhcnJheSgNCgkJCQkJCQkJJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJyAuIChpbnQpICRyb3ctPmlkDQoJCQkJCQkJKTsNCgkJCQkJCQkvLyB1cGRhdGUgdGhlIHJvdw0KCQkJCQkJCSRxdWVyeS0+dXBkYXRlKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcG93ZXInKSktPnNldCgkdXBkYXRlX2ZpZWxkcyktPndoZXJlKCRjb25kaXRpb25zKTsNCgkJCQkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyB0YXJnZXQgdmVyc2lvbiBsZXNzIHRoZW4gb3IgZXF1YWwgdG8gMy4wLjE0DQoJCQlpZiAoY291bnQoJHRoaXMtPkpDQnZlcnNpb24pID09IDMgJiYgJHRoaXMtPkpDQnZlcnNpb25bMF0gPD0gMyAmJiAkdGhpcy0+SkNCdmVyc2lvblsxXSA9PSAwICYmICR0aGlzLT5KQ0J2ZXJzaW9uWzJdIDw9IDE0KQ0KCQkJew0KCQkJCS8vIGNvbnZlcnQgYWxsIHBvd2VycyBpbiBwYXJhbXMgdG8gc3ViZm9ybSBmb3JtYXQNCgkJCQlmb3JlYWNoICgkdGFyZ2V0cyBhcyAkdGFibGUgPT4gJGZpZWxkcykNCgkJCQl7DQoJCQkJCS8vIGNoZWNrIGl0IHRoaXMgdGFibGUgYWN0aXZlDQoJCQkJCSRhY3RpdmUgPSAkdGFibGUgLiAnX2hlYWRlcnMnOw0KCQkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCQkvLyBnZXQgYWxsIGlkcyBhbmQgZ3VpZHMgb2YgZWFjaCB0YWJsZQ0KCQkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCAncGFyYW1zJykpKTsNCgkJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fJyAuICR0YWJsZSkpOw0KCQkJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQkJew0KCQkJCQkJLy8gZ2V0IHRoZSByb3dzDQoJCQkJCQkkcm93cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQkJCWZvcmVhY2ggKCRyb3dzIGFzICRyb3cpDQoJCQkJCQl7DQoJCQkJCQkJLy8gbG9hZCB2YWx1ZSBub3QgdG8gdXNlIGl0IGFnYWluDQoJCQkJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRyb3ctPnBhcmFtcykpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBub3cgb3BlbiB0aGUgcGFyYW1zDQoJCQkJCQkJCSRwYXJhbXMgPSBqc29uX2RlY29kZSgkcm93LT5wYXJhbXMpOw0KCQkJCQkJCQkkdXBkYXRlID0gZmFsc2U7DQoJCQkJCQkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgYWN0aXZlIGRhdGENCgkJCQkJCQkJaWYgKGlzc2V0KCRwYXJhbXMtPnskYWN0aXZlfSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJGFkZCA9PiAkcG93ZXIpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJLy8gY2hlY2sgaWYgaGVhZGVycyBpbiBhY3RpdmUNCgkJCQkJCQkJCQlpZiAoaXNzZXQoJHBhcmFtcy0+eyRhY3RpdmV9LT57JGFkZH0pICYmDQoJCQkJCQkJCQkJCSRwYXJhbXMtPnskYWN0aXZlfS0+eyRhZGR9ICYmDQoJCQkJCQkJCQkJCWlzX2FycmF5KCRwYXJhbXMtPnskYWN0aXZlfS0+eyRwb3dlcn0pKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJLy8gZ2V0IHBvd2VycyBhbmQgdXBkYXRlDQoJCQkJCQkJCQkJCSRwb3dlcnMgPSBbXTsNCgkJCQkJCQkJCQkJZm9yZWFjaCAoJHBhcmFtcy0+eyRhY3RpdmV9LT57JHBvd2VyfSBhcyAkbnIgPT4gJGd1aWQpDQoJCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJCS8vIGNvbnZlcnQgdG8gc3ViLWZvcm0gZm9ybWF0DQoJCQkJCQkJCQkJCQkkcG93ZXJzWyRwb3dlci4kbnJdID0gWydwb3dlcicgPT4gJGd1aWQsICdidWlsZCcgPT4gMiwgJ2FzJyA9PiAnZGVmYXVsdCddOw0KCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJCS8vIHVwZGF0ZSB0aGUgbG9jYWwgcGFyYW1zDQoJCQkJCQkJCQkJCSRwYXJhbXMtPnskYWN0aXZlfS0+eyRwb3dlcn0gPSAkcG93ZXJzOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCQkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCQkJCQkvLyBsb2FkIHRoZSBndWlkDQoJCQkJCQkJCSR1cGRhdGVfZmllbGRzID0gYXJyYXkoDQoJCQkJCQkJCQkkZGItPnF1b3RlTmFtZSgncGFyYW1zJykgLiAnID0gJyAuICRkYi0+cXVvdGUoanNvbl9lbmNvZGUoJHBhcmFtcykpDQoJCQkJCQkJCSk7DQoJCQkJCQkJCS8vIENvbmRpdGlvbnMgZm9yIHdoaWNoIHJlY29yZHMgc2hvdWxkIGJlIHVwZGF0ZWQuDQoJCQkJCQkJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCQkJCQkJCQkkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPSAnIC4gKGludCkgJHJvdy0+aWQNCgkJCQkJCQkJKTsNCgkJCQkJCQkgCS8vIHVwZGF0ZSB0aGUgcm93DQoJCQkJCQkJCSRxdWVyeS0+dXBkYXRlKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fJy4gJHRhYmxlKSktPnNldCgkdXBkYXRlX2ZpZWxkcyktPndoZXJlKCRjb25kaXRpb25zKTsNCgkJCQkJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCQkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9', '', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclByZWZsaWdodFVwZGF0ZV0=', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclJlYWRNZV0=', '', '', 'Builds Complex Joomla Components', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMSW5zdGFsbF0=', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMVW5pbnN0YWxsXQ==', 'Component Builder (Pro)', '.git, .github, .gitignore, .idea, SECURITY.md, .editorconfig, .octojpack', 1, '', 2, 'https://io.vdm.dev/update/componentbuilder_update_server.xml', 'https://dev.vdm.io', '', 'kv00V8vcC2V9uJmCbRyLTsOX93B3ECsPzipj7bZ7PoU=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\",\"power_admin_helper\":{\"power_admin_helper0\":{\"power\":\"79d765b3-7319-4988-9730-446c7f347020\",\"as\":\"default\",\"build\":\"1\"}},\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\",\"power_site_helper\":{\"power_site_helper0\":{\"power\":\"79d765b3-7319-4988-9730-446c7f347020\",\"as\":\"default\",\"build\":\"1\"}}}}', 2, 99, '', 1, 56), +(15, '', '', '', '', '', '', '', 1, 1, '', 1, '', 1, '', '', '', '', '', '', 1, '', '', '', '', 1, '{\"addcontributors0\":{\"name\":\"Patrick Hanlon, M.Sc. PH\",\"title\":\"Health Economist\",\"email\":\"Patrick.Hanlon@unibas.ch\",\"website\":\"http:\\/\\/www.swisstph.ch\\/about-us\\/staff\\/detailview.html?tx_x4epersdb_pi1[showUid]=2267&cHash=1b1c5db0808e04d3f1afe0f3a3f67998\",\"use\":\"2\",\"show\":\"3\"},\"addcontributors1\":{\"name\":\"Matthew Black\",\"title\":\"Development Advisor\",\"email\":\"matthew.black@giz.de\",\"website\":\"http:\\/\\/www.giz.de\",\"use\":\"2\",\"show\":\"3\"},\"addcontributors2\":{\"name\":\"Dr. Pascal Geldsetzer\",\"title\":\"Associate Expert\",\"email\":\"pascal.geldsetzer@giz.de\",\"website\":\"http:\\/\\/www.giz.de\",\"use\":\"2\",\"show\":\"1\"}}', 1, 1, 1, 3, 'Llewellyn van der Merwe', '', 'giz.txt', '', '', 'Deutsche Gesellschaft fรผr International Zusammenarbeit (GIZ) Gmb', '3.3.9', 'Copyright (C) 2015. All Rights Reserved', '2016-01-31 20:20:17', 1, '', '', '', '', '', '', '', 1, '', '[Create Epidemiological Profiles] (https://www.staffhealthcbp.com/) for diseases and risks affecting your company. Detailed information on projected work days lost and costs. Create and edit activities and wellness responses for your workplace. Access to Small Business Modelling. Results displayed by gender. Network with other companies and wellness professionals.\r\n\r\nHaving seen the health priorities for your workforce, the tool outputs projections for how the interventions โ€“ which you have designed - are expected to benefit the company financially.\r\n\r\nBenefits are calculated based on the model projecting reductions in workdays lost due to sickness, presenteeism and death.', 'llewellyn@vdm.io', 1, '', '', '', '9be33818-561f-4020-9625-653ba0caef01', 'images/giz.png', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2016-03-11 13:48:37', '', 'Cost Benefit Projection', 'costbenefitprojection', '', 2, '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXNlcklzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQl9DQoJCS8vIGdldCB0aGlzIHVzZXIgZ3JvdXBzDQoJCSRncm91cHMJPSAoYXJyYXkpICR1c2VyLT5nZXRBdXRob3Jpc2VkR3JvdXBzKCk7DQoJCS8vIGdldCBwYXJhbXMNCgkJJHBhcmFtcwk9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJLy8gZ2V0IHRhcmdldCBncm91cHMNCgkJJGNvdW50cnlHcm91cHMgCQkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnY291bnRyeXVzZXInKTsNCgkJJHNlcnZpY2Vwcm92aWRlckdyb3VwcwkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnc2VydmljZXByb3ZpZGVydXNlcicpOw0KCQkkbWVtYmVyR3JvdXBzIAkJCT0gKGFycmF5KSAkcGFyYW1zLT5nZXQoJ21lbWJlcnVzZXInKTsNCgkJLy8gbm93IGNoZWNrIGluIHdoYXQgZ3JvdXAgdGhpcyB1c2VyIGJlbG9uZ3MNCgkJaWYgKGFycmF5X2ludGVyc2VjdCgkY291bnRyeUdyb3VwcywgJGdyb3VwcykpDQoJCXsNCgkJCS8vIGlzIGNvdW50cnkNCgkJCXJldHVybiAzOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRzZXJ2aWNlcHJvdmlkZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBzZXJ2aWNlcHJvdmlkZXINCgkJCXJldHVybiAyOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBtZW1iZXINCgkJCXJldHVybiAxOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0NvbXBhbnkoJGlkKQ0KCXsNCgkJLy8gY2hlY2sgdGhlIHBlciB2YWx1ZQ0KCQkkbG9jayA9IHNlbGY6OmdldFZhcignY29tcGFueScsICRpZCwgJ2lkJywgJ3BlcicpOw0KCQlpZiAoIDEgPT0gJGxvY2spDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrSW50ZXJ2ZXRpb25BY2Nlc3MoJGlkLCAkc2hhcmUgPSBudWxsLCAkY29tcCA9IG51bGwpDQoJew0KICAgICAgICAgICAgICAgIC8vIHNldCBzaGFyZSB2YWx1ZSBpZiBub3Qgc2V0DQogICAgICAgICAgICAgICAgaWYgKCEkc2hhcmUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNoYXJlID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ3NoYXJlJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIGJhc2VkIG9uIHNoYXJlZCB3ZSBzZXQgbmVlZGVkIHZhbHVlcw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoaXMgaW50ZXJ2ZW50aW9ucyBjb21wYW55IChvd25lcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkY29tcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21wID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ2NvbXBhbnknKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgaGlzIGNvbXBhbmllcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGFuaWVzID0gc2VsZjo6aGlzQ29tcGFuaWVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB1c2VyIHR5cGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXJUeXBlID0gc2VsZjo6dXNlcklzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gYmFzZWQgb24gc2hhcmVkIHZhbHVlIHdlIHdpbGwgcmVzcG9uZA0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2hhcmluZyBpcyAxIG9ubHkgb3duZXIgbWF5IHNlZSBpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHVzZXJUeXBlID09IDEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCRjb21wLCAkY29tcGFuaWVzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaGFyaW5nIGlzIDIgb25seSBvd25lciBhbmQgc2VydmljZSBwcm92aWRlciBtYXkgc2VlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1c2VyVHlwZSA9PSAxIHx8ICR1c2VyVHlwZSA9PSAyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkY29tcCwgJGNvbXBhbmllcykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RIaXNVc2VycygkaWQgPSBudWxsKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IGFsbCB0aGUgdXNlcnMgdG8ga2VlcA0KCQkka2VlcFVzZXJzID0gc2VsZjo6aGlzVXNlcnMoJGlkKTsNCgkJaWYgKGlzX2FycmF5KCRrZWVwVXNlcnMpKQ0KCQl7DQoJCQkvLyByZXR1cm4gdGhvc2Ugbm90IHRvIGtlZXANCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ2lkJywka2VlcFVzZXJzLCd1c2VycycsJ2lkJywnTk9UIElOJywnJyk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGlzVXNlcnMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBoaW1zZWxmKQ0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuIGFycmF5KCRpZCk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvbXBhbmllcyB1c2VycyB0aGF0IGJlbG9uZyB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgaGltc2VsZikNCgkJCWNhc2UgMjoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwCQk9IHNlbGY6OmdldElkcygnaWQnLCRjb21wYW5pZXMsJ2NvbXBhbnknLCd1c2VyJyk7DQoJCQkvLyBub3cgY2hlY2sgdGhlIHJlc3VsdA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRrZWVwKSkNCgkJCXsNCgkJCQkka2VlcFtdID0gJGlkOw0KCQkJCXJldHVybiBhcnJheV91bmlxdWUoJGtlZXApOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCQkvLyBjb3VudHJ5IChvbmx5IGxvYWQgY29tcGFuaWVzIGFuZCBzZXJ2aWNlIHByb3ZpZGVycyB0aGF0IGJlbG9uZyB0byB0aGUgY291bnRyeSkNCgkJCWNhc2UgMzoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwQwkJPSBzZWxmOjpnZXRJZHMoJ2lkJywkY29tcGFuaWVzLCdjb21wYW55JywndXNlcicpOw0KCQkJJHNlcnZpY2UJPSBzZWxmOjpoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCk7DQoJCQkka2VlcFMJCT0gc2VsZjo6Z2V0SWRzKCdpZCcsJHNlcnZpY2UsJ3NlcnZpY2VfcHJvdmlkZXInLCd1c2VyJyk7DQoJCQkvLyBtZXJnZSB0aGVzZSB2YWx1ZXMNCgkJCSRrZWVwCQk9IHNlbGY6Om1lcmdlQXJyYXlzKGFycmF5KCRrZWVwQywka2VlcFMpKTsNCgkJCS8vIG5vdyBjaGVjayB0aGUgcmVzdWx0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGtlZXApKQ0KCQkJew0KCQkJCSRrZWVwW10gPSAkaWQ7DQoJCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgka2VlcCk7DQoJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNDb21wYW5pZXMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIG1lbWJlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY29tcGFueScpOw0KCQkJYnJlYWs7DQoJCQkvLyBzZXJ2ZXMgcHJvdmlkZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIpDQoJCQljYXNlIDI6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdzZXJ2aWNlX3Byb3ZpZGVyJyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnc2VydmljZV9wcm92aWRlcicpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvdW50cnkpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdjb3VudHJ5JyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY291bnRyeScpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRpZCA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJaWYgKDEgPT0gJGlzKSAvLyBtZW1iZXINCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygndXNlcicsJGlkLCdjb21wYW55Jywnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCWVsc2VpZiAoMiA9PSAkaXMpIC8vIHNlcnZlcyBwcm92aWRlcg0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoc2VsZjo6Z2V0SWQoJ3NlcnZpY2VfcHJvdmlkZXInLCRpZCkpOw0KCQl9DQoJCWVsc2VpZiAoMyA9PSAkaXMpIC8vIGNvdW50cnkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygnY291bnRyeScsc2VsZjo6Z2V0SWRzKCd1c2VyJywkaWQsJ2NvdW50cnknKSwnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0NvdW50cmllcygkdXNlcklkID0gbnVsbCwgJGlkID0gbnVsbCwgJGlzX3R5cGUgPSBudWxsKQ0KCXsNCgkJaWYoJHVzZXJJZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQllbHNlaWYoJGlkID4gMCAmJiAkaXNfdHlwZSkNCgkJew0KCQkJJHVzZXJJZCA9IHNlbGY6OmdldElkKCRpc190eXBlLCRpZCwnaWQnLCd1c2VyJyk7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdXNlcklkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJc3dpdGNoKCRpcykNCgkJew0KCQkJLy8gbWVtYmVyIChvbmx5IGxvYWQgY291bnRyaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBtZW1iZXIgdXNlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCR1c2VySWQsJ2NvbXBhbnknLCdjb3VudHJ5Jyk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvdW50cnkgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgdXNlcikNCgkJCWNhc2UgMjoNCgkJCXJldHVybiBhcnJheShzZWxmOjpnZXRJZCgnc2VydmljZV9wcm92aWRlcicsJHVzZXJJZCwndXNlcicsJ2NvdW50cnknKSk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb250cnllIHRoYXQgYmVsb25nIHRvIHRoZSBjb3VudHJ5IHVzZXIpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCd1c2VyJywkdXNlcklkLCdjb3VudHJ5JywnaWQnKTsNCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0N1cnJlbmNpZXMoJHVzZXJJZCA9IG51bGwsICRpZCA9IG51bGwsICRpc190eXBlID0gbnVsbCkNCgl7DQoJCSRjb3VudHJpZXMgPSBzZWxmOjpoaXNDb3VudHJpZXMoJHVzZXJJZCwkaWQsJGlzX3R5cGUpOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvdW50cmllcykpDQoJCXsNCgkJCSRjdXJyZW5jaWVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRjb3VudHJpZXMgYXMgJGNvdW50cnkpDQoJCQl7DQoJCQkJLy8gZ2V0IGN1cnJlbmN5IGlkDQoJCQkJJGN1cnJlbmNpZXNbXSA9IHNlbGY6OmdldFZhcignY3VycmVuY3knLCBzZWxmOjpnZXRWYXIoJ2NvdW50cnknLCAkY291bnRyeSwgJ2lkJywgJ2N1cnJlbmN5JyksICdjb2RldGhyZWUnLCAnaWQnKTsNCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY2llcykpDQoJCQl7DQoJCQkJcmV0dXJuICRjdXJyZW5jaWVzOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN1cnJlbmN5RGV0YWlscygkaWQgPSBmYWxzZSkNCgl7DQoJCWlmICghJGlkKQ0KCQl7DQoJCQkkaWQgPSBzZWxmOjpoaXNDdXJyZW5jaWVzKCk7DQoJCX0NCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRpZCkpDQoJCXsNCgkJCSRpZHMgPSBhcnJheV92YWx1ZXMoJGlkKTsNCgkJCSRpZCA9ICRpZFswXTsNCgkJfQ0KCQlpZihpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQknYS5kZWNpbWFsc3ltYm9sJywnYS5wb3NpdGl2ZXN0eWxlJywnYS5uZWdhdGl2ZXN0eWxlJyksDQoJCQkJYXJyYXkoCSdjdXJyZW5jeV9pZCcsJ2N1cnJlbmN5X25hbWUnLCdjdXJyZW5jeV9jb2RldGhyZWUnLCdjdXJyZW5jeV9udW1lcmljY29kZScsJ2N1cnJlbmN5X3N5bWJvbCcsDQoJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCSdjdXJyZW5jeV9uZWdhdGl2ZXN0eWxlJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fY29zdGJlbmVmaXRwcm9qZWN0aW9uX2N1cnJlbmN5JywgJ2EnKSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZU1vbmV5KCRudW1iZXIsJGN1cnJlbmN5ID0gZmFsc2UpDQoJew0KCQkvLyBmaXJzdCBjaGVjayBpZiB3ZSBoYXZlIGEgbnVtYmVyDQoJCWlmIChpc19udW1lcmljKCRudW1iZXIpKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgbmVnYXRpdmUgZmluZGVyIGZpbGUNCgkJCWluY2x1ZGVfb25jZSAnbmVnYXRpdmVmaW5kZXIucGhwJzsNCgkJCS8vIGNoZWNrIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUNCgkJCSRuZWdhdGl2ZUZpbmRlck9iaiA9IG5ldyBOZWdhdGl2ZUZpbmRlcihuZXcgRXhwcmVzc2lvbigiJG51bWJlciIpKTsNCgkJCSRuZWdhdGl2ZSA9ICRuZWdhdGl2ZUZpbmRlck9iai0+aXNJdE5lZ2F0aXZlKCkgPyBUUlVFIDogRkFMU0U7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdFUlJPUiEgKCcuJG51bWJlci4nKSBpcyBub3QgYSBudW1iZXIhJyk7DQoJCX0NCgkJLy8gbm90IHNldHVwIHRoZSBjdXJyZW5jeQ0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGN1cnJlbmN5KSkNCgkJew0KCQkJaWYoIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfcG9zaXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfbmVnYXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFsc3ltYm9sKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9zeW1ib2wpKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkY3VycmVuY3ktPmN1cnJlbmN5X2lkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmN1cnJlbmN5X2lkKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc3NldCgkY3VycmVuY3ktPmlkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmlkKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGN1cnJlbmN5ID0gc2VsZjo6Y3VycmVuY3lEZXRhaWxzKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9CQ0KCQllbHNlDQoJCXsNCgkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3kpOw0KCQl9DQoJCS8vIHNldCB0aGUgbnVtYmVyIHRvIGN1cnJlbmN5DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY3kpKQ0KCQl7DQoJCQlpZiAoISRuZWdhdGl2ZSkNCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9wb3NpdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJysnOw0KCQkJfQ0KCQkJZWxzZSANCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9uZWdhdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJy0nOw0KCQkJCSRudW1iZXIgPSBhYnMoJG51bWJlcik7DQoJCQl9DQoJCQkkc2V0dXBOdW1iZXIgPSBudW1iZXJfZm9ybWF0KChmbG9hdCkkbnVtYmVyLCAoaW50KSRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlLCAkY3VycmVuY3ktPmN1cnJlbmN5X2RlY2ltYWxzeW1ib2wsICcgJyk7IC8vJGN1cnJlbmN5LT5jdXJyZW5jeV90aG91c2FuZHMgVE9ETyk7DQoJCQkkc2VhcmNoID0gYXJyYXkoJ3tzaWdufScsICd7bnVtYmVyfScsICd7c3ltYm9sfScpOw0KCQkJJHJlcGxhY2UgPSBhcnJheSgkc2lnbiwgJHNldHVwTnVtYmVyLCAkY3VycmVuY3ktPmN1cnJlbmN5X3N5bWJvbCk7DQoJCQkkbW9uZXlNYWRlID0gc3RyX3JlcGxhY2UgKCRzZWFyY2gsJHJlcGxhY2UsJGZvcm1hdCk7DQoNCgkJCXJldHVybiAkbW9uZXlNYWRlOw0KCQl9DQoJCXJldHVybiAkbnVtYmVyOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SWQoJHRhYmxlLCAkd2hlcmUgPSBudWxsICwgJHdoZXJlU3RyaW5nID0gJ3VzZXInLCAkd2hhdCA9ICdpZCcpDQoJew0KCQlpZighJHdoZXJlKQ0KCQl7DQoJCQkkd2hlcmUgPSBGYWN0b3J5OjpnZXRVc2VyKCktPmlkOw0KCQl9DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCR3aGF0KSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0YWJsZSkpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCR3aGVyZVN0cmluZykgLiAnID0gJy4oaW50KSAkd2hlcmUpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJZHMoJHdoZXJlU3RyaW5nLCR3aGVyZSwkdGFibGUsJHdoYXQgPSAnaWQnLCRvcGVyYXRvciA9ICdJTicsJG1haW5fID0gJ1tbW2NvbXBvbmVudF1dXV8nKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkd2hlcmUpICYmICR3aGVyZSA+IDApDQoJCXsNCgkJCSR3aGVyZSA9IGFycmF5KCR3aGVyZSk7DQoJCX0NCg0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHdoZXJlKSkNCgkJew0KCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCR3aGF0KSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX18nLiRtYWluXy4kdGFibGUpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJHdoZXJlU3RyaW5nKSAuICcgJy4kb3BlcmF0b3IuJyAoJyAuIGltcGxvZGUoJywnLCR3aGVyZSkgLiAnKScpOw0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgkZGItPmxvYWRDb2x1bW4oKSk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q291bnRyeU5hbWUoJGlkKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ25hbWUnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5JykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQlyZXR1cm4gJGRiLT5sb2FkUmVzdWx0KCk7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29tYmluZSgkaXRlbXMpDQoJew0KCQkvLyBtYWtlIHN1cmUgdGhlIHN1bSBjbGFzcyBpcyBsb2FkZWQNCgkJSkxvYWRlcjo6aW1wb3J0KCdzdW1jb21iaW5lJywgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IgLiAnL2hlbHBlcnMnKTsNCgkJLy8gcmV0dXJuIHRoZSByZXN1bHQNCgkJcmV0dXJuIG5ldyBTdW1Db21iaW5lKCRpdGVtcyk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYWxjdWxhdGUoJGlkLCRkYXRhKQ0KCXsNCgkJaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZGF0YSkpID09PSAkZGF0YSl7DQoJCQkvLyB3ZSBoYXZlIHZhbGlkIGRhdGEgbm93IGNoZWNrIGlmIHN0b3JlZCByZXN1bHQgbmVlZHMgdG8gYmUgdXBkYXRlZC4NCgkJCSRmaWxlTmFtZQk9IG1kNSgkZGF0YSk7DQoJCQkkZGF0YQkJPSB1bnNlcmlhbGl6ZShiYXNlNjRfZGVjb2RlKCRkYXRhKSk7DQoJCX0gZWxzZSB7DQoJCQkvLyBub3QgdmFsaWQgZGF0YSBmaXJzdCBnZXQgdGhlIHZhbGlkIGRhdGENCgkJCSRtb2RlbAkJPSBzZWxmOjpnZXRNb2RlbCgnY29tcGFueWRhdGEnKTsNCgkJCSRkYXRhIAkJPSAkbW9kZWwtPmdldEl0ZW0oKGludCkkaWQpOw0KCQkJLy8gd2UgaGF2ZSB2YWxpZCBkYXRhIG5vdyBjaGVjayBpZiBzdG9yZWQgcmVzdWx0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuDQoJCQkkZmlsZU5hbWUJPSBtZDUoYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJGRhdGEpKSk7DQoJCX0NCgkJLy8gc2V0IHNvbWUgZGVmYXVsdHMNCgkJJHBhcmFtcwk9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJJHBhdGgJPSAkcGFyYW1zLT5nZXQoJ3Jlc3VsdHBhdGgnLCBKUEFUSF9BRE1JTklTVFJBVE9SLicvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMnKTsNCgkJLy8gYnVpbGQgZnVsbCBwYXRoIHRvIGZpbGUNCgkJJGZ1bGxQYXRoID0gJHBhdGguJy8nLiRmaWxlTmFtZS4nLmpzb24nOw0KCQkvLyBjaGVjayBpZiBmaWxlIGV4aXN0cw0KCQlpZiAoZmlsZV9leGlzdHMoJGZ1bGxQYXRoKSAmJiAoKCRqc29uRmlsZSA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldENvbnRlbnQoJGZ1bGxQYXRoLCBGQUxTRSkpICE9PSBGQUxTRSkpDQoJCXsNCgkJCS8vIGdyZWF0IHdlIGFyZSBkb25lIHJldHVybiByZXN1bHRzDQoJCQlyZXR1cm4ganNvbl9kZWNvZGUoJGpzb25GaWxlKTsNCgkJfQ0KCQkvLyBkbyB0aGUgY2FsY3VsYXRpb24gYWdhaW4NCgkJJHJlc3VsdCA9IHNlbGY6OmRvQ2FsY3VsYXRpb24oJGRhdGEpOw0KCQkvLyBkaWQgd2UgZ2V0IGEgdmFsaWQgcmVzdWx0IHNldA0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHJlc3VsdCkgfHwgU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJHJlc3VsdCkpDQoJCXsNCgkJCS8vIG5vdyBzYXZlIGZvciBuZXh0IHRpbWUNCgkJCXNlbGY6OnNhdmVKc29uKCRyZXN1bHQsICRmdWxsUGF0aCwgJHBhdGgpOw0KCQkJLy8gcmV0dXJuIHJlc3VsdCBzZXQNCgkJCXJldHVybiAganNvbl9kZWNvZGUoanNvbl9lbmNvZGUoJHJlc3VsdCkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGRvQ2FsY3VsYXRpb24oJGRhdGEpDQoJew0KCQkvLyBkaWQgd2UgZ2V0IGEgdmFsaWQgcmVzdWx0IHNldA0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgdGhlIHN1bSBjbGFzcyBpcyBsb2FkZWQNCgkJCUpMb2FkZXI6OmltcG9ydCgnc3VtJywgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IgLiAnL2hlbHBlcnMnKTsNCgkJCS8vIHJldHVybiB0aGUgcmVzdWx0DQoJCQlyZXR1cm4gbmV3IFN1bSgkZGF0YSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2F2ZUpzb24oJGRhdGEsICRmdWxsUGF0aCwgJHBhdGggPSBfX0RJUl9fKQ0KCXsNCgkJLy8gY2hlY2sgaWYgcGF0aCBleGlzdHMNCgkJaWYgKCFmaWxlX2V4aXN0cygkcGF0aCkpDQoJCXsNCgkJCS8vIGlmIG5vdCB0aGUgbWFrZSB0aGUgcGF0aA0KCQkJbWtkaXIoJHBhdGgsIDA3NTUsIHRydWUpOw0KCQl9DQoJCS8vIGNoZWNrIHRoYXQgdGhlIHN0cmluZyBpcyBqc29uDQoJCWlmICghc2VsZjo6aXNKc29uKCRkYXRhKSkNCgkJew0KCQkJLy8ganNvbiBlbmNvZGUgaWYgbm90IGpzb24NCgkJCSRkYXRhID0ganNvbl9lbmNvZGUoJGRhdGEpOw0KCQl9DQoJCS8vIG1ha2Ugc3VyZSB0aGlzIGlzIGEgc3RyaW5nDQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCSRmcCA9IGZvcGVuKCRmdWxsUGF0aCwgJ3cnKTsNCgkJCWZ3cml0ZSgkZnAsICRkYXRhKTsNCgkJCWZjbG9zZSgkZnApOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNKc29uKCRzdHJpbmcpDQoJew0KCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHN0cmluZykpDQoJCXsNCgkJCWpzb25fZGVjb2RlKCRzdHJpbmcpOw0KCQkJcmV0dXJuIChqc29uX2xhc3RfZXJyb3IoKSA9PT0gSlNPTl9FUlJPUl9OT05FKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRVc2VySGFjaygpDQoJew0KCQkkZmlsZXMgPSBhcnJheSgNCgkJCTAgPT4gYXJyYXkoDQoJCQkJJ3BhdGgnID0+IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX3VzZXJzL21vZGVscy91c2Vycy5waHAnLA0KCQkJCSdyZXBsYWNlJyA9PiBhcnJheSgNCgkJCQkJIkpNb2RlbExpc3Rcbntcblx0LyoqIiA9PiAiSk1vZGVsTGlzdFxue1xuXHQvKlxuXHQqIEEgVkRNIGhhY2sgdG8gcmVzdHJpY3QgdXNlcnMgYmFzZWQgb24gdXNlcidzIHJlbGF0aW9uIHRvIHRoZWlyIGNvbXBvbmVudFxuXHQqXG5cdCogVGhpcyBqdXN0IHByb29mcyB0aGUgdGhlIGhhY2sgaXMgaW5wbGFjZVxuXHQqL1xuXHRwdWJsaWMgXCRyZXN0cmljdFVzZXJzID0gdHJ1ZTtcblxuXHQvKioiLA0KCQkJCQkiXCRleGNsdWRlZCA9IGpzb25fZGVjb2RlKGJhc2U2NF9kZWNvZGUoXCRhcHAtPmlucHV0LT5nZXQoJ2V4Y2x1ZGVkJywgJycsICdCQVNFNjQnKSkpOyIgPT4gIlwkZXhjbHVkZWQgPSBqc29uX2RlY29kZShiYXNlNjRfZGVjb2RlKFwkYXBwLT5pbnB1dC0+Z2V0KCdleGNsdWRlZCcsICcnLCAnQkFTRTY0JykpKTtcblx0XHQvLyBhZGQgdGhlIGdsb2JhbCBleGNsdWRlIGZvciBbW1tjb21wb25lbnRdXV1cblx0XHRpZiAoXCR0aGlzLT5yZXN0cmljdFVzZXJzKVxuXHRcdHtcblx0XHRcdEpMb2FkZXI6OnJlZ2lzdGVyKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9bW1tjb21wb25lbnRdXV0ucGhwJyk7XG5cdFx0XHQvLyBjaGVjayBpZiB0aGUgY29tcG9uZW50IGlzIGluc3RhbGxlZFxuXHRcdFx0aWYgKGNsYXNzX2V4aXN0cygnW1tbQ29tcG9uZW50XV1dSGVscGVyJykpXG5cdFx0XHR7XG5cdFx0XHRcdFwkZXhjbHVkZWRHbG9iYWwgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6Om5vdEhpc1VzZXJzKCk7XG5cdFx0XHRcdGlmIChcJGV4Y2x1ZGVkR2xvYmFsKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCRleGNsdWRlZCA9IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6Om1lcmdlKGFycmF5KFwkZXhjbHVkZWRHbG9iYWwsXCRleGNsdWRlZCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSIpDQoJCQkpLA0KCQkJMSA9PiBhcnJheSgNCgkJCQkncGF0aCcgPT4gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fdXNlcnMvbW9kZWxzL3VzZXIucGhwJywNCgkJCQkncmVwbGFjZScgPT4gYXJyYXkoDQoJCQkJCSIvLyBUaGUgdXNlciBzaG91bGQgbm90IGJlIGFibGUgdG8gc2V0IHRoZSByZXF1aXJlUmVzZXQgdmFsdWUgb24gdGhlaXIgb3duIGFjY291bnQiID0+ICJpZiAoIUZhY3Rvcnk6OmdldFVzZXIoKS0+YXV0aG9yaXNlKCdjb3JlLmFkbWluJywgJ2NvbV9bW1tjb21wb25lbnRdXV0nKSAmJiAhRmFjdG9yeTo6Z2V0VXNlcigpLT5hdXRob3Jpc2UoJ2NvcmUub3B0aW9ucycsICdjb21fW1tbY29tcG9uZW50XV1dJykpDQoJCXsNCgkJCS8vIGxvYWQgb3VyIGhlbHBlciBjbGFzcyBmb3IgQ29zdCBCZW5lZml0IFByb2plY3Rpb24gQ29tcG9uZW50DQoJCQlKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KCQkJLy8gY2hlY2sgaWYgdGhlIGNvbXBvbmVudCBpcyBpbnN0YWxsZWQNCgkJCWlmIChjbGFzc19leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicpKQ0KCQkJew0KCQkJCVwkaXMgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6OnVzZXJJcygpOw0KCQkJCXN3aXRjaChcJGlzKQ0KCQkJCXsNCgkJCQkJY2FzZSAxOg0KCQkJCQljYXNlIDI6DQoJCQkJCWNhc2UgMzoNCgkJCQkJCS8vIERpc2FibGUgZmllbGRzIGZvciBkaXNwbGF5Lg0KCQkJCQkJXCRmb3JtLT5yZW1vdmVHcm91cCgncGFyYW1zJyk7DQoJCQkJCQkvLyBkaXNhYmxlIHNvbWUgZmllbGRzDQoJCQkJCQlcJGZvcm0tPnNldEZpZWxkQXR0cmlidXRlKCdzZW5kRW1haWwnLCAnZGlzYWJsZWQnLCAndHJ1ZScpOw0KCQkJCQkJXCRmb3JtLT5zZXRGaWVsZEF0dHJpYnV0ZSgnc2VuZEVtYWlsJywgJ2ZpbHRlcicsICd1bnNldCcpOw0KCQkJCQkJXCRmb3JtLT5yZW1vdmVGaWVsZCgnc2VuZEVtYWlsJyk7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCS8vIFRoZSB1c2VyIHNob3VsZCBub3QgYmUgYWJsZSB0byBzZXQgdGhlIHJlcXVpcmVSZXNldCB2YWx1ZSBvbiB0aGVpciBvd24gYWNjb3VudCIsDQoJCQkJCSJcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5tYW5hZ2UnLCAnY29tX3VzZXJzJykiID0+ICJcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5tYW5hZ2UnLCAnY29tX3VzZXJzJykgJiYgIFwkdXNlci0+YXV0aG9yaXNlKCdjb3JlLmFkbWluJywgJ2NvbV9bW1tjb21wb25lbnRdXV0nKSIpDQoJCQkpLA0KCQkJMiA9PiBhcnJheSgNCgkJCQkncGF0aCcgPT4gSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fdXNlcnMvY29udHJvbGxlcnMvdXNlci5waHAnLA0KCQkJCSdyZXBsYWNlJyA9PiBhcnJheSgNCgkJCQkJInJldHVybiBwYXJlbnQ6OmFsbG93RWRpdChcJGRhdGEsIFwka2V5KTsiID0+ICJpZiAoIUZhY3Rvcnk6OmdldFVzZXIoKS0+YXV0aG9yaXNlKCdjb3JlLmFkbWluJywgJ2NvbV9bW1tjb21wb25lbnRdXV0nKSAmJiAhRmFjdG9yeTo6Z2V0VXNlcigpLT5hdXRob3Jpc2UoJ2NvcmUub3B0aW9ucycsICdjb21fW1tbY29tcG9uZW50XV1dJykpDQoJCXsNCgkJCS8vIGxvYWQgb3VyIGhlbHBlciBjbGFzcyBmb3IgQ29zdCBCZW5lZml0IFByb2plY3Rpb24gQ29tcG9uZW50DQoJCQlKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KCQkJLy8gY2hlY2sgaWYgdGhlIGNvbXBvbmVudCBpcyBpbnN0YWxsZWQNCgkJCWlmIChjbGFzc19leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicpKQ0KCQkJew0KCQkJCVwkaGlzVXNlcnMgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6Omhpc1VzZXJzKCk7DQoJCQkJaWYgKCFpbl9hcnJheShcJGRhdGFbXCRrZXldLFwkaGlzVXNlcnMpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBwYXJlbnQ6OmFsbG93RWRpdChcJGRhdGEsIFwka2V5KTsiKQ0KCQkJKSwNCgkJCTMgPT4gYXJyYXkoDQoJCQkJJ3BhdGgnID0+IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX3VzZXJzL3ZpZXdzL3VzZXJzL3ZpZXcuaHRtbC5waHAnLA0KCQkJCSdyZXBsYWNlJyA9PiBhcnJheSgNCgkJCQkJImlmIChcJGNhbkRvLT5nZXQoJ2NvcmUuY3JlYXRlJykpIiA9PiAiaWYgKFwkY2FuRG8tPmdldCgnY29yZS5jcmVhdGUnKSAmJiBcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5hZG1pbicsICdjb21fY29zdGJlbmVmaXRwcm9qZWN0aW9uJykpIikNCgkJCSksDQoJCQk0ID0+IGFycmF5KA0KCQkJCSdwYXRoJyA9PiBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV91c2Vycy92aWV3cy91c2Vycy92aWV3Lmh0bWwucGhwJywNCgkJCQkncmVwbGFjZScgPT4gYXJyYXkoCQkJCQkNCgkJCQkJIi8vIEFkZCBhIGJhdGNoIGJ1dHRvblxuXHRcdGlmIChcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5jcmVhdGUnLCAnY29tX3VzZXJzJykiID0+ICIvLyBBZGQgYSBiYXRjaCBidXR0b24gb25seSBpZiB1c2VyIGFsc28gaGFzIGFkbWluIHJpZ2h0IGluIGNvbV9jb3N0YmVuZWZpdHByb2plY3Rpb25cblx0XHRpZiAoXCR1c2VyLT5hdXRob3Jpc2UoJ2NvcmUuY3JlYXRlJywgJ2NvbV91c2VycycpXG5cdFx0XHQmJiBcJHVzZXItPmF1dGhvcmlzZSgnY29yZS5hZG1pbicsICdjb21fY29zdGJlbmVmaXRwcm9qZWN0aW9uJykiKQ0KCQkJKQ0KCQkpOw0KCQkvLyBjaGVjayBpZiBoYWNrIGlzIHN0aWxsIHNldA0KCQlyZXR1cm4gc2VsZjo6c2V0SGFjaygkZmlsZXMpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0SGFjaygkZmlsZXMpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZpbGVzKSkNCgkJew0KCQkJJGNoZWNraW5nID0gYXJyYXkoKTsNCgkJCS8vIGdldCB0aGUgZmlsZSB0b29scw0KCQkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uZmlsZScpOw0KCQkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKQ0KCQkJew0KCQkJCSR1cGRhdGUgPSBmYWxzZTsNCgkJCQkvLyBnZXQgcmVsYXRlZCBmaWxlcw0KCQkJCSRhY3R1YWxGaWxlID0gSkZpbGU6OnJlYWQoJGZpbGVbJ3BhdGgnXSk7DQoJCQkJLy8gY2hlY2sgaWYgaGFjayBpcyBzdGlsbCBzZXQNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZpbGVbJ3JlcGxhY2UnXSkpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkZmlsZVsncmVwbGFjZSddIGFzICRvcmlnaW5hbCA9PiAkdXBkYXRlU3RyaW5nKQ0KCQkJCQl7DQoJCQkJCQlpZiAoc3RycG9zKCRhY3R1YWxGaWxlLCR1cGRhdGVTdHJpbmcpID09PSBmYWxzZSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBzZXQgdGhlIGhhY2sgYWdhaW4NCgkJCQkJCQkkdXBkYXRlID0gdHJ1ZTsNCgkJCQkJCQkkYWN0dWFsRmlsZSA9IHN0cl9yZXBsYWNlKCRvcmlnaW5hbCwgJHVwZGF0ZVN0cmluZywgJGFjdHVhbEZpbGUpOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkdXBkYXRlKQ0KCQkJCXsNCgkJCQkJJGRvbmVbJGZpbGVbJ3BhdGgnXV0gPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjp3cml0ZSgkZmlsZVsncGF0aCddLCRhY3R1YWxGaWxlKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGRvbmVbJGZpbGVbJ3BhdGgnXV0gPSB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkZG9uZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB3cml0ZUZpbGUoJHBhdGgsJGRhdGEpDQoJew0KCQkkZmggPSBmb3BlbigkcGF0aCwgInciKTsNCgkJaWYgKCFpc19yZXNvdXJjZSgkZmgpKQ0KCQl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJaWYgKGZ3cml0ZSgkZmgsICRkYXRhKSkNCgkJew0KCQkJLy8gY2xvc2UgZmlsZS4NCgkJCWZjbG9zZSgkZmgpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJLy8gY2xvc2UgZmlsZS4NCgkJZmNsb3NlKCRmaCk7DQoJCXJldHVybiBmYWxzZTsNCgl9', '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXNlcklzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQl9DQoJCS8vIGdldCB0aGlzIHVzZXIgZ3JvdXBzDQoJCSRncm91cHMJPSAoYXJyYXkpICR1c2VyLT5nZXRBdXRob3Jpc2VkR3JvdXBzKCk7DQoJCS8vIGdldCBwYXJhbXMNCgkJJHBhcmFtcwk9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJLy8gZ2V0IHRhcmdldCBncm91cHMNCgkJJGNvdW50cnlHcm91cHMgCQkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnY291bnRyeXVzZXInKTsNCgkJJHNlcnZpY2Vwcm92aWRlckdyb3VwcwkJPSAoYXJyYXkpICRwYXJhbXMtPmdldCgnc2VydmljZXByb3ZpZGVydXNlcicpOw0KCQkkbWVtYmVyR3JvdXBzIAkJCT0gKGFycmF5KSAkcGFyYW1zLT5nZXQoJ21lbWJlcnVzZXInKTsNCgkJLy8gbm93IGNoZWNrIGluIHdoYXQgZ3JvdXAgdGhpcyB1c2VyIGJlbG9uZ3MNCgkJaWYgKGFycmF5X2ludGVyc2VjdCgkY291bnRyeUdyb3VwcywgJGdyb3VwcykpDQoJCXsNCgkJCS8vIGlzIGNvdW50cnkNCgkJCXJldHVybiAzOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRzZXJ2aWNlcHJvdmlkZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBzZXJ2aWNlcHJvdmlkZXINCgkJCXJldHVybiAyOw0KCQl9DQoJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJHcm91cHMsICRncm91cHMpKQ0KCQl7DQoJCQkvLyBpcyBtZW1iZXINCgkJCXJldHVybiAxOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrSW50ZXJ2ZXRpb25BY2Nlc3MoJGlkLCAkc2hhcmUgPSBudWxsLCAkY29tcCA9IG51bGwpDQoJew0KICAgICAgICAgICAgICAgIC8vIHNldCBzaGFyZSB2YWx1ZSBpZiBub3Qgc2V0DQogICAgICAgICAgICAgICAgaWYgKCEkc2hhcmUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNoYXJlID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ3NoYXJlJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIGJhc2VkIG9uIHNoYXJlZCB3ZSBzZXQgbmVlZGVkIHZhbHVlcw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoaXMgaW50ZXJ2ZW50aW9ucyBjb21wYW55IChvd25lcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkY29tcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21wID0gc2VsZjo6Z2V0SWQoJ2ludGVydmVudGlvbicsICRpZCwgJ2lkJywgJ2NvbXBhbnknKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgaGlzIGNvbXBhbmllcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGFuaWVzID0gc2VsZjo6aGlzQ29tcGFuaWVzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB1c2VyIHR5cGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXJUeXBlID0gc2VsZjo6dXNlcklzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gYmFzZWQgb24gc2hhcmVkIHZhbHVlIHdlIHdpbGwgcmVzcG9uZA0KICAgICAgICAgICAgICAgIHN3aXRjaCAoJHNoYXJlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2hhcmluZyBpcyAxIG9ubHkgb3duZXIgbWF5IHNlZSBpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHVzZXJUeXBlID09IDEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCRjb21wLCAkY29tcGFuaWVzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaGFyaW5nIGlzIDIgb25seSBvd25lciBhbmQgc2VydmljZSBwcm92aWRlciBtYXkgc2VlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1c2VyVHlwZSA9PSAxIHx8ICR1c2VyVHlwZSA9PSAyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkY29tcCwgJGNvbXBhbmllcykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RIaXNVc2VycygkaWQgPSBudWxsKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IGFsbCB0aGUgdXNlcnMgdG8ga2VlcA0KCQkka2VlcFVzZXJzID0gc2VsZjo6aGlzVXNlcnMoJGlkKTsNCgkJaWYgKGlzX2FycmF5KCRrZWVwVXNlcnMpKQ0KCQl7DQoJCQkvLyByZXR1cm4gdGhvc2Ugbm90IHRvIGtlZXANCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ2lkJywka2VlcFVzZXJzLCd1c2VycycsJ2lkJywnTk9UIElOJywnJyk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGlzVXNlcnMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBoaW1zZWxmKQ0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuIGFycmF5KCRpZCk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvbXBhbmllcyB1c2VycyB0aGF0IGJlbG9uZyB0byB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgaGltc2VsZikNCgkJCWNhc2UgMjoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwCQk9IHNlbGY6OmdldElkcygnaWQnLCRjb21wYW5pZXMsJ2NvbXBhbnknLCd1c2VyJyk7DQoJCQkvLyBub3cgY2hlY2sgdGhlIHJlc3VsdA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRrZWVwKSkNCgkJCXsNCgkJCQkka2VlcFtdID0gJGlkOw0KCQkJCXJldHVybiBhcnJheV91bmlxdWUoJGtlZXApOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCQkvLyBjb3VudHJ5IChvbmx5IGxvYWQgY29tcGFuaWVzIGFuZCBzZXJ2aWNlIHByb3ZpZGVycyB0aGF0IGJlbG9uZyB0byB0aGUgY291bnRyeSkNCgkJCWNhc2UgMzoNCgkJCSRjb21wYW5pZXMJPSBzZWxmOjpoaXNDb21wYW5pZXMoJGlkKTsNCgkJCSRrZWVwQwkJPSBzZWxmOjpnZXRJZHMoJ2lkJywkY29tcGFuaWVzLCdjb21wYW55JywndXNlcicpOw0KCQkJJHNlcnZpY2UJPSBzZWxmOjpoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCk7DQoJCQkka2VlcFMJCT0gc2VsZjo6Z2V0SWRzKCdpZCcsJHNlcnZpY2UsJ3NlcnZpY2VfcHJvdmlkZXInLCd1c2VyJyk7DQoJCQkvLyBtZXJnZSB0aGVzZSB2YWx1ZXMNCgkJCSRrZWVwCQk9IHNlbGY6Om1lcmdlQXJyYXlzKGFycmF5KCRrZWVwQywka2VlcFMpKTsNCgkJCS8vIG5vdyBjaGVjayB0aGUgcmVzdWx0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGtlZXApKQ0KCQkJew0KCQkJCSRrZWVwW10gPSAkaWQ7DQoJCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgka2VlcCk7DQoJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNDb21wYW5pZXMoJGlkID0gbnVsbCkNCgl7DQoJCWlmKCRpZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGlkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkaWQpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGlzKQ0KCQl7DQoJCQkvLyBtZW1iZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIG1lbWJlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY29tcGFueScpOw0KCQkJYnJlYWs7DQoJCQkvLyBzZXJ2ZXMgcHJvdmlkZXIgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIpDQoJCQljYXNlIDI6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdzZXJ2aWNlX3Byb3ZpZGVyJyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnc2VydmljZV9wcm92aWRlcicpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb21wYW5pZXMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvdW50cnkpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCdjb3VudHJ5JyxzZWxmOjpnZXRJZHMoJ3VzZXInLCRpZCwnY291bnRyeScpLCdjb21wYW55Jyk7DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNTZXJ2aWNlUHJvdmlkZXJzKCRpZCA9IG51bGwpDQoJew0KCQlpZigkaWQgPiAwKQ0KCQl7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRpZCA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJGlkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJaWYgKDEgPT0gJGlzKSAvLyBtZW1iZXINCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygndXNlcicsJGlkLCdjb21wYW55Jywnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCWVsc2VpZiAoMiA9PSAkaXMpIC8vIHNlcnZlcyBwcm92aWRlcg0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoc2VsZjo6Z2V0SWQoJ3NlcnZpY2VfcHJvdmlkZXInLCRpZCkpOw0KCQl9DQoJCWVsc2VpZiAoMyA9PSAkaXMpIC8vIGNvdW50cnkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldElkcygnY291bnRyeScsc2VsZjo6Z2V0SWRzKCd1c2VyJywkaWQsJ2NvdW50cnknKSwnc2VydmljZV9wcm92aWRlcicpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0NvdW50cmllcygkdXNlcklkID0gbnVsbCwgJGlkID0gbnVsbCwgJGlzX3R5cGUgPSBudWxsKQ0KCXsNCgkJaWYoJHVzZXJJZCA+IDApDQoJCXsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQllbHNlaWYoJGlkID4gMCAmJiAkaXNfdHlwZSkNCgkJew0KCQkJJHVzZXJJZCA9IHNlbGY6OmdldElkKCRpc190eXBlLCRpZCwnaWQnLCd1c2VyJyk7DQoJCQkkaXMgPSBzZWxmOjp1c2VySXMoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdXNlcklkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRpcyA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJfQ0KCQkvLyByZXR1cm4gaW4gcmVsYXRpb24NCgkJc3dpdGNoKCRpcykNCgkJew0KCQkJLy8gbWVtYmVyIChvbmx5IGxvYWQgY291bnRyaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBtZW1iZXIgdXNlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRJZHMoJ3VzZXInLCR1c2VySWQsJ2NvbXBhbnknLCdjb3VudHJ5Jyk7DQoJCQlicmVhazsNCgkJCS8vIHNlcnZlcyBwcm92aWRlciAob25seSBsb2FkIGNvdW50cnkgdGhhdCBiZWxvbmcgdG8gdGhlIHNlcnZpY2UgcHJvdmlkZXIgdXNlcikNCgkJCWNhc2UgMjoNCgkJCXJldHVybiBhcnJheShzZWxmOjpnZXRJZCgnc2VydmljZV9wcm92aWRlcicsJHVzZXJJZCwndXNlcicsJ2NvdW50cnknKSk7DQoJCQlicmVhazsNCgkJCS8vIGNvdW50cnkgKG9ubHkgbG9hZCBjb250cnllIHRoYXQgYmVsb25nIHRvIHRoZSBjb3VudHJ5IHVzZXIpDQoJCQljYXNlIDM6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0SWRzKCd1c2VyJywkdXNlcklkLCdjb3VudHJ5JywnaWQnKTsNCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc0N1cnJlbmNpZXMoJHVzZXJJZCA9IG51bGwsICRpZCA9IG51bGwsICRpc190eXBlID0gbnVsbCkNCgl7DQoJCSRjb3VudHJpZXMgPSBzZWxmOjpoaXNDb3VudHJpZXMoJHVzZXJJZCwkaWQsJGlzX3R5cGUpOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvdW50cmllcykpDQoJCXsNCgkJCSRjdXJyZW5jaWVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRjb3VudHJpZXMgYXMgJGNvdW50cnkpDQoJCQl7DQoJCQkJLy8gZ2V0IGN1cnJlbmN5IGlkDQoJCQkJJGN1cnJlbmNpZXNbXSA9IHNlbGY6OmdldFZhcignY3VycmVuY3knLCBzZWxmOjpnZXRWYXIoJ2NvdW50cnknLCAkY291bnRyeSwgJ2lkJywgJ2N1cnJlbmN5JyksICdjb2RldGhyZWUnLCAnaWQnKTsNCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY2llcykpDQoJCQl7DQoJCQkJcmV0dXJuICRjdXJyZW5jaWVzOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN1cnJlbmN5RGV0YWlscygkaWQgPSBmYWxzZSkNCgl7DQoJCWlmICghJGlkKQ0KCQl7DQoJCQkkaWQgPSBzZWxmOjpoaXNDdXJyZW5jaWVzKCk7DQoJCX0NCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRpZCkpDQoJCXsNCgkJCSRpZHMgPSBhcnJheV92YWx1ZXMoJGlkKTsNCgkJCSRpZCA9ICRpZFswXTsNCgkJfQ0KCQlpZihpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQknYS5kZWNpbWFsc3ltYm9sJywnYS5wb3NpdGl2ZXN0eWxlJywnYS5uZWdhdGl2ZXN0eWxlJyksDQoJCQkJYXJyYXkoCSdjdXJyZW5jeV9pZCcsJ2N1cnJlbmN5X25hbWUnLCdjdXJyZW5jeV9jb2RldGhyZWUnLCdjdXJyZW5jeV9udW1lcmljY29kZScsJ2N1cnJlbmN5X3N5bWJvbCcsDQoJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCSdjdXJyZW5jeV9uZWdhdGl2ZXN0eWxlJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2N1cnJlbmN5JywgJ2EnKSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZU1vbmV5KCRudW1iZXIsJGN1cnJlbmN5ID0gZmFsc2UpDQoJew0KCQkvLyBmaXJzdCBjaGVjayBpZiB3ZSBoYXZlIGEgbnVtYmVyDQoJCWlmIChpc19udW1lcmljKCRudW1iZXIpKQ0KCQl7DQoJCQkvLyBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgbmVnYXRpdmUgZmluZGVyIGZpbGUNCgkJCWluY2x1ZGVfb25jZSAnbmVnYXRpdmVmaW5kZXIucGhwJzsNCgkJCS8vIGNoZWNrIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUNCgkJCSRuZWdhdGl2ZUZpbmRlck9iaiA9IG5ldyBOZWdhdGl2ZUZpbmRlcihuZXcgRXhwcmVzc2lvbigiJG51bWJlciIpKTsNCgkJCSRuZWdhdGl2ZSA9ICRuZWdhdGl2ZUZpbmRlck9iai0+aXNJdE5lZ2F0aXZlKCkgPyBUUlVFIDogRkFMU0U7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdFUlJPUiEgKCcuJG51bWJlci4nKSBpcyBub3QgYSBudW1iZXIhJyk7DQoJCX0NCgkJLy8gbm90IHNldHVwIHRoZSBjdXJyZW5jeQ0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGN1cnJlbmN5KSkNCgkJew0KCQkJaWYoIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfcG9zaXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfbmVnYXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFsc3ltYm9sKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9zeW1ib2wpKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkY3VycmVuY3ktPmN1cnJlbmN5X2lkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmN1cnJlbmN5X2lkKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc3NldCgkY3VycmVuY3ktPmlkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmlkKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGN1cnJlbmN5ID0gc2VsZjo6Y3VycmVuY3lEZXRhaWxzKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9CQ0KCQllbHNlDQoJCXsNCgkJCSRjdXJyZW5jeSA9IHNlbGY6OmN1cnJlbmN5RGV0YWlscygkY3VycmVuY3kpOw0KCQl9DQoJCS8vIHNldCB0aGUgbnVtYmVyIHRvIGN1cnJlbmN5DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY3VycmVuY3kpKQ0KCQl7DQoJCQlpZiAoISRuZWdhdGl2ZSkNCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9wb3NpdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJysnOw0KCQkJfQ0KCQkJZWxzZSANCgkJCXsNCgkJCQkkZm9ybWF0ID0gJGN1cnJlbmN5LT5jdXJyZW5jeV9uZWdhdGl2ZXN0eWxlOw0KCQkJCSRzaWduID0gJy0nOw0KCQkJCSRudW1iZXIgPSBhYnMoJG51bWJlcik7DQoJCQl9DQoJCQkkc2V0dXBOdW1iZXIgPSBudW1iZXJfZm9ybWF0KChmbG9hdCkkbnVtYmVyLCAoaW50KSRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlLCAkY3VycmVuY3ktPmN1cnJlbmN5X2RlY2ltYWxzeW1ib2wsICcgJyk7IC8vJGN1cnJlbmN5LT5jdXJyZW5jeV90aG91c2FuZHMgVE9ETyk7DQoJCQkkc2VhcmNoID0gYXJyYXkoJ3tzaWdufScsICd7bnVtYmVyfScsICd7c3ltYm9sfScpOw0KCQkJJHJlcGxhY2UgPSBhcnJheSgkc2lnbiwgJHNldHVwTnVtYmVyLCAkY3VycmVuY3ktPmN1cnJlbmN5X3N5bWJvbCk7DQoJCQkkbW9uZXlNYWRlID0gc3RyX3JlcGxhY2UgKCRzZWFyY2gsJHJlcGxhY2UsJGZvcm1hdCk7DQoNCgkJCXJldHVybiAkbW9uZXlNYWRlOw0KCQl9DQoJCXJldHVybiAkbnVtYmVyOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2F1c2VSaXNrRGV0YWlscygkaWQsJGRldGFpbHMgPSBudWxsKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGV0YWlscykpDQoJCXsNCgkJCSRkZXRhaWxzID0gYXJyYXkoJ25hbWUnLCdhbGlhcycsJ2Rlc2NyaXB0aW9uJywncmVmJyk7DQoJCX0NCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJGRldGFpbHMpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY2F1c2VyaXNrJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHVibGlzaGVkJykgLiAnID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRPYmplY3QoKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJZCgkdGFibGUsICR3aGVyZSA9IG51bGwgLCAkd2hlcmVTdHJpbmcgPSAndXNlcicsICR3aGF0ID0gJ2lkJykNCgl7DQoJCWlmKCEkd2hlcmUpDQoJCXsNCgkJCSR3aGVyZSA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCX0NCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJHdoYXQpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuJHRhYmxlKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJHdoZXJlU3RyaW5nKSAuICcgPSAnLihpbnQpICR3aGVyZSk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldElkcygkd2hlcmVTdHJpbmcsJHdoZXJlLCR0YWJsZSwkd2hhdCA9ICdpZCcsJG9wZXJhdG9yID0gJ0lOJywkbWFpbl8gPSAnW1tbY29tcG9uZW50XV1dXycpDQoJew0KCQlpZiAoIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR3aGVyZSkgJiYgJHdoZXJlID4gMCkNCgkJew0KCQkJJHdoZXJlID0gYXJyYXkoJHdoZXJlKTsNCgkJfQ0KDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkd2hlcmUpKQ0KCQl7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJHdoYXQpKSk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfXycuJG1haW5fLiR0YWJsZSkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgkd2hlcmVTdHJpbmcpIC4gJyAnLiRvcGVyYXRvci4nICgnIC4gaW1wbG9kZSgnLCcsJHdoZXJlKSAuICcpJyk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQlyZXR1cm4gYXJyYXlfdW5pcXVlKCRkYi0+bG9hZENvbHVtbigpKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDb3VudHJ5TmFtZSgkaWQpDQoJew0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnbmFtZScpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJy4oaW50KSAkaWQpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCXJldHVybiAkZGItPmxvYWRSZXN1bHQoKTsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21iaW5lKCRpdGVtcykNCgl7DQoJCS8vIG1ha2Ugc3VyZSB0aGUgc3VtIGNsYXNzIGlzIGxvYWRlZA0KCQlKTG9hZGVyOjppbXBvcnQoJ3N1bWNvbWJpbmUnLCBKUEFUSF9DT01QT05FTlRfQURNSU5JU1RSQVRPUiAuICcvaGVscGVycycpOw0KCQkvLyByZXR1cm4gdGhlIHJlc3VsdA0KCQlyZXR1cm4gbmV3IFN1bUNvbWJpbmUoJGl0ZW1zKTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbGN1bGF0ZSgkaWQsJGRhdGEpDQoJew0KCQlpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkYXRhKSkgPT09ICRkYXRhKXsNCgkJCS8vIHdlIGhhdmUgdmFsaWQgZGF0YSBub3cgY2hlY2sgaWYgc3RvcmVkIHJlc3VsdCBuZWVkcyB0byBiZSB1cGRhdGVkLg0KCQkJJGZpbGVOYW1lCT0gbWQ1KCRkYXRhKTsNCgkJCSRkYXRhCQk9IHVuc2VyaWFsaXplKGJhc2U2NF9kZWNvZGUoJGRhdGEpKTsNCgkJfSBlbHNlIHsNCgkJCS8vIG5vdCB2YWxpZCBkYXRhIGZpcnN0IGdldCB0aGUgdmFsaWQgZGF0YQ0KCQkJJG1vZGVsCQk9IHNlbGY6OmdldE1vZGVsKCdjb21wYW55ZGF0YScpOw0KCQkJJGRhdGEgCQk9ICRtb2RlbC0+Z2V0SXRlbSgoaW50KSRpZCk7DQoJCQkvLyB3ZSBoYXZlIHZhbGlkIGRhdGEgbm93IGNoZWNrIGlmIHN0b3JlZCByZXN1bHQgbmVlZHMgdG8gYmUgdXBkYXRlZC4NCgkJCSRmaWxlTmFtZQk9IG1kNShiYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkZGF0YSkpKTsNCgkJfQ0KCQkvLyBzZXQgc29tZSBkZWZhdWx0cw0KCQkkcGFyYW1zCT0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQkkcGF0aAk9ICRwYXJhbXMtPmdldCgncmVzdWx0cGF0aCcsIEpQQVRIX0FETUlOSVNUUkFUT1IuJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycycpOw0KCQkvLyBidWlsZCBmdWxsIHBhdGggdG8gZmlsZQ0KCQkkZnVsbFBhdGggPSAkcGF0aC4nLycuJGZpbGVOYW1lLicuanNvbic7DQoJCS8vIGNoZWNrIGlmIGZpbGUgZXhpc3RzDQoJCWlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpICYmICgoJGpzb25GaWxlID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0Q29udGVudCgkZnVsbFBhdGgsIEZBTFNFKSkgIT09IEZBTFNFKSkNCgkJew0KCQkJLy8gZ3JlYXQgd2UgYXJlIGRvbmUgcmV0dXJuIHJlc3VsdHMNCgkJCXJldHVybiBqc29uX2RlY29kZSgkanNvbkZpbGUpOw0KCQl9DQoJCS8vIGRvIHRoZSBjYWxjdWxhdGlvbiBhZ2Fpbg0KCQkkcmVzdWx0ID0gc2VsZjo6ZG9DYWxjdWxhdGlvbigkZGF0YSk7DQoJCS8vIGRpZCB3ZSBnZXQgYSB2YWxpZCByZXN1bHQgc2V0DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0KSB8fCBTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0KSkNCgkJew0KCQkJLy8gbm93IHNhdmUgZm9yIG5leHQgdGltZQ0KCQkJc2VsZjo6c2F2ZUpzb24oJHJlc3VsdCwgJGZ1bGxQYXRoLCAkcGF0aCk7DQoJCQkvLyByZXR1cm4gcmVzdWx0IHNldA0KCQkJcmV0dXJuICBqc29uX2RlY29kZShqc29uX2VuY29kZSgkcmVzdWx0KSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZG9DYWxjdWxhdGlvbigkZGF0YSkNCgl7DQoJCS8vIGRpZCB3ZSBnZXQgYSB2YWxpZCByZXN1bHQgc2V0DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIG1ha2Ugc3VyZSB0aGUgc3VtIGNsYXNzIGlzIGxvYWRlZA0KCQkJSkxvYWRlcjo6aW1wb3J0KCdzdW0nLCBKUEFUSF9DT01QT05FTlRfQURNSU5JU1RSQVRPUiAuICcvaGVscGVycycpOw0KCQkJLy8gcmV0dXJuIHRoZSByZXN1bHQNCgkJCXJldHVybiBuZXcgU3VtKCRkYXRhKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCA9IF9fRElSX18pDQoJew0KCQkvLyBjaGVjayBpZiBwYXRoIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJew0KCQkJLy8gaWYgbm90IHRoZSBtYWtlIHRoZSBwYXRoDQoJCQlta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB0aGUgc3RyaW5nIGlzIGpzb24NCgkJaWYgKCFzZWxmOjppc0pzb24oJGRhdGEpKQ0KCQl7DQoJCQkvLyBqc29uIGVuY29kZSBpZiBub3QganNvbg0KCQkJJGRhdGEgPSBqc29uX2VuY29kZSgkZGF0YSk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHRoaXMgaXMgYSBzdHJpbmcNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJew0KCQkJJGZwID0gZm9wZW4oJGZ1bGxQYXRoLCAndycpOw0KCQkJZndyaXRlKCRmcCwgJGRhdGEpOw0KCQkJZmNsb3NlKCRmcCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0pzb24oJHN0cmluZykNCgl7DQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc3RyaW5nKSkNCgkJew0KCQkJanNvbl9kZWNvZGUoJHN0cmluZyk7DQoJCQlyZXR1cm4gKGpzb25fbGFzdF9lcnJvcigpID09PSBKU09OX0VSUk9SX05PTkUpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKglzZXQgZ3JvdXBzIG5hbWVzDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRHcm91cE5hbWVzKCRncm91cHMpDQoJew0KCQkvLyBjaGFuZ2UgYXJyYXkgb2YgZ3JvdXAgaWRzIHRvIHN0cmluZyBvZiBncm91cCBuYW1lcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdyb3VwcykpDQoJCXsNCgkJCSRncm91cHNOYW1lcyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkZ3JvdXBzIGFzICRncm91cCkNCgkJCXsNCgkJCQkkZ3JvdXBzTmFtZXNbXSA9IHNlbGY6OmdldEdyb3VwTmFtZSgkZ3JvdXApOw0KCQkJfQ0KCQkJcmV0dXJuIGltcGxvZGUoJywgJywkZ3JvdXBzTmFtZXMpOw0KCQl9DQoJCXJldHVybiAnJzsNCgl9DQoJDQoJLyoqDQoJICoJZ2V0IGdyb3VwIG5hbWUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEdyb3VwTmFtZSgkaWQpDQoJew0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoYXJyYXkoJ2EudGl0bGUnKSk7DQoJCSRxdWVyeS0+ZnJvbSgnI19fdXNlcmdyb3VwcyBBUyBhJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EuaWQgPSAnLiRpZCk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCSRmb3VuZCA9ICRkYi0+Z2V0TnVtUm93cygpOw0KCQlpZigkZm91bmQpDQogICAgICAgCQl7DQoJCQlyZXR1cm4gJGRiLT5sb2FkUmVzdWx0KCk7DQoJCX0NCgkJcmV0dXJuICRpZCAuICctIG5vdCBmb3VuZCc7DQoJfQ==', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XSAoaHR0cDovL3d3dy5qb29tbGEub3JnLykgY29tcG9uZW50Lg0KDQogIVsjIyNDb21wb25lbnRfbmFtZSMjIyBpbWFnZV0gKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9uYW1pYmlhL0NCUC1Kb29tbGEtMy1Db21wb25lbnQvbWFzdGVyL2FkbWluL2Fzc2V0cy9pbWFnZXMvY29tcG9uZW50LTMwMC5wbmcgIlRoZSAjIyNDb21wb25lbnRfbmFtZSMjIyIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgUmVxdWlyZW1lbnRzDQoNCkR1ZSB0byB0aGUgc2l6ZSBvZiB0aGUgcGVybWlzc2lvbmFsIHN0cnVjdHVyZSwgeW91IHdpbGwgbmVlZCB0byBpbmNyZWFzZSBtYXhfaW5wdXRfdmFycyB1bnRpbCB0aGUgcGVybWlzc2lvbnMgYXJlIGFibGUgdG8gc2F2ZS4NCmBgYA0KbWF4X2lucHV0X3ZhcnMgPSA1MDAwDQpgYGANCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSAoaHR0cHM6Ly93d3cuc3RhZmZoZWFsdGhjYnAuY29tLykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdIChtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSAoaHR0cHM6Ly93d3cuc3RhZmZoZWFsdGhjYnAuY29tLykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0gKGh0dHBzOi8vd3d3LnZkbS5pby9qb29tbGEtY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXSAobWFpbHRvOmpvb21sYUB2ZG0uaW8p', '', '', 'Cost Benefit Projection Tool.', '', '', 'Cost Benefit Projection (giz)', '', '', '', '', 'https://www.vdm.io/updates/costbenefitprojection_update_server.xml', 'http://www.vdm.io', '', '6dsrYP4PHKaU5b8bBcr4DtIqz2FGQCndqTcZ1tu6TKAHrCs6Dr3XwYmlpPZ3CJav', 'https://www.vdm.io/access/', '', 2, 17, '', 1, 5), +(16, 1, '', '', '', 1, '', '', '', 1, '', 1, 1, 1, '', '', '', '', '', '', 1, '', 1, '', '', 1, '', 3, '', 1, 3, 'Llewellyn van der Merwe', '', 'default.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2016-02-01 15:43:01', 1, '', '', '', '', '', '', '', 1, 1, 'Electronic Trading Platform for Joomla', 'joomla@vdm.io', '', '', 'zjZMKoAm8xoIirA9kENdznjWw7q2vy3lawYY3pBk4a4=', '', 'ae5048b0-1b04-4a04-862c-e80396553814', 'images/electronic_trading.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2017-06-16 09:03:33', 1, 'Electronic Trading', 'electronictrading', '', 4, 'CQkvLyBydW4gc29tZSBob3VzZSBjbGVhbmluZw0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQkvLyBydW4gdGhlIGxvY2F0aW9uIGRhdGEgcXVldWUgKHRvIGluc3VyZSBhbGwgY3JvbiBqb2JzIHJ1biB0aW1lbHkpDQoJCQlpZiAoJGRvY3VtZW50IGluc3RhbmNlb2YgSkRvY3VtZW50SHRtbCkNCgkJCXsNCgkJCQlsb2NhdGlvbmRhdGFIZWxwZXI6OnRoZVF1ZXVlKCRkb2N1bWVudCk7DQoJCQl9DQoJCX0NCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw==', 'CS8qKg0KCSogCW1ha2Ugc3VyZSBsb2NhdGlvbiBkYXRhIGlzIGxvYWRlZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZExvY2F0aW9uRGF0YSgpDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygnbG9jYXRpb25kYXRhSGVscGVyJywgRkFMU0UpKQ0KCQl7DQoJCQkkcGF0aCA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX2xvY2F0aW9uZGF0YS9oZWxwZXJzL2xvY2F0aW9uZGF0YS5waHAnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJCXsNCgkJCQkvLyBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgaGVscGVyDQoJCQkJSkxvYWRlcjo6cmVnaXN0ZXIoJ2xvY2F0aW9uZGF0YUhlbHBlcicsICRwYXRoKTsNCgkJCQkvLyBmaXN0IHNldCB0aGUgZGVmYXVsdCBjb21wb25lbnQNCgkJCQlsb2NhdGlvbmRhdGFIZWxwZXI6OiRkZWZhdWx0Q29tcG9uZW50ID0gJ2NvbV9bW1tjb21wb25lbnRdXV0nOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0=', 'CS8qKg0KCSogCXRoZSBCdXRsZXINCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRzZXNzaW9uOw0KDQoNCglwcm90ZWN0ZWQgc3RhdGljICRmaWxlcGF0aCA9ICcnOw0KCXByb3RlY3RlZCBzdGF0aWMgJGZpbGVsaW5rID0gJyc7DQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zOw0KCXByb3RlY3RlZCBzdGF0aWMgJHVzZXI7DQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9ja2VyOw0KCXByb3RlY3RlZCBzdGF0aWMgJGJhc2lja2V5Ow0KDQoJLyoqDQoJKiAJc3RhcnQgYSBzZXNzaW9uIGlmIG5vdCBhbHJlYWR5IHNldCwgYW5kIGxvYWQgd2l0aCBkYXRhDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkU2Vzc2lvbigpDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRzZXNzaW9uKSB8fCAhU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHNlc3Npb24pKQ0KCQl7DQoJCQlzZWxmOjokc2Vzc2lvbiA9IEZhY3Rvcnk6OmdldFNlc3Npb24oKTsNCgkJfQ0KCQkvLyBzZXQgdGhlIGRlZmF1bHRzDQoJCXNlbGY6OnNldFNlc3Npb25EZWZhdWx0cygpOw0KCX0NCg0KCS8qKg0KCSogCXNldCB0aGUgc2Vzc2lvbiBkZWZhdWx0cyBpZiBub3Qgc2V0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRTZXNzaW9uRGVmYXVsdHMoKQ0KCXsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgYW55IHdhcyBhbHJlYWR5IHNldA0KCQlpZiAoISRjdXJyZW5jeSA9IHNlbGY6OmdldCgnQUNUSVZFX0NVUlJFTkNZJywgbnVsbCkpDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQkJaWYgKCAkdXNlci0+aWQgPiAwKQ0KCQkJew0KCQkJCS8vIHNldCB0aGUgYWN0aXZlIHVzZXJzIGN1cnJlbmN5DQoJCQkJc2VsZjo6c2V0KCdBQ1RJVkVfQ1VSUkVOQ1knLCBzZWxmOjpnZXRVc2VyQ3VycmVuY3koJHVzZXIpKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBzZXQgcHVibGljIGN1cnJlbmN5DQoJCQkJc2VsZjo6c2V0KCdBQ1RJVkVfQ1VSUkVOQ1knLCBzZWxmOjpnZXRQdWJsaWNDdXJyZW5jeSgpKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSogCXRoZSBsb2NhbCBzZXNzaW9uIG1lbW9yeQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGxvY2FsU2Vzc2lvbiA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAlnaXZlIFNlc3Npb24gbW9yZSB0byBrZWVwDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXQoJGtleSwgJHZhbHVlKQ0KCXsNCgkJLy8gc2V0IHRvIGxvY2FsIG1lbW9yeSB0byBzcGVlZCB1cCBwcm9ncmFtDQoJCXNlbGY6OiRsb2NhbFNlc3Npb25bJGtleV0gPSAkdmFsdWU7DQoJCS8vIGxvYWQgdG8gc2Vzc2lvbiBmb3IgbGF0ZXIgdXNlDQoJCXJldHVybiBzZWxmOjokc2Vzc2lvbi0+c2V0KCRrZXksIHNlbGY6OiRsb2NhbFNlc3Npb25bJGtleV0pOw0KCX0NCg0KCS8qKg0KCSogCWdldCBpbmZvIGZyb20gU2Vzc2lvbg0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0KCRrZXksICRkZWZhdWx0ID0gbnVsbCkNCgl7DQoJCS8vIGNoZWNrIGlmIGluIGxvY2FsIG1lbW9yeQ0KCQlpZiAoIWlzc2V0KHNlbGY6OiRsb2NhbFNlc3Npb25bJGtleV0pKQ0KCQl7DQoJCQkvLyBzZXQgdG8gbG9jYWwgbWVtb3J5IHRvIHNwZWVkIHVwIHByb2dyYW0NCgkJCXNlbGY6OiRsb2NhbFNlc3Npb25bJGtleV0gPSBzZWxmOjokc2Vzc2lvbi0+Z2V0KCRrZXksICRkZWZhdWx0KTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGxvY2FsU2Vzc2lvblska2V5XTsNCgl9DQoNCgkvKioNCgkqIAl0aGUgdXNlciBpcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGlzID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXNlcklzKCRpZCA9IG51bGwsICRsb2NhbFVzZXJJZCA9IGZhbHNlKQ0KCXsNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRpZCkgJiYgJGlkIGluc3RhbmNlb2YgSlVzZXIpDQoJCXsNCgkJCS8vIGp1c3QgcGFzcyB0aGUgb2JqZWN0DQoJCQkkdXNlciA9ICRpZDsNCgkJfQ0KCQllbHNlaWYoaXNfbnVtZXJpYygkaWQpICYmICRpZCA+IDApDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigkaWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCX0NCgkJaWYgKCFpc3NldChzZWxmOjokaXNbJHVzZXItPmlkXSkpDQoJCXsNCgkJCS8vIG5vdyBjaGVjayBpbiB3aGF0IGdyb3VwIHRoaXMgdXNlciBiZWxvbmdzDQoJCQlpZiAoJHVzZXItPmF1dGhvcmlzZSgnY29yZS5vcHRpb25zJywgJ2NvbV9bW1tjb21wb25lbnRdXV0nKSkNCgkJCXsNCgkJCQkvLyBpcyBhZG1pbg0KCQkJCXNlbGY6OiRpc1skdXNlci0+aWRdID0gMzsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBnZXQgdGhpcyB1c2VyIGdyb3Vwcw0KCQkJCSRncm91cHMgPSAoYXJyYXkpICR1c2VyLT5nZXRBdXRob3Jpc2VkR3JvdXBzKCk7DQoJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKTsNCgkJCQl9DQoJCQkJLy8gZ2V0IHRhcmdldCBncm91cHMNCgkJCQkkYWRtaW5Hcm91cHMgCQkJPSAoYXJyYXkpIHNlbGY6OiRwYXJhbXMtPmdldCgnYWRtaW51c2VyJyk7DQoJCQkJJG9yZ2FuaXplckdyb3VwcwkJPSAoYXJyYXkpIHNlbGY6OiRwYXJhbXMtPmdldCgnb3JnYW5pemVydXNlcicpOw0KCQkJCSRyZWdpc3RlcmVkR3JvdXBzIAkJPSAoYXJyYXkpIHNlbGY6OiRwYXJhbXMtPmdldCgncmVnaXN0ZXJlZHVzZXInKTsNCgkJCQkvLyBub3cgY2hlY2sgaW4gd2hhdCBncm91cCB0aGlzIHVzZXIgYmVsb25ncw0KCQkJCWlmICggYXJyYXlfaW50ZXJzZWN0KCRhZG1pbkdyb3VwcywgJGdyb3VwcykpDQoJCQkJew0KCQkJCQkvLyBpcyBhZG1pbg0KCQkJCQlzZWxmOjokaXNbJHVzZXItPmlkXSA9IDM7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoYXJyYXlfaW50ZXJzZWN0KCRvcmdhbml6ZXJHcm91cHMsICRncm91cHMpKQ0KCQkJCXsNCgkJCQkJLy8gaXMgb3JnYW5pc2F0aW9uDQoJCQkJCXNlbGY6OiRpc1skdXNlci0+aWRdID0gMjsNCgkJCQl9DQoJCQkJZWxzZWlmIChhcnJheV9pbnRlcnNlY3QoJHJlZ2lzdGVyZWRHcm91cHMsICRncm91cHMpKQ0KCQkJCXsNCgkJCQkJLy8gaXMgcmVnaXN0ZXJlZCB1c2VyDQoJCQkJCXNlbGY6OiRpc1skdXNlci0+aWRdID0gMTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gbm90IHBhcnQgb2YgdGhpcyBhcmVhDQoJCQkJCXNlbGY6OiRpc1skdXNlci0+aWRdID0gbnVsbDsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJaWYgKCRsb2NhbFVzZXJJZCkNCgkJew0KCQkJcmV0dXJuIGFycmF5KCdpcycgPT4gc2VsZjo6JGlzWyR1c2VyLT5pZF0sICdpZCcgPT4gc2VsZjo6Z2V0TG9jYWxVc2VySWQoJHVzZXItPmlkLCBzZWxmOjokaXNbJHVzZXItPmlkXSkpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokaXNbJHVzZXItPmlkXTsNCgl9DQoNCgkvKioNCgkqIAl0aGUgbG9jYWwgdXNlciBpZHMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRsb2NhbFVzZXJJZCA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExvY2FsVXNlcklkKCR1c2VySWQsICRpcykNCgl7DQoJCWlmICghaXNzZXQoc2VsZjo6JGxvY2FsVXNlcklkWyR1c2VySWRdKSkNCgkJew0KCQkJc3dpdGNoKCRpcykNCgkJCXsNCgkJCQljYXNlIDM6IC8vIHNpbmNlIGFkbWluIGhhcyBhY2Nlc3MgdG8gYWxsIChhdCB0aGlzIHRpbWUpDQoJCQkJCXNlbGY6OiRsb2NhbFVzZXJJZFskdXNlcklkXSA9IC0xOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgMjogLy8gZ2V0IG9yZ2FuaXplciBsb2NhbCBzeXN0ZW0gaWQNCgkJCQkJc2VsZjo6JGxvY2FsVXNlcklkWyR1c2VySWRdID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkdXNlcklkLCAndXNlcicsICdpZCcpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgMTogLy8gZ2V0IHJlZ2lzdGVyZWQgdXNlciBsb2NhbCBzeXN0ZW0gaWQNCgkJCQkJc2VsZjo6JGxvY2FsVXNlcklkWyR1c2VySWRdID0gc2VsZjo6Z2V0VmFyKCdyZWdpc3RlcmVkX3VzZXInLCAkdXNlcklkLCAndXNlcicsICdpZCcpOw0KCQkJCWJyZWFrOw0KCQkJCWRlZmF1bHQ6IC8vIHRoZSBkZWZhdWx0IGlzIHRvIHNldCBpdCB0byB6ZXJvDQoJCQkJCXNlbGY6OiRsb2NhbFVzZXJJZFskdXNlcklkXSA9IDA7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRsb2NhbFVzZXJJZFskdXNlcklkXTsJCQ0KCX0NCg0KCS8qKg0KCSogCXRoZSBwdWJsaWMgY3VycmVuY3kNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICR1c2Vyc0N1cnJlbmN5ID0gYXJyYXkoKTsNCg0KCS8qKg0KCSogCWdldCB0aGUgdXNlciBjdXJyZW5jeQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VXNlckN1cnJlbmN5KCR1c2VySWQgPSBudWxsKQ0KCXsNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCR1c2VySWQpICYmICR1c2VySWQgaW5zdGFuY2VvZiBKVXNlcikNCgkJew0KCQkJJHVzZXIgPSAkdXNlcklkOw0KCQl9DQoJCWVsc2VpZiAoaXNfbnVtZXJpYygkdXNlcklkKSAmJiAkdXNlcklkID4gMCkNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCX0NCgkJLy8gb25seSBzZXQgYWdhaW4gaWYgbm90IGZvdW5kDQoJCWlmICghaXNzZXQoc2VsZjo6JHVzZXJzQ3VycmVuY3lbJHVzZXItPmlkXSkpDQoJCXsNCgkJCSRhcnJheSA9IChhcnJheSkgc2VsZjo6dXNlcklzKCR1c2VyLCB0cnVlKTsNCgkJCS8vIHNldCBpbiByZWxhdGlvbg0KCQkJc3dpdGNoKCRhcnJheVsnaXMnXSkNCgkJCXsNCgkJCQkvLyByZWdpc3RlcmVkIHVzZXIgY3VycmVuY3kNCgkJCQljYXNlIDE6DQoJCQkJc2VsZjo6JHVzZXJzQ3VycmVuY3lbJHVzZXItPmlkXSA9IHNlbGY6OmdldFZhcnMoJ3JlZ2lzdGVyZWRfdXNlcicsICRhcnJheVsnaWQnXSwgJ2lkJywgJ2N1cnJlbmN5Jyk7DQoJCQkJYnJlYWs7DQoJCQkJLy8gb3JnYW5pemVyIGN1cnJlbmN5DQoJCQkJY2FzZSAyOg0KCQkJCXNlbGY6OiR1c2Vyc0N1cnJlbmN5WyR1c2VyLT5pZF0gPSBzZWxmOjpnZXRWYXJzKCdvcmdhbml6ZXInLCAkYXJyYXlbJ2lkJ10sICdpZCcsICAnY3VycmVuY3knKTsNCgkJCQlicmVhazsNCgkJCQkvLyBhZG1pbiBjYW4gYWNjZXNzIGFsbA0KCQkJCWNhc2UgMzogDQoJCQkJc2VsZjo6JHVzZXJzQ3VycmVuY3lbJHVzZXItPmlkXSA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdjdXJyZW5jeScsICdVU0QnKTsNCgkJCQlicmVhazsNCgkJCQkvLyBhbGwgb3RoZXIgZ2V0cyB0aGUgcHVibGljDQoJCQkJZGVmYXVsdDoNCgkJCQlzZWxmOjokdXNlcnNDdXJyZW5jeVskdXNlci0+aWRdID0gc2VsZjo6Z2V0UHVibGljQ3VycmVuY3koKTsNCgkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JHVzZXJzQ3VycmVuY3lbJHVzZXItPmlkXTsNCgl9DQoNCg0KCS8qKg0KCSogCXRoZSBwdWJsaWMgY3VycmVuY3kNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRwdWJsaWNDdXJyZW5jeSA9ICdzZXQnOw0KDQoJLyoqDQoJKiAJc2V0IHRoZSBwdWJsaWMvZGVmYXVsdCBjdXJyZW5jeQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHVibGljQ3VycmVuY3koKQ0KCXsNCgkJaWYgKCdzZXQnID09PSBzZWxmOjokcHVibGljQ3VycmVuY3kpDQoJCXsNCgkJCS8vIGdldCB0aGlzIGxvY2F0aW9uIGRhdGENCgkJCSRsb2NhdGlvbkRhdGEgPSBzZWxmOjpnZXRMb2NhdGlvbmRhdGEoKTsNCgkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgbG9jYXRpb24gZGF0YQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRsb2NhdGlvbkRhdGEpICYmIGlzc2V0KCRsb2NhdGlvbkRhdGFbJ0NVUlJFTkNZX0NPREVfVEhSRUUnXSkpDQoJCQl7DQoJCQkJc2VsZjo6JHB1YmxpY0N1cnJlbmN5ID0gJGxvY2F0aW9uRGF0YVsnQ1VSUkVOQ1lfQ09ERV9USFJFRSddOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXNlbGY6OiRwdWJsaWNDdXJyZW5jeSA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdjdXJyZW5jeScsICdVU0QnKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JHB1YmxpY0N1cnJlbmN5Ow0KCX0NCg0KCS8qKg0KCSogCVRoZSBvd25lcg0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG93bmVyID0gYXJyYXkoKTsNCg0KCS8qKg0KCSogCWFycmF5IHRvIGNoZWNrIHVzZXINCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRjaGVja1VzZXIgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJd2FudHMgdG8gZWRpdA0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHZpZXdBY2Nlc3M7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhc0FjY2VzcygkcmVjb3JkSWQsICR1c2VySWQgPSBudWxsLCAkdG8gPSAnZXZlbnQnLCAkdmlld0FjY2VzcyA9IGZhbHNlKQ0KCXsNCgkJLy8gc2V0IGlmIHZpZXcgYWNjZXNzIGlzIGFsbCB0aGF0IGlzIHJlcXVpcmVkIA0KCQlzZWxmOjokdmlld0FjY2VzcyA9ICR2aWV3QWNjZXNzOw0KCQlpZighJHVzZXJJZCkNCgkJew0KCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHVzZXIpKQ0KCQkJew0KCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQlzZWxmOjokdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJCX0NCgkJCSR1c2VySWQgPSBzZWxmOjokdXNlci0+aWQ7DQoJCX0NCgkJJGFycmF5ID0gKGFycmF5KSBzZWxmOjp1c2VySXMoJHVzZXJJZCwgdHJ1ZSk7DQoJCWlmIChpc3NldCgkYXJyYXlbJ2lzJ10pICYmICRhcnJheVsnaXMnXSAmJiAkcmVjb3JkSWQgPiAwKQ0KCQl7DQoJCQlzd2l0Y2goJHRvKQ0KCQkJew0KCQkJCWNhc2UgJ2V2ZW50JzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc0V2ZW50KCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkYXJyYXlbJ2lkJ10sICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3ZlbnVlJzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc1ZlbnVlKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdvcmdhbml6ZXInOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzT3JnYW5pemVyKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdpbnZvaWNlJzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc0ludm9pY2UoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAncGF5bWVudF9tZXRob2QnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzUGF5bWVudE1ldGhvZCgkYXJyYXlbJ2lzJ10sICRyZWNvcmRJZCwgJGFycmF5WydpZCddLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICd0YXhfcnVsZSc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NUYXhSdWxlKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkYXJyYXlbJ2lkJ10sICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ21lc3NhZ2VzX2J1aWxkZXInOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzTWVzc2FnZXNCdWlsZGVyKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkYXJyYXlbJ2lkJ10sICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2NvbmNlcHQnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzQ29uY2VwdCgkYXJyYXlbJ2lzJ10sICRyZWNvcmRJZCwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAnY29udGVudCc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NDb250ZW50KCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdidW5kbGUnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzQnVuZGxlKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NFdmVudCgkdHlwZSwgJHJlY29yZElkLCAkb3JnSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnZXZlbnQnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignZXZlbnQnLCAkcmVjb3JkSWQsICdpZCcsICdvcmdhbml6ZXInKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSA9PSAkb3JnSWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ2V2ZW50LmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5ldmVudC4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzVmVudWUoJHR5cGUsICRyZWNvcmRJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWyd2ZW51ZScuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ3ZlbnVlJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCd2ZW51ZScsICRyZWNvcmRJZCwgJ2lkJywgJ2NyZWF0ZWRfYnknKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWyd2ZW51ZScuJHJlY29yZElkXSA9PSAkdXNlcklkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCd2ZW51ZS5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0udmVudWUuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc09yZ2FuaXplcigkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ29yZ2FuaXplcicuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ29yZ2FuaXplcicuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignb3JnYW5pemVyJywgJHJlY29yZElkLCAnaWQnLCAnY3JlYXRlZF9ieScpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ29yZ2FuaXplcicuJHJlY29yZElkXSA9PSAkdXNlcklkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdvcmdhbml6ZXIuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLm9yZ2FuaXplci4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzSW52b2ljZSgkdHlwZSwgJHJlY29yZElkLCAkbG9jYWxJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBldmVudCBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydpbnZvaWNlJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnaW52b2ljZScuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignaW52b2ljZScsICRyZWNvcmRJZCwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQkJZGVmYXVsdDogLy8gc2V0IHRoZSBkZWZhdWx0IHRvDQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJYnJlYWs7DQoJCX0NCgkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJaWYgKHNlbGY6OiRvd25lclsnaW52b2ljZScuJHJlY29yZElkXSA9PSAkbG9jYWxJZCkNCgkJew0KCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJew0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQl7DQoJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJfQ0KCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgnaW52b2ljZS5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0uaW52b2ljZS4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzUGF5bWVudE1ldGhvZCgkdHlwZSwgJHJlY29yZElkLCAkbG9jYWxJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydwYXltZW50X21ldGhvZCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ3BheW1lbnRfbWV0aG9kJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdwYXltZW50X21ldGhvZCcsICRyZWNvcmRJZCwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ3BheW1lbnRfbWV0aG9kJy4kcmVjb3JkSWRdID09ICRsb2NhbElkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdwYXltZW50X21ldGhvZC5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0ucGF5bWVudF9tZXRob2QuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc1RheFJ1bGUoJHR5cGUsICRyZWNvcmRJZCwgJGxvY2FsSUQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnZXZlbnQnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcigndGF4X3J1bGUnLCAkcmVjb3JkSWQsICdpZCcsICdvcmdhbml6ZXInKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSA9PSAkbG9jYWxJRCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokdmlld0FjY2VzcykNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgncGF5bWVudF9tZXRob2QuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLnBheW1lbnRfbWV0aG9kLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NNZXNzYWdlc0J1aWxkZXIoJHR5cGUsICRyZWNvcmRJZCwgJGxvY2FsSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnZXZlbnQnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydtZXNzYWdlc19idWlsZGVyJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdtZXNzYWdlc19idWlsZGVyJywgJHJlY29yZElkLCAnaWQnLCAnb3JnYW5pemVyJyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnbWVzc2FnZXNfYnVpbGRlcicuJHJlY29yZElkXSA9PSAkbG9jYWxJZCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokdmlld0FjY2VzcykNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgnbWVzc2FnZXNfYnVpbGRlci5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0ubWVzc2FnZXNfYnVpbGRlci4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzQ29uY2VwdCgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnY29uY2VwdCcuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignY29uY2VwdCcsICRyZWNvcmRJZCwgJ2lkJywgJ2NyZWF0ZWRfYnknKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydjb25jZXB0Jy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ2NvbmNlcHQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmNvbmNlcHQuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0NvbnRlbnQoJHR5cGUsICRyZWNvcmRJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2NvbmNlcHQnLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ2NvbmNlcHQnLCAkcmVjb3JkSWQsICdpZCcsICdjcmVhdGVkX2J5Jyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnY29uY2VwdCcuJHJlY29yZElkXSA9PSAkdXNlcklkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdjb25jZXB0LmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5jb25jZXB0LicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJCXJldHVybiBzZWxmOjokdXNlci0+YXV0aG9yaXNlKCdjb250ZW50LmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5jb250ZW50LicgLiAoaW50KSAgJHJlY29yZElkKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0J1bmRsZSgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2J1bmRsZScuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2J1bmRsZScuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignYnVuZGxlJywgJHJlY29yZElkLCAnaWQnLCAnY3JlYXRlZF9ieScpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2J1bmRsZScuJHJlY29yZElkXSA9PSAkdXNlcklkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdidW5kbGUuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmJ1bmRsZS4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGlzSXRlbXMoJHRhYmxlLCAkdXNlcklkID0gbnVsbCkNCgl7DQoJCWlmKCR1c2VySWQgPiAwKQ0KCQl7DQoJCQkkYXJyYXkgPSAoYXJyYXkpIHNlbGY6OnVzZXJJcygkdXNlcklkLCB0cnVlKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRhcnJheSA9IChhcnJheSkgc2VsZjo6dXNlcklzKEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQsIHRydWUpOw0KCQl9DQoJCS8vIHJldHVybiBpbiByZWxhdGlvbg0KCQlzd2l0Y2goJGFycmF5WydpcyddKQ0KCQl7DQoJCQkvLyByZWdpc3RlcmVkIChvbmx5IGxvYWQgaXRlbXMgdGhhdCBiZWxvbmcgdG8gdGhlIHJlZ2lzdGVyZWQgdXNlcikNCgkJCWNhc2UgMToNCgkJCXJldHVybiBzZWxmOjpnZXRWYXJzKCR0YWJsZSwgJGFycmF5WydpZCddLCAncmVnaXN0ZXJlZF91c2VyJyk7DQoJCQlicmVhazsNCgkJCS8vIG9yZ2FuaXplciAob25seSBsb2FkIGl0ZW1zIHRoYXQgYmVsb25nIHRvIHRoZSBvcmdhbml6ZXIpDQoJCQljYXNlIDI6DQoJCQlyZXR1cm4gc2VsZjo6Z2V0VmFycygkdGFibGUsICRhcnJheVsnaWQnXSwgJ29yZ2FuaXplcicpOw0KCQkJYnJlYWs7DQoJCQkvLyBhZG1pbiBjYW4gYWNjZXNzIGFsbA0KCQkJY2FzZSAzOiANCgkJCXJldHVybiAtMTsNCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRsb2NhdGlvbmRhdGFIZWxwZXIgPSBmYWxzZTsgDQoNCgkvKioNCgkqIAlMb2FkIHRoZSBkYXRhIGZvciBJUCBhbmQgQ3VycmVuY3kgDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMb2NhdGlvbmRhdGEoJGlwID0gbnVsbCwgJHByb3RvY29sID0gbnVsbCwgJGtleSA9IG51bGwsICRiYXNlID0gJ1VTRCcsICRtb2RlID0gMCwgJHN0cmluZyA9IDAsICR2YWx1ZSA9IDEuMDApDQoJewkJDQoJCWlmIChzZWxmOjpsb2FkTG9jYXRpb25EYXRhKCkpDQoJCXsNCgkJCXJldHVybiBsb2NhdGlvbmRhdGFIZWxwZXI6OmdldExvY2F0aW9uZGF0YSgkaXAsICRwcm90b2NvbCwgJGtleSwgJGJhc2UsICRtb2RlLCAkc3RyaW5nLCAkdmFsdWUpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiByZXR1cm5zIEV4Y2hhbmdlUmF0ZXMNCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFeGNoYW5nZVJhdGUoJGZyb20sICRmcm9tVmFsdWUsICR0byA9ICdVU0QnKQ0KCXsNCgkJaWYgKHNlbGY6OmxvYWRMb2NhdGlvbkRhdGEoKSkNCgkJew0KCQkJcmV0dXJuIGxvY2F0aW9uZGF0YUhlbHBlcjo6Z2V0RXhjaGFuZ2VSYXRlKCRmcm9tLCAkZnJvbVZhbHVlLCAkdG8pOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCg0KCS8qKg0KCSogCXByZXBhcmUgYmFzZTY0IHN0cmluZyBmb3IgdXJsDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiYXNlNjRfdXJsZW5jb2RlKCRzdHJpbmcsICRlbmNvZGUgPSBmYWxzZSkNCgl7DQoJCWlmICgkZW5jb2RlKQ0KCQl7DQoJCQkkc3RyaW5nID0gYmFzZTY0X2VuY29kZSgkc3RyaW5nKTsNCgkJfQ0KCQlyZXR1cm4gc3RyX3JlcGxhY2UoYXJyYXkoJysnLCAnLycpLCBhcnJheSgnLScsICdfJyksICRzdHJpbmcpOw0KCX0NCg0KCS8qKg0KCSogCXByZXBhcmUgYmFzZTY0IHN0cmluZyBmb3JtIHVybA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmFzZTY0X3VybGRlY29kZSgkc3RyaW5nLCAkZGVjb2RlID0gZmFsc2UpDQoJew0KCQkkc3RyaW5nID0gc3RyX3JlcGxhY2UoYXJyYXkoJy0nLCAnXycpLCBhcnJheSgnKycsICcvJyksICRzdHJpbmcpOw0KCQlpZiAoJGRlY29kZSkNCgkJew0KCQkJJHN0cmluZyA9IGJhc2U2NF9kZWNvZGUoJHN0cmluZyk7DQoJCX0NCgkJcmV0dXJuICRzdHJpbmc7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRpbWFnZQ0KCSAqIEByZXR1cm4gYm9vbHxzdGRDbGFzcw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW1hZ2VGaWxlUHJvcGVydGllcygkaW1hZ2UsICRmb2xkZXIgPSBmYWxzZSkNCgl7DQoJCWlmICgkZm9sZGVyKQ0KCQl7DQoJCQkkbG9jYWxmb2xkZXIgPSAkZm9sZGVyOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHNldGltYWdlc2ZvbGRlciA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKS0+Z2V0KCdzZXRpbWFnZXNmb2xkZXInLCAxKTsNCgkJCWlmICgyID09ICRzZXRpbWFnZXNmb2xkZXIpDQoJCQl7DQoJCQkJJGxvY2FsZm9sZGVyID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpLT5nZXQoJ2ltYWdlc2ZvbGRlcicsIEpQQVRIX1NJVEUuJy9pbWFnZXMvIyMjY29tcG9uZW50IyMjJyk7DQoJCQl9DQoJCQllbHNlaWYgKDEgPT0gJHNldGltYWdlc2ZvbGRlcikNCgkJCXsNCgkJCQkkbG9jYWxmb2xkZXIgPSAgSlBBVEhfU0lURS4nL2ltYWdlcyc7DQoJCQl9DQoJCQllbHNlIC8vIGp1c3QgaW4tY2FzZSA6KQ0KCQkJew0KCQkJCSRsb2NhbGZvbGRlciA9ICBKUEFUSF9TSVRFLicvaW1hZ2VzLyMjI2NvbXBvbmVudCMjIyc7DQoJCQl9DQoJCX0NCgkJLy8gaW1wb3J0IGFsbCBuZWVkZWQgY2xhc3Nlcw0KCQlqaW1wb3J0KCdqb29tbGEuZmlsZXN5c3RlbS5mb2xkZXInKTsNCgkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uZmlsZScpOw0KCQlqaW1wb3J0KCdqb29tbGEuaW1hZ2UuaW1hZ2UnKTsNCgkJLy8gc2V0dXAgdGhlIGZvbGRlciBpZiBpdCBkb2VzIG5vdCBleGlzdA0KCQlpZiAoSkZvbGRlcjo6ZXhpc3RzKCRsb2NhbGZvbGRlcikgJiYgSkZpbGU6OmV4aXN0cygkbG9jYWxmb2xkZXIuJy8nLiRpbWFnZSkpDQoJCXsNCgkJCSRwcm9wZXJ0aWVzID0gSkltYWdlOjpnZXRJbWFnZUZpbGVQcm9wZXJ0aWVzKCRsb2NhbGZvbGRlci4nLycuJGltYWdlKTsNCgkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgcHJvcGVydGllcw0KCQkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRwcm9wZXJ0aWVzKSkNCgkJCXsNCgkJCQkvLyByZW1vdmUgdGhlIHNlcnZlciBwYXRoDQoJCQkJJGltYWdlUGF0aCA9IHRyaW0oc3RyX3JlcGxhY2UoSlBBVEhfU0lURSwnJywkbG9jYWxmb2xkZXIpLCcvJykuJy8nLiRpbWFnZTsNCgkJCQkvLyBub3cgYWRkIHRoZSBzcmMgcGF0aCB0byBzaG93IHRoZSBpbWFnZQ0KCQkJCSRwcm9wZXJ0aWVzLT5zcmMgPSBVcmk6OnJvb3QoKS4kaW1hZ2VQYXRoOw0KCQkJCS8vIHJldHVybiB0aGUgaW1hZ2UgcHJvcGVydGllcw0KCQkJCXJldHVybiAkcHJvcGVydGllczsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgJGR5bmFtaWNEYXRhID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0RHluYW1pY0RhdGEoJGRhdGEsICRwbGFjZWhvbGRlcnMpDQoJew0KCQkka2V5TUQ1ID0gbWQ1KCRkYXRhLmpzb25fZW5jb2RlKCRwbGFjZWhvbGRlcnMpKTsNCgkJaWYgKCFpc3NldChzZWxmOjokZHluYW1pY0RhdGFbJGtleU1ENV0pKQ0KCQl7DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBsYWNlaG9sZGVycykpDQoJCQl7DQoJCQkJc2VsZjo6c2V0VGhlSUYoJGRhdGEsICRwbGFjZWhvbGRlcnMpOw0KCQkJCXNlbGY6OiRkeW5hbWljRGF0YVska2V5TUQ1XSA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJHBsYWNlaG9sZGVycyksIGFycmF5X3ZhbHVlcygkcGxhY2Vob2xkZXJzKSwgJGRhdGEpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCXNlbGY6OiRkeW5hbWljRGF0YVska2V5TUQ1XSA9ICRkYXRhOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBzZWxmOjokZHluYW1pY0RhdGFbJGtleU1ENV07DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRUaGVJRigmJHN0cmluZywgJHBsYWNlaG9sZGVycykNCgl7CQkNCgkJLy8gb25seSBub3JtYWwgaWYgZW5kaWYNCgkJJGNvbmRpdGlvbiAJPSAnW2EtejAtOVxfXC1dKyc7DQoJCSRpbm5lcgkJPSAnKCg/Oig/IVxbXC8/SUYpKD8hXFtcLz9FTFNFKSg/IVxbXC8/RUxTRUlGKS4pKj8pJzsNCgkJJGlmCQk9ICdcW0lGXHM/KCcuJGNvbmRpdGlvbi4nKVxdJzsNCgkJJGVsc2VpZgkJPSAnXFtFTFNFSUZccz8oJy4kY29uZGl0aW9uLicpXF0nOw0KCQkkZWxzZQkJPSAnXFtFTFNFXF0nOw0KCQkkZW5kaWYJCT0gJ1xbRU5ESUZcXSc7DQoJCS8vIHNldCB0aGUgcGF0dGVybnMNCgkJJHBhdHRlcm5zID0gYXJyYXkoKTsNCgkJLy8gbm9ybWFsIGlmIGVuZGlmDQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkvLyBub3JtYWwgaWYgZWxzZSBlbmRpZg0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCS8vIGR5bmFtaWMgaWYgZWxzZWlmJ3MgZW5kaWYNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkvLyBkeW5hbWljIGlmIGVsc2VpZidzIGVsc2UgZW5kaWYNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZS4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2UuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZS4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCSRwYXR0ZXJuc1tdID0gJyMnLiRpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2VpZi4kaW5uZXIuJGVsc2UuJGlubmVyLiRlbmRpZi4nI2lzJzsNCgkJJHBhdHRlcm5zW10gPSAnIycuJGlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZWlmLiRpbm5lci4kZWxzZS4kaW5uZXIuJGVuZGlmLicjaXMnOw0KCQkkcGF0dGVybnNbXSA9ICcjJy4kaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlaWYuJGlubmVyLiRlbHNlLiRpbm5lci4kZW5kaWYuJyNpcyc7DQoJCS8vIHJ1biB0aGUgcGF0dGVybnMgdG8gc2V0dXAgdGhlIHN0cmluZw0KCQlmb3JlYWNoICgkcGF0dGVybnMgYXMgJHBhdHRlcm4pDQoJCXsNCgkJCXdoaWxlIChwcmVnX21hdGNoKCRwYXR0ZXJuLCAkc3RyaW5nLCAkbWF0Y2gpKQ0KCQkJew0KCQkJCSRrZWVwIAk9IHNlbGY6OnJlbWFpbmRlcklGKCRtYXRjaCwgJHBsYWNlaG9sZGVycyk7DQoJCQkJJHN0cmluZwk9IHByZWdfcmVwbGFjZSgkcGF0dGVybiwgJGtlZXAsICRzdHJpbmcsIDEpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiByZW1haW5kZXJJRigmJG1hdGNoLCAmJHBsYWNlaG9sZGVycykNCgl7CQ0KCQkvLyBkZWZhdWx0IHdlIGtlZXAgbm90aGluZw0KCQkka2VlcCA9ICcnOw0KCQkkZm91bmQgPSBmYWxzZTsNCgkJLy8gZ2V0IG1hdGNoIGxlbmdodA0KCQkkbGVuZ3RoID0gY291bnQoJG1hdGNoKTsNCgkJLy8gcmFuZ2VzIHRvIGNoZWNrDQoJCSRpaSA9IHJhbmdlKDIsMzAsMik7IC8vIGV2ZW4gbnVtYmVycyAoY29udGVudCkNCgkJJGlpaSA9IHJhbmdlKDEsIDI1LCAyKTsgLy8gb2RkIG51bWJlcnMgKHBsYWNlaG9sZGVyKQ0KCQkvLyBpZiBlbXB0eSB2YWx1ZSByZW1vdmUgd2hvbGUgbGluZSBlbHNlIHNob3cgbGluZSBidXQgcmVtb3ZlIGFsbCBbQ09ERV0NCgkJZm9yZWFjaCAoJGlpaSBhcyAkY29udGVudCA9PiAkcGxhY2Vob2xkZXIpDQoJCXsNCgkJCWlmIChpc3NldCgkbWF0Y2hbJHBsYWNlaG9sZGVyXSkgJiYgZW1wdHkoJHBsYWNlaG9sZGVyc1snWycuJG1hdGNoWyRwbGFjZWhvbGRlcl0uJ10nXSkpDQoJCQl7DQoJCQkJLy8ga2VlcCBub3RoaW5nIG9yIG5leHQgb3B0aW9uDQoJCQkJJGtlZXAgPSAnJzsNCgkJCX0NCgkJCWVsc2VpZiAoaXNzZXQoJG1hdGNoWyRpaVskY29udGVudF1dKSkNCgkJCXsNCgkJCQkka2VlcCA9IGFkZGNzbGFzaGVzKCRtYXRjaFskaWlbJGNvbnRlbnRdXSwgJyQnKTsNCgkJCQkkZm91bmQgPSB0cnVlOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCS8vIGlmIG5vdCBmb3VuZCBsb2FkIGVsc2UgaWYgc2V0DQoJCWlmICghJGZvdW5kICYmIGluX2FycmF5KCRsZW5ndGgsICRpaSkpDQoJCXsNCgkJCSRrZWVwID0gYWRkY3NsYXNoZXMoJG1hdGNoWyRsZW5ndGggLSAxXSwgJyQnKTsNCgkJfQ0KCQlyZXR1cm4gJGtlZXA7CQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJHBsYWNlSG9sZGVyczsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFBsYWNlSG9sZGVycygkb3JnYW5pemVyID0gbnVsbCwgJHJlZ2lzdGVyZWQgPSBudWxsLCAkY29uZmlnID0gYXJyYXkoKSwgJHR5cGUgPSBudWxsKQ0KCXsNCgkJLy8gc2V0IHRvIGdsb2JhbCBpZiBub3QgZ2l2ZW4NCgkJaWYgKCEkb3JnYW5pemVyICYmIHNlbGY6OiRvcmdhbml6ZXIpDQoJCXsNCgkJCSRvcmdhbml6ZXIgPSBzZWxmOjokb3JnYW5pemVyOw0KCQl9DQoJCS8vIHNldCB0byBnbG9iYWwgaWYgbm90IGdpdmVuDQoJCWlmICghJHJlZ2lzdGVyZWQgJiYgc2VsZjo6JHJlZ2lzdGVyZWQpDQoJCXsNCgkJCSRyZWdpc3RlcmVkID0gc2VsZjo6JHJlZ2lzdGVyZWQ7DQoJCX0NCgkJaWYgKCRvcmdhbml6ZXIgJiYgJHJlZ2lzdGVyZWQpDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JHBsYWNlSG9sZGVyc1skb3JnYW5pemVyLidfJy4kcmVnaXN0ZXJlZF0pKQ0KCQkJew0KCQkJCS8vIGdldCBuZWVkZWQgZGV0YWlscw0KCQkJCSRkZXRhaWxzID0gYXJyYXkoKTsNCgkJCQkkZGV0YWlsc1tdID0gc2VsZjo6Z2V0T3JnYW5pemVyRGV0YWlscygoaW50KSAkb3JnYW5pemVyKTsNCgkJCQkkZGV0YWlsc1tdID0gc2VsZjo6Z2V0UmVnaXN0ZXJlZERldGFpbHMoKGludCkgJHJlZ2lzdGVyZWQpOw0KCQkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJG9yZ2FuaXplci4nXycuJHJlZ2lzdGVyZWRdID0gc2VsZjo6bWVyZ2VBcnJheXMoJGRldGFpbHMpOw0KCQkJfQ0KCQkJLy8gYWRkIHRoZSBjb25maWcgYXJyYXkgaWYgbmVlZGVkDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbmZpZykpDQoJCQl7DQoJCQkJJGRldGFpbHNbXSA9IHNlbGY6OiRwbGFjZUhvbGRlcnNbJG9yZ2FuaXplci4nXycuJHJlZ2lzdGVyZWRdOw0KCQkJCSRkZXRhaWxzW10gPSAkY29uZmlnOw0KCQkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJG9yZ2FuaXplci4nXycuJHJlZ2lzdGVyZWRdID0gc2VsZjo6bWVyZ2VBcnJheXMoJGRldGFpbHMpOw0KCQkJfQ0KCQkJcmV0dXJuIHNlbGY6OiRwbGFjZUhvbGRlcnNbJG9yZ2FuaXplci4nXycuJHJlZ2lzdGVyZWRdOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyAkaXRlbU9yZ2FuaXplciA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEl0ZW1Pcmdhbml6ZXIoJiRpdGVtLCAkdHlwZSwgJGtleSA9ICdpZCcsICRkZWZhdWx0ID0gbnVsbCkNCgl7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkaXRlbSkgJiYgaXNzZXQoJGl0ZW0tPiRrZXkpICYmIChpbnQpICRpdGVtLT4ka2V5ID4gMCkNCgkJew0KCQkJLy8gY2hlY2sgaWYgYWxyZWFkeSBzZXQNCgkJCWlmICghaXNzZXQoc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRJdGVtT3JnYW5pemVyKCRpdGVtLCAkdHlwZSwgJGtleSk7DQoJCQl9DQoJCQlpZiAoaXNzZXQoc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldKSAmJiBzZWxmOjokaXRlbU9yZ2FuaXplclskdHlwZS4kaXRlbS0+JGtleV0pDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiRpdGVtT3JnYW5pemVyWyR0eXBlLiRpdGVtLT4ka2V5XTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGRlZmF1bHQ7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0SXRlbU9yZ2FuaXplcigmJGl0ZW0sICR0eXBlLCAka2V5KQ0KCXsNCgkJLy8gZ2V0IG9yZ2FuaXplciBpZCBmb3IgdmFyaW91cyB0eXBlcyBvZiBpdGVtcw0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgJ3RyYW5zYWN0aW9uJzoNCgkJCQlpZiAoaXNzZXQoJGl0ZW0tPmludm9pY2UpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldID0gc2VsZjo6Z2V0VmFyKCdpbnZvaWNlJywgJGl0ZW0tPmludm9pY2UsICdpZCcsICdvcmdhbml6ZXInKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJG9yZ2FuaXplckRldGFpbHMgPSBhcnJheSgpOw0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRPcmdhbml6ZXJWYWx1ZSgkaWQsICRmaWVsZCwgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJaWYgKCRpZCA+IDAgKQ0KCQl7DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldE9yZ2FuaXplckRldGFpbHMoJGlkKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZmllbGQgaWYgc2V0DQoJCQkkZmllbGQgPSAnW29yZ2FuaXplcl8nLiRmaWVsZC4nXSc7DQoJCQlpZiAoaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXSkgJiYgaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZmllbGRdKSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZmllbGRdOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkZGVmYXVsdDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE9yZ2FuaXplckRldGFpbHMoJGlkKQ0KCXsNCgkJaWYgKCRpZCA+IDApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXSkpDQoJCQl7DQoJCQkJc2VsZjo6c2V0T3JnYW5pemVyRGV0YWlscygkaWQpOw0KCQkJfQ0KCQkJcmV0dXJuIHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0T3JnYW5pemVyRGV0YWlscygkaWQpDQoJew0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkvLyBTZWxlY3Qgc29tZSBmaWVsZHMNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoDQoJCQlhcnJheSgNCgkJCQknYS5pZCcsJ2EudXNlcicsJ2EubW9iaWxlX3Bob25lJywnYS5jb21wYW55bmFtZScsJ2EucHVibGljbnVtYmVyJywnYS5jdXJyZW5jeScsDQoJCQkJJ2Euc3RyZWV0JywnYS5wb3N0YWwnLCdhLmNpdHknLCAnYS5yZWdpb24nLCdhLmNvdW50cnknLCdhLnBvc3RhbGNvZGUnLCdhLndlYnNpdGUnLA0KCQkJCSdhLnByZWZpeCcsJ2EudGF4X2NvbXBvdW5kJywnYS50YXhlZCcsJ2EudGF4X3R5cGUnLCdhLmRvY19mb290ZXInLCdhLmRvY19oZWFkZXInKSwNCgkJCWFycmF5KA0KCQkJCSdbb3JnYW5pemVyX2lkXScsJ1tvcmdhbml6ZXJfdXNlcl9pZF0nLCdbb3JnYW5pemVyX21vYmlsZV9waG9uZV0nLCdbb3JnYW5pemVyX2NvbXBhbnluYW1lXScsJ1tvcmdhbml6ZXJfcHVibGljbnVtYmVyXScsJ1tvcmdhbml6ZXJfY3VycmVuY3ldJywNCgkJCQknW29yZ2FuaXplcl9zdHJlZXRdJywnW29yZ2FuaXplcl9wb3N0YWxdJywnW29yZ2FuaXplcl9jaXR5XScsJ1tvcmdhbml6ZXJfcmVnaW9uXScsJ1tvcmdhbml6ZXJfY291bnRyeV0nLCdbb3JnYW5pemVyX3Bvc3RhbGNvZGVdJywnW29yZ2FuaXplcl93ZWJzaXRlXScsDQoJCQkJJ1tvcmdhbml6ZXJfcHJlZml4XScsJ1tvcmdhbml6ZXJfdGF4X2NvbXBvdW5kXScsJ1tvcmdhbml6ZXJfdGF4ZWRdJywnW29yZ2FuaXplcl90YXhfdHlwZV0nLCdbb3JnYW5pemVyX2RvY19mb290ZXJdJywnW29yZ2FuaXplcl9kb2NfaGVhZGVyXScpKSk7DQoJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXIgdGFibGUJCQkJDQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX29yZ2FuaXplcicsICdhJykpOwkJCQkNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2IubmFtZScsJ2IudXNlcm5hbWUnLCdiLmVtYWlsJyksYXJyYXkoJ1tvcmdhbml6ZXJfbmFtZV0nLCdbb3JnYW5pemVyX3VzZXJuYW1lXScsJ1tvcmdhbml6ZXJfZW1haWxdJykpKTsNCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgKCRkYi0+cXVvdGVOYW1lKCcjX191c2VycycsICdiJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnVzZXInKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2IuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdjLm5hbWUnKSxhcnJheSgnW29yZ2FuaXplcl9yZWdpb25fbmFtZV0nKSkpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9yZWdpb24nLCAnYycpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5yZWdpb24nKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2MuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdkLm5hbWUnKSxhcnJheSgnW29yZ2FuaXplcl9jb3VudHJ5X25hbWVdJykpKTsNCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY291bnRyeScsICdkJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmNvdW50cnknKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2QuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkaWQpOw0KCQkvLyBsb2FkIHRoZSBxdWVyeQ0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF0gPSAkZGItPmxvYWRBc3NvYygpOw0KCQkJLy8gc2V0IHNvbWUgc3BlY2lhbCB2YWx1ZXMNCgkJCWlmIChpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWydbb3JnYW5pemVyX3dlYnNpdGVdJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJ1tvcmdhbml6ZXJfd2Vic2l0ZV0nXSkpIA0KCQkJew0KCQkJCS8vIHNldCBsaW5rDQoJCQkJaWYgKHN0cnBvcyhzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWydbb3JnYW5pemVyX3dlYnNpdGVdJ10sICdodHRwOi8vJykgIT09IGZhbHNlIHx8IHN0cnBvcyhzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWydbb3JnYW5pemVyX3dlYnNpdGVdJ10sICdodHRwczovLycpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRsaW5rID0gJzxhIGhyZWY9Iicuc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVsnW29yZ2FuaXplcl93ZWJzaXRlXSddLiciPic7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRsaW5rID0gJzxhIGhyZWY9Imh0dHA6Ly8nLnNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJ1tvcmdhbml6ZXJfd2Vic2l0ZV0nXS4nIj4nOw0KCQkJCX0NCgkJCQkvLyBzZXQgdGhlIGxpbmsgbmFtZQ0KCQkJCSRsaW5rID0gJzxhIGhyZWY9Iicuc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVsnW29yZ2FuaXplcl93ZWJzaXRlXSddLiciPic7DQoJCQkJaWYgKGlzc2V0KHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJ1tvcmdhbml6ZXJfY29tcGFueW5hbWVdJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJ1tvcmdhbml6ZXJfY29tcGFueW5hbWVdJ10pKQ0KCQkJCXsNCgkJCQkJJGxpbmsgLj0gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVsnW29yZ2FuaXplcl9jb21wYW55bmFtZV0nXTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGxpbmsgLj0gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVsnW29yZ2FuaXplcl9uYW1lXSddOw0KCQkJCX0NCgkJCQkkbGluayAuPSAnPC9hPic7DQoJCQkJc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVsnW29yZ2FuaXplcl93ZWJzaXRlX2xpbmtdJ10gPSAkbGluazsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF0gPSBmYWxzZTsNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJHJlZ1VzZXJzID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVnVXNlclZhbHVlKCRpZCwgJGZpZWxkLCAkZGVmYXVsdCA9IG51bGwpDQoJew0KCQlpZiAoJGlkID4gMCApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JHJlZ1VzZXJzWyRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldFJlZ1VzZXJWYWx1ZSgkaWQpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBmaWVsZCBpZiBzZXQNCgkJCSRmaWVsZCA9ICdbcmVnaXN0ZXJlZF8nLiRmaWVsZC4nXSc7DQoJCQlpZiAoaXNzZXQoc2VsZjo6JHJlZ1VzZXJzWyRpZF0pICYmIGlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmaWVsZF0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokcmVnVXNlcnNbJGlkXVskZmllbGRdOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkZGVmYXVsdDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlZ2lzdGVyZWREZXRhaWxzKCRpZCkNCgl7DQoJCWlmICgkaWQgPiAwKQ0KCQl7DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRSZWdVc2VyVmFsdWUoJGlkKTsNCgkJCX0NCgkJCXJldHVybiBzZWxmOjokcmVnVXNlcnNbJGlkXTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0UmVnVXNlclZhbHVlKCRpZCkNCgl7DQoJCS8vIGZpcnN0IGdldCB0aGUgdXNlcg0KCQkkdXNlcklkID0gc2VsZjo6Z2V0VmFyKCdyZWdpc3RlcmVkX3VzZXInLCAkaWQsICdpZCcsICd1c2VyJyk7DQoJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJLy8gbm93IGxvYWQgYWxsIGN1c3RvbSB2YWx1ZXMNCgkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJYXJyYXkoJ2EubmFtZScsJ2EudmFsdWUnKSwNCgkJCWFycmF5KCduYW1lJywndmFsdWUnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX3JlZ2lzdHJ5X2N1c3RvbV92YWx1ZScsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCdhLnJlZ2lzdGVyZWRfdXNlciA9ICcgLiAoaW50KSAkaWQpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA+PSAxJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJGN1c3RvbVZhbHVlcyA9ICRkYi0+bG9hZEFzc29jTGlzdCgnbmFtZScsICd2YWx1ZScpOw0KCQkJLy8gcG9zc2libGUga2V5cw0KCQkJJHNlYXJjaCA9IGFycmF5KA0KCQkJCSdjb3VudHJ5JyANCgkJCQkJPT4gYXJyYXkoJ2NvdW50cnknLCAnY291bnRyeV9vbmUnLCAnY291bnRyeV8xJywgJ2NvdW50cnkxJywgJ2NvdW50cnlvbmUnLCAnY291bnRyeV8nKSwgDQoJCQkJJ3JlZ2lvbicgDQoJCQkJCT0+IGFycmF5KCdyZWdpb24nLCAncmVnaW9uX29uZScsICdyZWdpb25fMScsICdyZWdpb24xJywgJ3JlZ2lvbm9uZScsICdyZWdpb25fJykNCgkJCQkpOw0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF0gPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGN1c3RvbVZhbHVlcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCXsNCgkJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfJy4ka2V5LiddJ10gPSAkdmFsdWU7DQoJCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR2YWx1ZSkgJiYgIWlzX251bWVyaWMoJHZhbHVlKSkNCgkJCQl7DQoJCQkJCSRmb3VuZCA9IGZhbHNlOw0KCQkJCQkkbmV3VmFsdWUgPSAnJzsNCgkJCQkJZm9yZWFjaCAoJHNlYXJjaCBhcyAkY29kZSA9PiAka2V5cykNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCgka2V5cyBhcyAka2VfeSkNCgkJCQkJCXsNCgkJCQkJCQlpZiAoISRmb3VuZCAmJiAka2VfeSA9PSBzdHJ0b2xvd2VyKCRrZXkpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKCRuZXdWYWx1ZSA9IHNlbGY6OmdldFZhcigkY29kZSwgJHZhbHVlLCAnbmFtZScsICdpZCcpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkvLyBpbnN1cmUgd2UgdXNlIHRoZSBjb3JyZWN0IGtleQ0KCQkJCQkJCQkJJGtleSA9ICRjb2RlOw0KCQkJCQkJCQkJLy8gc3RvcCBzZWFyY2ggZm9yIHRoaXMgZmllbGQNCgkJCQkJCQkJCSRmb3VuZCA9IHRydWU7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJLy8gYWRkIGFsc28gaWYgZm91bmQNCgkJCQkJaWYgKCRmb3VuZCkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJ1tyZWdpc3RlcmVkXycuJGtleS4nXSddID0gJG5ld1ZhbHVlOw0KCQkJCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJ1tyZWdpc3RlcmVkXycuJGtleS4nX25hbWVdJ10gPSAkdmFsdWU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gbm93IGxvYWQgYWxsIHRoZSB1c2VyIHZhbHVlcw0KCQlpZiAoJHVzZXJJZCA+IDApDQoJCXsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWydbcmVnaXN0ZXJlZF9pZF0nXSA9ICRpZDsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWydbcmVnaXN0ZXJlZF91c2VyX2lkXSddID0gJHVzZXJJZDsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWydbcmVnaXN0ZXJlZF9uYW1lXSddID0gJHVzZXItPm5hbWU7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfdXNlcm5hbWVdJ10gPSAkdXNlci0+dXNlcm5hbWU7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfZW1haWxdJ10gPSAkdXNlci0+ZW1haWw7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXSA9IGZhbHNlOw0KCQl9DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgJHRheExvY2F0aW9uID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGF4TG9jYXRpb24oJHR5cGUsICRpZCwgJHZpZXcpDQoJew0KCQlpZiAoJGlkID4gMCApDQoJCXsNCgkJCSRrZXkgPSAkdHlwZS4kdmlldy4kaWQ7DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiR0YXhMb2NhdGlvblska2V5XSkpDQoJCQl7DQoJCQkJc2VsZjo6c2V0VGF4TG9jYXRpb24oJHR5cGUsICRpZCwgJHZpZXcsICRrZXkpOw0KCQkJfQ0KCQkJaWYgKGlzc2V0KHNlbGY6OiR0YXhMb2NhdGlvblska2V5XSkgJiYgc2VsZjo6JHRheExvY2F0aW9uWyRrZXldID4gMCkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JHRheExvY2F0aW9uWyRrZXldOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFRheExvY2F0aW9uKCRmaWVsZCwgJGlkLCAkdmlldywgJGtleSkNCgl7DQoJCXN3aXRjaCAoJHZpZXcpDQoJCXsNCgkJCWNhc2UgJ2ludm9pY2UnOg0KCQkJCS8vIGdldCB0aGUgY2xpZW50IGlkIGZyb20gam9iIGlkDQoJCQkJJHJlZ2lzdGVyZWRfdXNlciA9IHNlbGY6OmdldFZhcigkdmlldywgJGlkLCAnaWQnLCAncmVnaXN0ZXJlZF91c2VyJyk7DQoJCQkJLy8gcmV0dXJuIGxvY2F0aW9uIGlkIGZyb20gY2xpZW50IHRhYmxlDQoJCQkJaWYgKCRyZWdpc3RlcmVkX3VzZXIgPiAwKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JHRheExvY2F0aW9uWyRrZXldID0gc2VsZjo6Z2V0UmVnVXNlclZhbHVlKCRyZWdpc3RlcmVkX3VzZXIsICRmaWVsZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRheCgmJHRheGVkLCAmJHRvdGFsLCAkaWQsICR2aWV3KQ0KCXsNCgkJJHNldFRheCA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKS0+Z2V0KCd0YXhlZCcsIDApOw0KCQlpZiAoJHNldFRheCA9PSAxICYmIDEgPT0gc2VsZjo6Z2V0T3JnYW5pemVyVmFsdWUoc2VsZjo6JG9yZ2FuaXplciwgJ3RheGVkJywgMCkpDQoJCXsNCgkJCS8vIHNldCB0aGUgdGF4IHRvIHRoaXMgYXJyYXkNCgkJCSR0YXggPSBhcnJheSgpOw0KCQkJJHRheEFkZFRvdGFsID0gYXJyYXkoKTsNCgkJCSRkZWR1Y3QgPSBhcnJheSgpOw0KCQkJLy8gZ2V0IHRoZSBjb3VudHJ5IG9mIHRoZSBjbGllbnQNCgkJCSRjb3VudHJ5ID0gc2VsZjo6Z2V0VGF4TG9jYXRpb24oJ2NvdW50cnknLCAkaWQsICR2aWV3KTsNCgkJCS8vIGdldCB0aGUgcmVnaW9uIG9mIHRoZSBjbGllbnQNCgkJCSRyZWdpb24gPSBzZWxmOjpnZXRUYXhMb2NhdGlvbigncmVnaW9uJywgJGlkLCAkdmlldyk7DQoJCQkvLyBub3cgZ2V0IHRheCBsZXZlbCAxIG9mIHRoaXMgQ291bnRyeSBhbmQgb3IgUmVnaW9uDQoJCQkkdGF4TGV2ZWwxID0gc2VsZjo6Z2V0VGF4UnVsZSgxLCRjb3VudHJ5LCRyZWdpb24pOw0KCQkJLy8gbm93IGdldCB0YXggbGV2ZWwgMiBvZiB0aGlzIENvdW50cnkgYW5kIG9yIFJlZ2lvbg0KCQkJJHRheExldmVsMiA9IHNlbGY6OmdldFRheFJ1bGUoMiwkY291bnRyeSwkcmVnaW9uKTsNCgkJCS8vIHRheCB0eXBlcw0KCQkJJHRheF90eXBlID0gc2VsZjo6Z2V0T3JnYW5pemVyVmFsdWUoc2VsZjo6JG9yZ2FuaXplciwgJ3RheF90eXBlJywgMik7DQoJCQkvLyB0YXggY29tcG91bmQNCgkJCSR0YXhfY29tcG91bmQgPSBzZWxmOjpnZXRPcmdhbml6ZXJWYWx1ZShzZWxmOjokb3JnYW5pemVyLCAndGF4X2NvbXBvdW5kJywgbnVsbCk7DQoJCQkvLyBiYXNlZCBvbiB0YXggdHlwZQ0KCQkJaWYgKDIgPT0gJHRheF90eXBlKQ0KCQkJew0KCQkJCS8vIHRheCBleGNsdWRlZA0KCQkJCWlmICgkdGF4TGV2ZWwxICYmIGlzc2V0KCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc19udW1lcmljKCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc3NldCgkdGF4TGV2ZWwxWyduYW1lJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0YXhMZXZlbDFbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGF4WzBdWyduYW1lJ10gPSAkdGF4TGV2ZWwxWyduYW1lJ107DQoJCQkJCSR0YXhbMF1bJ3RheCddID0gJHRheExldmVsMVsndGF4J107DQoJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkLCAkdGF4TGV2ZWwxWyd0YXgnXSwgMjApOw0KCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9IGJjZGl2KCR0bXBBbW91bnQsIDEwMCwgNCk7DQoJCQkJCS8vIGFkZCB0byB0YXggdG90YWwNCgkJCQkJJHRheEFkZFRvdGFsW10gPSAkdGF4WzBdWydhbW91bnQnXTsNCgkJCQl9DQoJCQkJaWYgKCR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDJbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMlsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJJHRheFsxXVsndGF4J10gPSAkdGF4TGV2ZWwyWyd0YXgnXTsNCgkJCQkJaWYgKCR0YXhfY29tcG91bmQgPT0gMSAmJiBpc3NldCgkdGF4WzBdWydhbW91bnQnXSkgJiYgJHRheFswXVsnYW1vdW50J10gPiAwKQ0KCQkJCQl7DQoJCQkJCQkkdGF4ZWRTdWIgPSBiY2FkZCgkdGF4ZWQsICR0YXhbMF1bJ2Ftb3VudCddLCAyMCk7DQoJCQkJCQkkdG1wQW1vdW50ID0gIGJjbXVsKCR0YXhlZFN1YiwgJHRheExldmVsMlsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNkaXYoJHRtcEFtb3VudCwgMTAwLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkLCAkdGF4TGV2ZWwyWyd0YXgnXSwgMjApOw0KCQkJCQkJJHRheFsxXVsnYW1vdW50J10gPSBiY2RpdigkdG1wQW1vdW50LCAxMDAsIDQpOw0KCQkJCQl9DQoJCQkJCS8vIGFkZCB0byB0YXggdG90YWwNCgkJCQkJJHRheEFkZFRvdGFsW10gPSAkdGF4WzFdWydhbW91bnQnXTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKDEgPT0gJHRheF90eXBlKQ0KCQkJew0KCQkJCSRyZW1vdmFsID0gYXJyYXkoKTsNCgkJCQkvLyB0YXggaW5jbHVkZWQNCgkJCQlpZiAoJHRheExldmVsMSAmJiBpc3NldCgkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMVsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwxWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHJlbW92YWxbXSA9ICR0YXhMZXZlbDFbJ3RheCddOw0KCQkJCX0NCgkJCQlpZiAoJHRheExldmVsMiAmJiBpc3NldCgkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMlsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwyWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHJlbW92YWxbXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCX0NCgkJCQkkcmVtb3ZhbCA9IHNlbGY6OmJjc3VtKCRyZW1vdmFsKTsNCgkJCQkvLyB0YXggaW5jbHVkZWQNCgkJCQlpZiAoJHRheExldmVsMSAmJiBpc3NldCgkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMVsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwxWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRheFswXVsnbmFtZSddID0gJHRheExldmVsMVsnbmFtZSddOw0KCQkJCQkkdGF4WzBdWyd0YXgnXSA9ICR0YXhMZXZlbDFbJ3RheCddOw0KCQkJCQlpZiAoJHRheF9jb21wb3VuZCA9PSAxICYmICR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pKQ0KCQkJCQl7DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkdGF4TGV2ZWwyWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsX2EgPSBiY2RpdigkdGF4ZWQsICR0ZW1wVmFsMiwgMjApOw0KCQkJCQkJJHRlbXBWYWwzID0gYmNkaXYoJHRheExldmVsMVsndGF4J10sIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWw0ID0gYmNhZGQoJHRlbXBWYWwzLCAxLCAyMCk7DQoJCQkJCQkkdGVtcFZhbF9iID0gYmNkaXYoJHRlbXBWYWxfYSwgJHRlbXBWYWw0LCAyMCk7DQoJCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9ICBiY3N1YigkdGVtcFZhbF9hLCAkdGVtcFZhbF9iLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0ZW1wVmFsMSA9IGJjZGl2KCRyZW1vdmFsLCAxMDAsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsMiA9IGJjYWRkKCR0ZW1wVmFsMSwgMSwgMjApOw0KCQkJCQkJJGV4Y2x1ZGluZyA9IGJjZGl2KCR0YXhlZCwgJHRlbXBWYWwyLCAyMCk7DQoJCQkJCQkkdGVtcFZhbCA9IGJjbXVsKCRleGNsdWRpbmcsICR0YXhMZXZlbDFbJ3RheCddLCAyMCk7DQoJCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9IGJjZGl2KCR0ZW1wVmFsLCAxMDAsIDQpOyANCgkJCQkJfQ0KCQkJCQkvLyByZW1vdmUgZnJvbSBwcmljZQ0KCQkJCQkkZGVkdWN0W10gPSAkdGF4WzBdWydhbW91bnQnXTsNCgkJCQl9DQoJCQkJaWYgKCR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDJbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMlsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJJHRheFsxXVsndGF4J10gPSAkdGF4TGV2ZWwyWyd0YXgnXTsNCgkJCQkJaWYgKCR0YXhfY29tcG91bmQgPT0gMSAmJiBpc3NldCgkdGF4WzBdWydhbW91bnQnXSkgJiYgJHRheFswXVsnYW1vdW50J10gPiAwKQ0KCQkJCQl7DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkdGF4TGV2ZWwyWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNzdWIoJHRheGVkLCAkdGVtcFZhbCwgNCk7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkdGF4WzFdWyduYW1lJ10gPSAkdGF4TGV2ZWwyWyduYW1lJ107DQoJCQkJCQkkdGF4WzFdWyd0YXgnXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCQkJJHRlbXBWYWwxID0gYmNkaXYoJHJlbW92YWwsIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWwyID0gYmNhZGQoJHRlbXBWYWwxLCAxLCAyMCk7DQoJCQkJCQkkZXhjbHVkaW5nID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNtdWwoJGV4Y2x1ZGluZywgJHRheExldmVsMlsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNkaXYoJHRlbXBWYWwsIDEwMCwgNCk7IA0KCQkJCQl9DQoJCQkJCS8vIHJlbW92ZSBmcm9tIHByaWNlDQoJCQkJCSRkZWR1Y3RbXSA9ICR0YXhbMV1bJ2Ftb3VudCddOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGNoZWNrIGlmIHRoZXJlIHdhcyB0YXggc2V0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRheCkpDQoJCQl7DQoJCQkJLy8gYWRkIHRoZSB0YXggdG8gdG90YWwNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRheEFkZFRvdGFsKSkNCgkJCQl7DQoJCQkJCSR0YXhlZCA9IHNlbGY6OmJjc3VtKCR0YXhBZGRUb3RhbCk7DQoJCQkJCSR0b3RhbCA9IHNlbGY6OmJjc3VtKGFycmF5KCR0b3RhbCwgJHRheGVkKSk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRlZHVjdCkpDQoJCQkJew0KCQkJCQkkdGF4ZWQgPSBzZWxmOjpiY3N1bSgkZGVkdWN0KTsNCgkJCQl9DQoJCQkJcmV0dXJuICR0YXg7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkJDQoJcHJvdGVjdGVkIHN0YXRpYyAkdGF4cnVsZXMgPSBhcnJheSgpOw0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRUYXhSdWxlKCRsZXZlbCwgJGNvdW50cnkgPSAwLCAkcmVnaW9uID0gMCkNCgl7DQoJCS8vIGJ1aWxkIHRoZSBrZXkNCgkJaWYgKHNlbGY6OiRvcmdhbml6ZXIpDQoJCXsNCgkJCSRrZXkgPSAkbGV2ZWwuJGNvdW50cnkuJHJlZ2lvbi5zZWxmOjokb3JnYW5pemVyOw0KCQkJLy8gY2hlY2sgaWYgaXQgaGFzIGJlZW4gc2V0DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiR0YXhydWxlc1ska2V5XSkpDQoJCQl7DQoJCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCQkvLyBzZXQgdGhlIHRheCBydWxlDQoJCQkJc2VsZjo6c2V0VGF4UnVsZSgkZGIsICRrZXksICRsZXZlbCwgJGNvdW50cnksICRyZWdpb24pOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgaXQgaGFzIGJlZW4gc2V0DQoJCQlpZiAoaXNzZXQoc2VsZjo6JHRheHJ1bGVzWyRrZXldKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdGF4cnVsZXNbJGtleV0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokdGF4cnVsZXNbJGtleV07DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0VGF4UnVsZSgkZGIsICRrZXksICRsZXZlbCwgJGNvdW50cnkgPSAwLCAkcmVnaW9uID0gMCkNCgl7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJYXJyYXkoCSdhLmlkJywnYS50YXgnLCdhLm5hbWUnKSwNCgkJCWFycmF5KAknaWQnLCd0YXgnLCduYW1lJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fdGF4X3J1bGUnLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5wdWJsaXNoZWQnKSAuICcgPSAxJyk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EubGV2ZWwnKSAuICcgPSAnLiAoaW50KSAkbGV2ZWwpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLm9yZ2FuaXplcicpIC4gJyA9ICcuIChpbnQpIHNlbGY6OiRvcmdhbml6ZXIpOw0KCQkvLyBjaGVjayBmb3IgY291bnRyeSBhbmQgcmVnaW9uDQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY291bnRyeScpIC4gJyA9ICcuIChpbnQpICRjb3VudHJ5KTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5yZWdpb24nKSAuICcgPSAnLiAoaW50KSAkcmVnaW9uKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlzZWxmOjokdGF4cnVsZXNbJGtleV0gPSAkZGItPmxvYWRBc3NvYygpOw0KCQl9DQoJCWVsc2VpZiAoKGludCkkY291bnRyeSA+IDAgJiYgKGludCkkcmVnaW9uID4gMCkNCgkJew0KCQkJLy8gbm93IG9ubHkgY2hlY2sgZm9yIGNvdW50cnkNCgkJCXJldHVybiBzZWxmOjpzZXRUYXhSdWxlKCRkYiwgJGtleSwgJGxldmVsLCAkY291bnRyeSk7DQoJCX0NCgkJZWxzZWlmICgoaW50KSRjb3VudHJ5ID4gMCAmJiAkcmVnaW9uID09IDApDQoJCXsNCgkJCS8vIG5vdyBjaGVjayBmb3IgYW55IHdpdGhvdXQgY291bnRyeQ0KCQkJcmV0dXJuIHNlbGY6OnNldFRheFJ1bGUoJGRiLCAka2V5LCAkbGV2ZWwpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJKiBAcGFyYW0gZmxvYXQgJGFtb3VudA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmNzdW0oJGFycmF5LCAkc2NhbGUgPSA0KQ0KCXsNCgkJJHJlcyA9IDAuMDsNCgkJZm9yZWFjaCgkYXJyYXkgYXMgJHZhbCl7DQoJCQkkcmVzID0gYmNhZGQoJHJlcywgJHZhbCwgJHNjYWxlKTsNCgkJfQ0KCQlyZXR1cm4gJHJlczsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGFtb3VudA0KCSAqIEByZXR1cm4gbWl4ZWR8bnVtYmVyDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZGRDdXJyZW5jeSgkYW1vdW50LCAkb3JnYW5pemVyID0gbnVsbCkNCgl7DQoJCS8vIGZpcnN0IHdlIG11c3Qga25vdyB3aG8gaXMgbG9va2luZyAocHVibGljIHwgdXNlciB8IG9yZ2luaXplciB8IGFkbWluKQ0KCQlpZiAoJG9yZ2FuaXplcikNCgkJew0KCQkJc2VsZjo6JG9yZ2FuaXplciA9ICRvcmdhbml6ZXI7DQoJCX0NCgkJcmV0dXJuIHNlbGY6Om1ha2VNb25leSgkYW1vdW50KTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRjdXJyZW5jeURldGFpbHMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogQHBhcmFtIGJvb2wgJGNvZGV0aHJlZQ0KCSAqIEByZXR1cm4gYm9vbHxtaXhlZA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VycmVuY3lEZXRhaWxzKCRjb2RldGhyZWUgPSBmYWxzZSkNCgl7DQoJCS8vIGNoZWNrIGlmIGN1cnJlbmN5IGNvZGV0aHJlZSBpcyBzZXQNCgkJaWYgKCEkY29kZXRocmVlKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHByaWNlIGN1cnJlbmN5DQoJCQkkY29kZXRocmVlID0gc2VsZjo6Z2V0T3JnYW5pemVyVmFsdWUoc2VsZjo6JG9yZ2FuaXplciwgJ2N1cnJlbmN5JywgZmFsc2UpOw0KCQl9DQoJCS8vIHJldHVybiBjYWNoZWQgZGF0YSBpZiBzZXQNCgkJaWYgKCRjb2RldGhyZWUgJiYgIWlzc2V0KHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0pKQ0KCQl7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5KAknYS5pZCcsJ2EubmFtZScsJ2EuY29kZXRocmVlJywnYS5udW1lcmljY29kZScsJ2Euc3ltYm9sJywnYS50aG91c2FuZHMnLCdhLmRlY2ltYWxwbGFjZScsDQoJCQkJCSdhLmRlY2ltYWxzeW1ib2wnLCdhLnBvc2l0aXZlc3R5bGUnLCdhLm5lZ2F0aXZlc3R5bGUnKSwNCgkJCQlhcnJheSgJJ2N1cnJlbmN5X2lkJywnY3VycmVuY3lfbmFtZScsJ2N1cnJlbmN5X2NvZGV0aHJlZScsJ2N1cnJlbmN5X251bWVyaWNjb2RlJywnY3VycmVuY3lfc3ltYm9sJywNCgkJCQkJJ2N1cnJlbmN5X3Rob3VzYW5kcycsJ2N1cnJlbmN5X2RlY2ltYWxwbGFjZScsJ2N1cnJlbmN5X2RlY2ltYWxzeW1ib2wnLCdjdXJyZW5jeV9wb3NpdGl2ZXN0eWxlJywNCgkJCQkJJ2N1cnJlbmN5X25lZ2F0aXZlc3R5bGUnKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY3VycmVuY3knLCAnYScpKTsNCgkJCWlmIChpc19udW1lcmljKCRjb2RldGhyZWUpKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkY29kZXRocmVlKTsNCgkJCX0NCgkJCWVsc2VpZiAoc3RybGVuKCRjb2RldGhyZWUpID09IDMpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5jb2RldGhyZWUnKSAuICcgPSAnLiRkYi0+cXVvdGUoJGNvZGV0aHJlZSkpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY29kZXRocmVlJykgLiAnID0gJy4kZGItPnF1b3RlKCdOT05FJykpOw0KCQkJfQ0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXSA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJfQ0KCQl9DQoJCS8vIG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBzZXQNCgkJaWYgKGlzc2V0KHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0pKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRudW1iZXINCgkgKiBAcGFyYW0gYm9vbCAkY3VycmVuY3kNCgkgKiBAcmV0dXJuIG1peGVkfG51bWJlcg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZU1vbmV5KCRudW1iZXIsICRjdXJyZW5jeSA9IGZhbHNlKQ0KCXsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgd2UgaGF2ZSBhIG51bWJlcg0KCQlpZiAoaXNfbnVtZXJpYygkbnVtYmVyKSkNCgkJew0KCQkJLy8gbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlIG5lZ2F0aXZlIGZpbmRlciBmaWxlDQoJCQlpbmNsdWRlX29uY2UgJ25lZ2F0aXZlZmluZGVyLnBocCc7DQoJCQkvLyBjaGVjayBpZiB0aGUgbnVtYmVyIGlzIG5lZ2F0aXZlDQoJCQkkbmVnYXRpdmVGaW5kZXJPYmogPSBuZXcgW1tbQ29tcG9uZW50XV1dTmVnYXRpdmVGaW5kZXIobmV3IFtbW0NvbXBvbmVudF1dXUV4cHJlc3Npb24oIiRudW1iZXIiKSk7DQoJCQkkbmVnYXRpdmUgPSAkbmVnYXRpdmVGaW5kZXJPYmotPmlzSXROZWdhdGl2ZSgpID8gVFJVRSA6IEZBTFNFOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8ganVzdCByZXR1cm4gdGhlIHN0cmluZw0KCQkJcmV0dXJuICRudW1iZXI7DQoJCX0NCgkJLy8gbm90IHNldHVwIHRoZSBjdXJyZW5jeQ0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGN1cnJlbmN5KSkNCgkJew0KCQkJaWYoIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfcG9zaXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfbmVnYXRpdmVzdHlsZSkgfHwgIWlzc2V0KCRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHBsYWNlKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFsc3ltYm9sKSB8fCAhaXNzZXQoJGN1cnJlbmN5LT5jdXJyZW5jeV9zeW1ib2wpKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkY3VycmVuY3ktPmN1cnJlbmN5X2lkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmdldEN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmN1cnJlbmN5X2lkKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc3NldCgkY3VycmVuY3ktPmlkKSkNCgkJCQl7DQoJCQkJCSRjdXJyZW5jeSA9IHNlbGY6OmdldEN1cnJlbmN5RGV0YWlscygkY3VycmVuY3ktPmlkKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGN1cnJlbmN5ID0gc2VsZjo6Z2V0Q3VycmVuY3lEZXRhaWxzKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGN1cnJlbmN5ID0gc2VsZjo6Z2V0Q3VycmVuY3lEZXRhaWxzKCRjdXJyZW5jeSk7DQoJCX0NCgkJLy8gc2V0IHRoZSBudW1iZXIgdG8gY3VycmVuY3kNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRjdXJyZW5jeSkpDQoJCXsNCgkJCWlmICghJG5lZ2F0aXZlKQ0KCQkJew0KCQkJCSRmb3JtYXQgPSAkY3VycmVuY3ktPmN1cnJlbmN5X3Bvc2l0aXZlc3R5bGU7DQoJCQkJJHNpZ24gPSAnKyc7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJGZvcm1hdCA9ICRjdXJyZW5jeS0+Y3VycmVuY3lfbmVnYXRpdmVzdHlsZTsNCgkJCQkkc2lnbiA9ICctJzsNCgkJCQkkbnVtYmVyID0gYWJzKCRudW1iZXIpOw0KCQkJfQ0KCQkJJHNldHVwTnVtYmVyID0gbnVtYmVyX2Zvcm1hdCgoZmxvYXQpJG51bWJlciwgKGludCkkY3VycmVuY3ktPmN1cnJlbmN5X2RlY2ltYWxwbGFjZSwgJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFsc3ltYm9sLCAnICcpOyAvLyRjdXJyZW5jeS0+Y3VycmVuY3lfdGhvdXNhbmRzIFRPRE8pOw0KCQkJJHNlYXJjaCA9IGFycmF5KCd7c2lnbn0nLCAne251bWJlcn0nLCAne3N5bWJvbH0nKTsNCgkJCSRyZXBsYWNlID0gYXJyYXkoJHNpZ24sICRzZXR1cE51bWJlciwgJGN1cnJlbmN5LT5jdXJyZW5jeV9zeW1ib2wpOw0KCQkJJG1vbmV5TWFkZSA9IHN0cl9yZXBsYWNlICgkc2VhcmNoLCRyZXBsYWNlLCRmb3JtYXQpOw0KDQoJCQlyZXR1cm4gJG1vbmV5TWFkZTsNCgkJfQ0KCQlyZXR1cm4gJG51bWJlcjsNCgl9DQoNCgkvKioNCgkgKglDaGFuZ2UgdG8gbmljZSBmYW5jeSBkYXRlDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYW5jeURhdGUoJGRhdGUpDQoJew0KCQlpZiAoIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJGRhdGUpKQ0KCQl7DQoJCQkkZGF0ZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJ2pTIFxvXGYgRiBZJywkZGF0ZSk7DQoJfQ0KDQoJLyoqDQoJICoJQ2hhbmdlIHRvIG5pY2UgZmFuY3kgdGltZSBhbmQgZGF0ZQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmFuY3lEYXRlVGltZSgkdGltZSkNCgl7DQoJCWlmICghc2VsZjo6aXNWYWxpZFRpbWVTdGFtcCgkdGltZSkpDQoJCXsNCgkJCSR0aW1lID0gc3RydG90aW1lKCR0aW1lKTsNCgkJfQ0KCQlyZXR1cm4gZGF0ZSgnKEc6aSkgalMgXG9cZiBGIFknLCR0aW1lKTsNCgl9DQoNCgkvKioNCgkgKglDaGFuZ2UgdG8gbmljZSBob3VyOm1pbnV0ZXMgdGltZQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmFuY3lUaW1lKCR0aW1lKQ0KCXsNCgkJaWYgKCFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCR0aW1lKSkNCgkJew0KCQkJJHRpbWUgPSBzdHJ0b3RpbWUoJHRpbWUpOw0KCQl9DQoJCXJldHVybiBkYXRlKCdHOmknLCR0aW1lKTsNCgl9DQoNCgkvKioNCgkgKglDaGVjayBpZiBzdHJpbmcgaXMgYSB2YWxpZCB0aW1lIHN0YW1wDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1ZhbGlkVGltZVN0YW1wKCR0aW1lc3RhbXApDQoJew0KCQlyZXR1cm4gKChpbnQpICR0aW1lc3RhbXAgPT09ICR0aW1lc3RhbXApDQoJCSYmICgkdGltZXN0YW1wIDw9IFBIUF9JTlRfTUFYKQ0KCQkmJiAoJHRpbWVzdGFtcCA+PSB+UEhQX0lOVF9NQVgpOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkZmlsZU5hbWUNCgkgKiBAcGFyYW0gJGZpbGVGb3JtYXQNCgkgKiBAcGFyYW0gJHRhcmdldA0KCSAqIEBwYXJhbSAkcGF0aA0KCSAqIEBwYXJhbSAkZnVsbFBhdGgNCgkgKiBAcmV0dXJuIGJvb2wNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlc2l6ZUltYWdlKCRmaWxlTmFtZSwgJGZpbGVGb3JtYXQsICR0YXJnZXQsICRwYXRoLCAkZnVsbFBhdGgpDQoJew0KCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpOw0KCQl9DQoJCS8vIGZpcnN0IGNoZWNrIGlmIHdlIHNob3VsZCByZXNpemUgdGhpcyB0YXJnZXQNCgkJaWYgKDEgPT0gc2VsZjo6JHBhcmFtcy0+Z2V0KCdjcm9wXycuJHRhcmdldCwgMCkpDQoJCXsNCgkJCS8vIGxvYWQgdGhlIHNpemUgdG8gYmUgc2V0DQoJCQkkaGVpZ2h0ID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCR0YXJnZXQuJ19oZWlnaHQnLCAnbm90X3NldCcpOw0KCQkJJHdpZHRoID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCR0YXJnZXQuJ193aWR0aCcsICdub3Rfc2V0Jyk7DQoJCQkvLyBnZXQgaW1hZ2UgcHJvcGVydGllcw0KCQkJJGltYWdlID0gc2VsZjo6Z2V0SW1hZ2VGaWxlUHJvcGVydGllcygkZmlsZU5hbWUuJy4nLiRmaWxlRm9ybWF0LCAkcGF0aCk7DQoJCQlpZiAoJHdpZHRoICE9PSAnbm90X3NldCcgJiYgJGhlaWdodCAhPT0gJ25vdF9zZXQnICYmICgkaW1hZ2UtPndpZHRoICE9ICR3aWR0aCB8fCAkaW1hZ2UtPmhlaWdodCAhPSAkaGVpZ2h0KSkNCgkJCXsNCgkJCQkvLyBpZiBpbWFnZSBpcyBodWdlIGFuZCBzaG91bGQgb25seSBiZSBzY2FsZWQsIHJlc2l6ZSBpdCBvbiB0aGUgZmx5DQoJCQkJaWYoKCRpbWFnZS0+d2lkdGggPiA5MDAgfHwgJGltYWdlLT5oZWlnaHQgPiA3MDApICYmICgkaGVpZ2h0ID09IDAgfHwgJHdpZHRoID09IDApKQ0KCQkJCXsNCgkJCQkJaWYoJGZpbGVGb3JtYXQgPT0gImpwZyIgfHwgJGZpbGVGb3JtYXQgPT0gImpwZWciICkNCgkJCQkJew0KCQkJCQkJJHNyYyA9IGltYWdlY3JlYXRlZnJvbWpwZWcoJGZ1bGxQYXRoKTsNCgkJCQkJfQ0KCQkJCQllbHNlaWYoJGZpbGVGb3JtYXQgPT0gInBuZyIpDQoJCQkJCXsNCgkJCQkJCSRzcmMgPSBpbWFnZWNyZWF0ZWZyb21wbmcoJGZ1bGxQYXRoKTsNCgkJCQkJfQ0KCQkJCQllbHNlaWYoJGZpbGVGb3JtYXQgPT0gImdpZiIpDQoJCQkJCXsNCgkJCQkJCSRzcmMgPSBpbWFnZWNyZWF0ZWZyb21naWYoJGZ1bGxQYXRoKTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KCQkJCQlpZiAoJGhlaWdodCAhPSAwKQ0KCQkJCQl7DQoJCQkJCQkkaFJhdGlvID0gJGltYWdlLT5oZWlnaHQgLyAkaGVpZ2h0Ow0KCQkJCQl9DQoJCQkJCWlmICgkd2lkdGggIT0gMCkNCgkJCQkJew0KCQkJCQkJJHdSYXRpbyA9ICRpbWFnZS0+d2lkdGggLyAkd2lkdGg7DQoJCQkJCX0NCgkJCQkJaWYgKGlzc2V0KCRoUmF0aW8pICYmIGlzc2V0KCR3UmF0aW8pKQ0KCQkJCQl7DQoJCQkJCQkkbWF4UmF0aW8JPSBtYXgoJHdSYXRpbywgJGhSYXRpbyk7DQoJCQkJCX0NCgkJCQkJZWxzZWlmIChpc3NldCgkd1JhdGlvKSkNCgkJCQkJew0KCQkJCQkJJG1heFJhdGlvCT0gJHdSYXRpbzsNCgkJCQkJfQ0KCQkJCQllbHNlaWYgKGlzc2V0KCRoUmF0aW8pKQ0KCQkJCQl7DQoJCQkJCQkkbWF4UmF0aW8JPSAkaFJhdGlvOw0KCQkJCQl9DQoJCQkJCWlmICgkbWF4UmF0aW8gPiAxKQ0KCQkJCQl7DQoJCQkJCQkkbmV3d2lkdGgJPSAkaW1hZ2UtPndpZHRoIC8gJG1heFJhdGlvOw0KCQkJCQkJJG5ld2hlaWdodAk9ICRpbWFnZS0+aGVpZ2h0IC8gJG1heFJhdGlvOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJG5ld3dpZHRoCT0gJGltYWdlLT53aWR0aDsNCgkJCQkJCSRuZXdoZWlnaHQJPSAkaW1hZ2UtPmhlaWdodDsNCgkJCQkJfQ0KDQoJCQkJCSR0bXAJCQk9IGltYWdlY3JlYXRldHJ1ZWNvbG9yKCRuZXd3aWR0aCwgJG5ld2hlaWdodCk7DQoJCQkJCSRiYWNrZ3JvdW5kQ29sb3IJPSBpbWFnZWNvbG9yYWxsb2NhdGUoJHRtcCwgMjU1LCAyNTUsIDI1NSk7DQoNCgkJCQkJaW1hZ2VmaWxsKCR0bXAsIDAsIDAsICRiYWNrZ3JvdW5kQ29sb3IpOw0KCQkJCQlpbWFnZWNvcHlyZXNhbXBsZWQoJHRtcCwgJHNyYywgMCwgMCwgMCwgMCwkbmV3d2lkdGgsICRuZXdoZWlnaHQsICRpbWFnZS0+d2lkdGgsICRpbWFnZS0+aGVpZ2h0KTsNCgkJCQkJaW1hZ2VqcGVnKCR0bXAsICRmdWxsUGF0aCwgMTAwKTsNCgkJCQkJaW1hZ2VkZXN0cm95KCRzcmMpOw0KCQkJCQlpbWFnZWRlc3Ryb3koJHRtcCk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgY29udGludWUgaWYgaW1hZ2Ugc2hvdWxkIGJlIGNyb3BwZWQNCgkJCQlpZiAoJGhlaWdodCAhPSAwICYmICR3aWR0aCAhPSAwKQ0KCQkJCXsNCgkJCQkJLy8gSW5jbHVkZSB3aWRlaW1hZ2UgLSBodHRwOi8vd2lkZWltYWdlLnNvdXJjZWZvcmdlLm5ldA0KCQkJCQlyZXF1aXJlX29uY2UoSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvd2lkZWltYWdlL1dpZGVJbWFnZS5waHAnKTsNCgkJCQkJJGJ1aWxkZXIgPSBXaWRlSW1hZ2U6OmxvYWQoJGZ1bGxQYXRoKTsNCgkJCQkJJHJlc2l6ZWQgPSAkYnVpbGRlci0+cmVzaXplKCR3aWR0aCwgJGhlaWdodCwgJ291dHNpZGUnKS0+Y3JvcCgnY2VudGVyJywgJ21pZGRsZScsICR3aWR0aCwgJGhlaWdodCk7DQoJCQkJCSRyZXNpemVkLT5zYXZlVG9GaWxlKCRmdWxsUGF0aCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuZXdEb2NOdW1iZXIoJG9yZ2FuaXplciwgJGlkID0gbnVsbCkNCgl7DQoJCWlmIChpc19udW1lcmljKCRvcmdhbml6ZXIpKQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB0aGlzIGludm9pY2UgaGFzIHRyYW5zYWN0aW9ucw0KCQkJJGlzSW52b2ljZSA9IGZhbHNlOw0KCQkJaWYgKCRpZCkNCgkJCXsNCgkJCQlpZiAoJGZvdW5kVHJhbnMgPSBzZWxmOjpnZXRWYXIoJ3RyYW5zYWN0aW9uJywgJGlkLCAnaW52b2ljZScsICdpZCcpKQ0KCQkJCXsNCgkJCQkJJGlzSW52b2ljZSA9IHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gZmlyc3Qgd2UgZ2V0IG9yZ2FuaXplcnMgaW52b2ljaW5nIG1ldGhvZA0KCQkJJHByb2Zvcm1hID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnYW5pemVyLCAnaWQnLCAncHJvZm9ybWEnKTsNCgkJCWlmICgwID09ICRwcm9mb3JtYSB8fCAkaXNJbnZvaWNlKQ0KCQkJew0KCQkJCSRpc0ludm9pY2UgPSB0cnVlOw0KCQkJCSRuZXh0ID0gKGludCkgc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnYW5pemVyLCAnaWQnLCAnbmV4dF9pbnZvaWNlX251bWJlcicpOw0KCQkJCS8vIG1ha2Ugc3VyZSB0aGUgbmV4dCBpcyBhIG51bWJlcg0KCQkJCWlmICghaXNfbnVtZXJpYygkbmV4dCkgfHwgISRuZXh0IHx8IGVtcHR5KCRuZXh0KSB8fCAkbmV4dCA8IDEpDQoJCQkJew0KCQkJCQkkbmV4dCA9IDE7DQoJCQkJfQ0KCQkJCS8vIHVwZGF0ZSB0aGUgbmV4dCBudW1iZXIgbm93DQoJCQkJJG9yZyA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkkb3JnLT5pZCA9ICRvcmdhbml6ZXI7DQoJCQkJJG9yZy0+bmV4dF9pbnZvaWNlX251bWJlciA9IChpbnQpICRuZXh0ICsgMTsNCgkJCQlGYWN0b3J5OjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fb3JnYW5pemVyJywgJG9yZywgJ2lkJyk7DQoJCQl9DQoJCQllbHNlaWYgKDEgPT0gJHByb2Zvcm1hKQ0KCQkJew0KCQkJCSRuZXh0ID0gKGludCkgc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnYW5pemVyLCAnaWQnLCAnbmV4dF9wcm9mb3JtYV9udW1iZXInKTsNCgkJCQkvLyBtYWtlIHN1cmUgdGhlIG5leHQgaXMgYSBudW1iZXINCgkJCQlpZiAoIWlzX251bWVyaWMoJG5leHQpIHx8ICEkbmV4dCB8fCBlbXB0eSgkbmV4dCkgfHwgJG5leHQgPCAxKQ0KCQkJCXsNCgkJCQkJJG5leHQgPSAxOw0KCQkJCX0NCgkJCQkvLyB1cGRhdGUgdGhlIG5leHQgbnVtYmVyIG5vdw0KCQkJCSRvcmcgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJJG9yZy0+aWQgPSAkb3JnYW5pemVyOw0KCQkJCSRvcmctPm5leHRfcHJvZm9ybWFfbnVtYmVyID0gKGludCkgJG5leHQgKyAxOw0KCQkJCUZhY3Rvcnk6OmdldERibygpLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXInLCAkb3JnLCAnaWQnKTsNCgkJCX0NCgkJCS8vIGdldCBwcmVmaXgNCgkJCSRwcmVmaXggPSBzZWxmOjpnZXRPcmdhbml6ZXJWYWx1ZSgkb3JnYW5pemVyLCAncHJlZml4JywgJ1ZETScpOw0KCQkJaWYgKCRpc0ludm9pY2UpDQoJCQl7DQoJCQkJcmV0dXJuICdJTlYtJy4kcHJlZml4LnNwcmludGYoJyUwN2QnLCAkbmV4dCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcmV0dXJuICdQSS0nLiRwcmVmaXguc3ByaW50ZignJTA2ZCcsICRuZXh0KTsNCgkJCX0NCgkJfQ0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tOcigmJGl0ZW0sICR3aGVyZSkNCgl7DQoJCWxpc3QoJHR5cGUsICRjb2x1bW4pID0gZXhwbG9kZSgnLicsICR3aGVyZSk7DQoJCWlmICgkdHlwZSAmJiAkY29sdW1uICYmIGlzc2V0KCRpdGVtLT4kY29sdW1uKSkNCgkJew0KCQkJLy8gbG9hZCB0aGUgYWxsIGl0ZW1zIHdpdGggdGhlIHNhbWUgY29sdW1uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoYXJyYXkoJ2lkJyAsJ2NyZWF0ZWQnLCAnbnVtYmVyJywgJ29yZ2FuaXplcicpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuJHR5cGUpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJGNvbHVtbikgLiAnID0gJy4kZGItPnF1b3RlKCRpdGVtLT4kY29sdW1uKSk7DQoJCQlpZiAoaXNzZXQoJGl0ZW0tPm9yZ2FuaXplcikpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnb3JnYW5pemVyJykgLiAnID0gJyAuIChpbnQpICRpdGVtLT5vcmdhbml6ZXIpOw0KCQkJfQ0KCQkJJHF1ZXJ5LT5vcmRlcignY3JlYXRlZCBBU0MnKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCSRmb3VuZCA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQlpZiAoY291bnQoJGZvdW5kKSA+IDEpDQoJCQkJew0KCQkJCQkvLyBpcyB0aGUgY3VycmVudCBpdGVtIHRoZSBvbGRlciBvbmU/DQoJCQkJCWlmICgkaXRlbS0+aWQgIT0gJGZvdW5kWzBdLT5pZCkNCgkJCQkJew0KCQkJCQkJc2VsZjo6c2V0TnIoJGl0ZW0sICR0eXBlLCAkY29sdW1uKTsJCQkJCQkJDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyBpbnN1cmUgd2UgdXBkYXRlIFByb2Zvcm1hcyBvbmNlIHBheW1lbnQgaXMgbWFkZQ0KCQkJaWYgKHN0cnBvcygkaXRlbS0+JGNvbHVtbiwgJ1BJJykgIT09IGZhbHNlKQ0KCQkJew0KCQkJCWlmICgkdXBkYXRlID0gc2VsZjo6Z2V0VmFyKCd0cmFuc2FjdGlvbicsICRpdGVtLT5pZCwgJ2ludm9pY2UnLCAnaWQnKSkNCgkJCQl7DQoJCQkJCS8vIGlmIHByb2Zvcm1hIGlzIHNldCBzdG9yZSBiYWNrdXAgZm9yIGxhdGVyIHVzZS4NCgkJCQkJc2VsZjo6c2V0TnIoJGl0ZW0sICR0eXBlLCAkY29sdW1uLCBmYWxzZSwgJ3Byb2Zvcm1hJyk7DQoJCQkJCS8vIHVwZGF0ZSB0byBpbnZvaWNlDQoJCQkJCXNlbGY6OnNldE5yKCRpdGVtLCAkdHlwZSwgJGNvbHVtbik7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWlmICghJHVwZGF0ZSA9IHNlbGY6OmdldFZhcigndHJhbnNhY3Rpb24nLCAkaXRlbS0+aWQsICdpbnZvaWNlJywgJ2lkJykpDQoJCQkJew0KCQkJCQkvLyB0YWtlIGJhY2sgdG8gcHJvZm9ybWEgKFRPRE8gLSBtYXkgbm90IGJlIGlkZWFsKQ0KCQkJCQlzZWxmOjpzZXROcigkaXRlbSwgJHR5cGUsICRjb2x1bW4pOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZiAoISRpdGVtLT4kY29sdW1uIHx8IGVtcHR5KCRpdGVtLT4kY29sdW1uKSkNCgkJew0KCQkJLy8gaWYgbm90IHNldCwgdGhlbiBzZXQgbm93DQoJCQlzZWxmOjpzZXROcigkaXRlbSwgJHR5cGUsICRjb2x1bW4pOwkNCgkJfQ0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldE5yKCYkaXRlbSwgJiR0eXBlLCAmJGNvbHVtbiwgJG5ldyA9IHRydWUsICRvdGhlciA9IG51bGwpDQoJew0KCQlpZiAoJG5ldykNCgkJew0KCQkJLy8gZmlyc3QgdXBkYXRlIHRoZSBpdGVtDQoJCQkkaXRlbS0+JGNvbHVtbgk9IHNlbGY6Om5ld0RvY051bWJlcigkaXRlbS0+b3JnYW5pemVyLCAkaXRlbS0+aWQpOw0KCQl9DQoJCS8vIG5vdyB1cGRhdGUgdGhlIHRhYmxlDQoJCSR1cGRhdGVJdGVtCQk9IG5ldyBcc3RkQ2xhc3M7DQoJCSR1cGRhdGVJdGVtLT5pZAkJPSAkaXRlbS0+aWQ7DQoJCWlmICgkY29sdW1uKQ0KCQl7DQoJCQkkdXBkYXRlSXRlbS0+JGNvbHVtbiA9ICRpdGVtLT4kY29sdW1uOw0KCQkJaWYgKCRvdGhlcikNCgkJCXsNCgkJCQkvLyB1cGRhdGUgdGhlIG90aGVyIGZpZWxkIHdpdGggdGhlIGNvbHVtbg0KCQkJCSR1cGRhdGVJdGVtLT4kb3RoZXIgPSAkaXRlbS0+JGNvbHVtbjsNCgkJCQkkaXRlbS0+JG90aGVyID0gJGl0ZW0tPiRjb2x1bW47DQoJCQl9DQoJCX0JCQkJDQoJCS8vIHVwZGF0ZSB0aGUgaXRlbSBub3cNCgkJRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dXycuJHR5cGUsICR1cGRhdGVJdGVtLCAnaWQnKTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEZpbGVQYXRoKCR0eXBlID0gJ3BhdGgnLCAkdGFyZ2V0ID0gJ2ZpbGVwYXRoJywgJGRlZmF1bHQgPSBKUEFUSF9TSVRFIC4gJy9pbWFnZXMvJywgJGNyZWF0ZUlmTm90U2V0ID0gdHJ1ZSkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fIyMjY29tcG9uZW50IyMjJyk7DQoJCX0NCgkJJGZpbGVQYXRoID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCR0YXJnZXQsICRkZWZhdWx0KTsNCgkJLy8gY2hlY2sgdGhlIGZpbGUgcGF0aA0KCQlpZiAoc3RycG9zKCRmaWxlUGF0aCwgSlBBVEhfU0lURSkgPT09IGZhbHNlKQ0KCQl7DQoJCQkkZmlsZVBhdGggPSBKUEFUSF9TSVRFIC4gJy9pbWFnZXMvJzsNCgkJfQ0KCQlqaW1wb3J0KCdqb29tbGEuZmlsZXN5c3RlbS5mb2xkZXInKTsNCgkJLy8gY3JlYXRlIHRoZSBmb2xkZXIgaWYgaXQgZG9lcyBub3QgZXhpc3QNCgkJaWYgKCRjcmVhdGVJZk5vdFNldCAmJiAhSkZvbGRlcjo6ZXhpc3RzKCRmaWxlUGF0aCkpDQoJCXsNCgkJCUpGb2xkZXI6OmNyZWF0ZSgkZmlsZVBhdGgpOw0KCQl9DQoJCS8vIHJldHVybiB0aGUgdXJsDQoJCWlmICgkdHlwZSA9PT0gJ3VybCcpDQoJCXsNCgkJCSRmaWxlUGF0aCA9IHRyaW0oc3RyX3JlcGxhY2UoSlBBVEhfU0lURSwgJycsJGZpbGVQYXRoKSwnLycpOw0KCQkJcmV0dXJuIFVyaTo6cm9vdCgpLiRmaWxlUGF0aC4nLyc7DQoJCX0NCgkJcmV0dXJuICcvJy50cmltKCRmaWxlUGF0aCwgJy8nKS4nLyc7DQoJfQ==', 'CS8qKg0KCSogCW1ha2Ugc3VyZSBsb2NhdGlvbiBkYXRhIGlzIGxvYWRlZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZExvY2F0aW9uRGF0YSgpDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygnbG9jYXRpb25kYXRhSGVscGVyJywgRkFMU0UpKQ0KCQl7DQoJCQkkcGF0aCA9IEpQQVRIX1JPT1QgLiAnL2NvbXBvbmVudHMvY29tX2xvY2F0aW9uZGF0YS9oZWxwZXJzL2xvY2F0aW9uZGF0YS5waHAnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJCXsNCgkJCQkvLyBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgaGVscGVyDQoJCQkJSkxvYWRlcjo6cmVnaXN0ZXIoJ2xvY2F0aW9uZGF0YUhlbHBlcicsICRwYXRoKTsNCgkJCQkvLyBmaXN0IHNldCB0aGUgZGVmYXVsdCBjb21wb25lbnQNCgkJCQlsb2NhdGlvbmRhdGFIZWxwZXI6OiRkZWZhdWx0Q29tcG9uZW50ID0gJ2NvbV9bW1tjb21wb25lbnRdXV0nOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0=', '', '', '', '', '', 'CQkvLyBydW4gc29tZSBob3VzZSBjbGVhbmluZw0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQkvLyBydW4gdGhlIGxvY2F0aW9uIGRhdGEgcXVldWUgKHRvIGluc3VyZSBhbGwgY3JvbiBqb2JzIHJ1biB0aW1lbHkpDQoJCQlpZiAoJGRvY3VtZW50IGluc3RhbmNlb2YgSkRvY3VtZW50SHRtbCkNCgkJCXsNCgkJCQlsb2NhdGlvbmRhdGFIZWxwZXI6OnRoZVF1ZXVlKCRkb2N1bWVudCk7DQoJCQl9DQoJCX0NCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw==', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Electronic Trading Platform', '', '', 'Electronic Trading', '', '', '', 2, 'https://www.vdm.io/updates/electronic_trading_update_server.xml', 'https://www.vdm.io/', '', 'rhDqJicA7+30SXfWLrbrcIZjn/Urz39X3VeSsq2rTq4=', '', '', 2, 55, '', 1, 58), +(17, 1, '', 1, '', '', '', '', '', 1, '', 1, '', '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'JCB-pro.txt', '', '', 'Vast Development Method', '3.1.19', 'Copyright (C) 2015. All Rights Reserved', '2016-02-29 09:48:50', '', 'xmPvSegoAgCMLKDgZYrxDfZk72ACVYwppJH8oNbz1LA=', 'p+fdxfXxLoZ55Tfe/CgzA/EVRkLPVW0i9pwi2qkp/4Y=', '', 'G8usp0HTPVHhb3fhDSNaFpTuMTLgEXtyaElwU1ZCVSM=', 'LmZpZWxkTWVkaXVtIHsgd2lkdGg6IDEzMHB4OyB9DQouZmllbGRTbWFsbCB7IHdpZHRoOiA2MHB4OyB9DQpjb2RlIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXJnaW46IDNweDt9', '', '', 1, '', 'The Component Builder for [Joomla](http://www.joomla.org/) that is highly advanced, truly able to build extremely complex components in a fraction of the time.\r\n\r\nWhether you\'re a seasoned [Joomla](http://www.joomla.org/) developer, or have just started, Component Builder will safe you lots of time and money. A real must have!', 'joomla@vdm.io', '', '', '1UI8B7I2vDDAV21z06SbWlfsn9fztwTv/xXftsr743hbcGVO0yacLAqNoy9X8kYq9wbGYYaSy3yatbFyvNJCQQ==', '', '93a8be13-f9bb-4e22-82a3-3bf27ef1cba1', 'images/vdm/jcb500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2023-10-21 13:48:03', 1, 'Component Builder', 'componentbuilder', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'CS8qDQoJICogQXV0b2xvYWRlcg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXV0b0xvYWRlcigkdHlwZSA9ICdjb21waWxlcicpDQoJew0KCQkvLyBsb2FkIHRoZSB0eXBlIGNsYXNzZXMNCgkJaWYgKCdzbWFydCcgIT09ICR0eXBlKQ0KCQl7DQoJCQlmb3JlYWNoIChnbG9iKEpQQVRIX0FETUlOSVNUUkFUT1IuIi9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy8iLiR0eXBlLiIvKi5waHAiKSBhcyAkYXV0b0ZpbGUpDQoJCQl7DQoJCQkJcmVxdWlyZV9vbmNlICRhdXRvRmlsZTsNCgkJCX0NCgkJfQ0KCQkvLyBsb2FkIG9ubHkgaWYgY29tcGlsZXINCgkJaWYgKCdjb21waWxlcicgPT09ICR0eXBlKQ0KCQl7DQoJCQkvLyBpbXBvcnQgdGhlIEpvb21sYSBsaWJyYXJ5cw0KCQkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uZmlsZScpOw0KCQkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uZm9sZGVyJyk7DQoJCQlqaW1wb3J0KCdqb29tbGEuZmlsZXN5c3RlbS5hcmNoaXZlJyk7DQoJCQlqaW1wb3J0KCdqb29tbGEuYXBwbGljYXRpb24uY29tcG9uZW50Lm1vZGVsbGlzdCcpOw0KCQkJLy8gaW5jbHVkZSBjbGFzcyB0byBtaW5pZnkganMNCgkJCXJlcXVpcmVfb25jZSBKUEFUSF9BRE1JTklTVFJBVE9SLicvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvanMucGhwJzsNCgkJfQ0KCQkvLyBsb2FkIG9ubHkgaWYgc21hcnQNCgkJaWYgKCdzbWFydCcgPT09ICR0eXBlKQ0KCQl7DQoJCQkvLyBpbXBvcnQgdGhlIEpvb21sYSBsaWJyYXJpZXMNCgkJCWppbXBvcnQoJ2pvb21sYS5maWxlc3lzdGVtLmZpbGUnKTsNCgkJCWppbXBvcnQoJ2pvb21sYS5maWxlc3lzdGVtLmZvbGRlcicpOw0KCQkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uYXJjaGl2ZScpOw0KCQkJamltcG9ydCgnam9vbWxhLmFwcGxpY2F0aW9uLmNvbXBvbmVudC5tb2RlbGxpc3QnKTsNCgkJfQ0KCQkvLyBsb2FkIHRoaXMgZm9yIGFsbA0KCQlqaW1wb3J0KCdqb29tbGEuYXBwbGljYXRpb24nKTsNCgl9DQoNCgkvKioNCgkqIAlUaGUgZHluYW1pYyBidWlsZGVyIG9mIHZpZXdzLCB0YWJsZXMgYW5kIGZpZWxkcw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZHluYW1pY0J1aWxkZXIoJiRkYXRhLCAkdHlwZSkNCgl7DQoJCSRleHRydWRlcl9fID0gbmV3IFN1cGVyX19fMTlhMzkzNzlfZDE5Ml80NWQ2X2IxNThfZDE4Y2JkNDA0OWJkX19fUG93ZXIoJGRhdGEpOw0KCX0NCg0KCS8qKg0KCSogCVRoZSB6aXBwZXIgbWV0aG9kDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB6aXAoJHdvcmtpbmdESVIsICYkZmlsZXBhdGgpDQoJew0KCQkvLyBzdG9yZSB0aGUgY3VycmVudCBqb29tbGEgd29ya2luZyBkaXJlY3RvcnkNCgkJJGpvb21sYSA9IGdldGN3ZCgpOw0KDQoJCS8vIHdlIGFyZSBjaGFuZ2luZyB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIGNvbXBvbmVudCB0ZW1wIGZvbGRlcg0KCQljaGRpcigkd29ya2luZ0RJUik7DQoNCgkJLy8gdGhlIGZ1bGwgZmlsZSBwYXRoIG9mIHRoZSB6aXAgZmlsZQ0KCQkkZmlsZXBhdGggPSBKUGF0aDo6Y2xlYW4oJGZpbGVwYXRoKTsNCg0KCQkvLyBkZWxldGUgYW4gZXhpc3RpbmcgemlwIGZpbGUgKG9yIHVzZSBhbiBleGNsdXNpb24gcGFyYW1ldGVyIGluIEpGb2xkZXI6OmZpbGVzKCkNCgkJSkZpbGU6OmRlbGV0ZSgkZmlsZXBhdGgpOw0KDQoJCS8vIGdldCBhIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRyZWUNCgkJJGZpbGVzID0gSkZvbGRlcjo6ZmlsZXMoJy4nLCAnJywgdHJ1ZSwgdHJ1ZSk7DQoJCSR6aXBBcnJheSA9IGFycmF5KCk7DQoJCS8vIHNldHVwIHRoZSB6aXAgYXJyYXkNCgkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKQ0KCQl7DQoJCSAgICR0bXAgPSBhcnJheSgpOw0KCQkgICAkdG1wWyduYW1lJ10gPSBzdHJfcmVwbGFjZSgnLi8nLCAnJywgJGZpbGUpOw0KCQkgICAkdG1wWydkYXRhJ10gPSBKRmlsZTo6cmVhZCgkZmlsZSk7DQoJCSAgICR0bXBbJ3RpbWUnXSA9IGZpbGVtdGltZSgkZmlsZSk7DQoJCSAgICR6aXBBcnJheVtdID0gJHRtcDsNCgkJfQ0KDQoJCS8vIGNoYW5nZSBiYWNrIHRvIGpvb21sYSB3b3JraW5nIGRpcmVjdG9yeQ0KCQljaGRpcigkam9vbWxhKTsNCg0KCQkvLyBnZXQgdGhlIHppcCBhZGFwdGVyDQoJCSR6aXAgPSBKQXJjaGl2ZTo6Z2V0QWRhcHRlcignemlwJyk7DQoNCgkJLy9jcmVhdGUgdGhlIHppcCBmaWxlDQoJCWlmICgkemlwLT5jcmVhdGUoJGZpbGVwYXRoLCAkemlwQXJyYXkpKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCS8qKg0KCSAqIFJlbW92ZSBmb2xkZXJzIHdpdGggZmlsZXMNCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZGlyICBUaGUgcGF0aCB0byBmb2xkZXIgdG8gcmVtb3ZlDQoJICogQHBhcmFtICAgYm9vbGVhbiAgICRnaXQgIGlmIHRoZXJlIGlzIGEgZ2l0IGZvbGRlciBpbiB0aGF0IG11c3Qgbm90IGJlIHJlbW92ZWQNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2xlYW4gICBUcnVlIGluIGFsbCBpcyByZW1vdmVkDQoJICogDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZW1vdmVGb2xkZXIoJGRpciwgJGdpdCA9IGZhbHNlKQ0KCXsNCgkJaWYgKEpGb2xkZXI6OmV4aXN0cygkZGlyKSkNCgkJew0KCQkJJGl0ID0gbmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRkaXIpOw0KCQkJJGl0ID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IoJGl0LCBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpDSElMRF9GSVJTVCk7DQoJCQlmb3JlYWNoICgkaXQgYXMgJGZpbGUpDQoJCQl7DQoJCQkJaWYgKCcuJyA9PT0gJGZpbGUtPmdldEJhc2VuYW1lKCkgfHwgJy4uJyA9PT0gICRmaWxlLT5nZXRCYXNlbmFtZSgpKSBjb250aW51ZTsNCgkJCQlpZiAoJGZpbGUtPmlzRGlyKCkpDQoJCQkJew0KCQkJCQlpZiAoJGdpdCAmJiBzdHJwb3MoJGZpbGUtPmdldFBhdGhuYW1lKCksICRkaXIuJy8uZ2l0JykgIT09IGZhbHNlKSBjb250aW51ZTsNCgkJCQkJSkZvbGRlcjo6ZGVsZXRlKCRmaWxlLT5nZXRQYXRobmFtZSgpKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJaWYgKCRnaXQgJiYgc3RycG9zKCRmaWxlLT5nZXRQYXRobmFtZSgpLCAkZGlyLicvLmdpdCcpICE9PSBmYWxzZSkgY29udGludWU7DQoJCQkJCUpGaWxlOjpkZWxldGUoJGZpbGUtPmdldFBhdGhuYW1lKCkpOw0KCQkJCX0NCgkJCX0NCgkJCWlmICghJGdpdCAmJiBKRm9sZGVyOjpkZWxldGUoJGRpcikpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCUNyZWF0ZSBmaWxlIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBmaWxlDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3cml0ZUZpbGUoJHBhdGgsICRkYXRhKQ0KCXsNCgkJJGZoID0gZm9wZW4oJHBhdGgsICJ3Iik7DQoJCWlmICghaXNfcmVzb3VyY2UoJGZoKSkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWlmIChmd3JpdGUoJGZoLCAkZGF0YSkpDQoJCXsNCgkJCS8vIGNsb3NlIGZpbGUuDQoJCQlmY2xvc2UoJGZoKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCS8vIGNsb3NlIGZpbGUuDQoJCWZjbG9zZSgkZmgpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJVGhlIHVzZXIgbm90aWNlIGluZm8gRmlsZSBOYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXNlcm5vdGljZSA9IGZhbHNlOw0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZVBhdGgoJHR5cGUsICRuYW1lID0gJ2xpc3RpbmcnLCAka2V5ID0gJycsICRmaWxlVHlwZSA9ICcuanNvbicsICRQQVRIID0gSlBBVEhfQ09NUE9ORU5UX1NJVEUpDQoJew0KCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR7JHR5cGUuJG5hbWV9KSkNCgkJew0KCQkJLy8gR2V0IGxvY2FsIGtleQ0KCQkJJGxvY2Fsa2V5ID0gc2VsZjo6Z2V0TG9jYWxLZXkoKTsNCgkJCS8vIHNldCB0aGUgbmFtZQ0KCQkJJGZpbGVOYW1lID0gbWQ1KCR0eXBlLiRuYW1lLiRsb2NhbGtleS4ka2V5KTsNCgkJCS8vIHNldCBmaWxlIHBhdGgJCQkNCgkJCXNlbGY6OiR7JHR5cGUuJG5hbWV9ID0gJFBBVEguJy9oZWxwZXJzLycuJGZpbGVOYW1lLiRmaWxlVHlwZTsNCgkJfQ0KCQkvLyByZXR1cm4gdGhlIHBhdGgNCgkJcmV0dXJuIHNlbGY6OiR7JHR5cGUuJG5hbWV9Ow0KCX0NCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEZpZWxkT3B0aW9ucygkdmFsdWUsICR0eXBlLCAkc2V0dGluZ3MgPSBhcnJheSgpKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCSANCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ3Byb3BlcnRpZXMnLCAnc2hvcnRfZGVzY3JpcHRpb24nLCAnZGVzY3JpcHRpb24nKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9maWVsZHR5cGUnKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgkdHlwZSkgLiAnID0gJy4gJHZhbHVlKTsNCgkJIA0KCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJHJlc3VsdCA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJJHByb3BlcnRpZXMgPSBqc29uX2RlY29kZSgkcmVzdWx0LT5wcm9wZXJ0aWVzLHRydWUpOw0KCQkJJHBvaW50ZXIgPSAwOw0KCQkJJGZpZWxkID0gYXJyYXkoJ3ZhbHVlcycgPT4gIjxmaWVsZCAiLCAndmFsdWVzX2Rlc2NyaXB0aW9uJyA9PiAnPHVsPicsICdzaG9ydF9kZXNjcmlwdGlvbicgPT4gJHJlc3VsdC0+c2hvcnRfZGVzY3JpcHRpb24sICdkZXNjcmlwdGlvbicgPT4gJHJlc3VsdC0+ZGVzY3JpcHRpb24pOw0KCQkJZm9yZWFjaCAoJHByb3BlcnRpZXNbJ25hbWUnXSBhcyAkbGluZSkNCgkJCXsNCgkJCQkkZmllbGRbJ3ZhbHVlc19kZXNjcmlwdGlvbiddIC49ICc8bGk+PGI+Jy4kcHJvcGVydGllc1snbmFtZSddWyRwb2ludGVyXS4nPC9iPiAnLiRwcm9wZXJ0aWVzWydkZXNjcmlwdGlvbiddWyRwb2ludGVyXS4nPC9saT4nOw0KCQkJCWlmKGlzc2V0KCRzZXR0aW5nc1skcHJvcGVydGllc1snbmFtZSddWyRwb2ludGVyXV0pKQ0KCQkJCXsNCgkJCQkJJGZpZWxkWyd2YWx1ZXMnXSAuPSAiXG5cdCIuJHByb3BlcnRpZXNbJ25hbWUnXVskcG9pbnRlcl0uJz0iJy4kc2V0dGluZ3NbJHByb3BlcnRpZXNbJ25hbWUnXVskcG9pbnRlcl1dLiciICc7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRmaWVsZFsndmFsdWVzJ10gLj0gIlxuXHQiLiRwcm9wZXJ0aWVzWyduYW1lJ11bJHBvaW50ZXJdLic9IicuJHByb3BlcnRpZXNbJ2V4YW1wbGUnXVskcG9pbnRlcl0uJyIgJzsNCgkJCQl9DQoJCQkJJHBvaW50ZXIrKzsNCgkJCX0NCgkJCSRmaWVsZFsndmFsdWVzJ10gLj0gIlxuLz4iOw0KCQkJJGZpZWxkWyd2YWx1ZXNfZGVzY3JpcHRpb24nXSAuPSAnPC91bD4nOw0KCQkJLy8gcmV0dXJuIGZvdW5kIGZpZWxkIG9wdGlvbnMNCgkJCXJldHVybiAkZmllbGQ7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCWdldCB0aGUgbG9jYWxrZXkNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRsb2NhbGtleSA9IGZhbHNlOw0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TG9jYWxLZXkoKQ0KCXsNCgkJaWYgKCFzZWxmOjokbG9jYWxrZXkpDQoJCXsNCgkJCS8vIGdldCB0aGUgbWFpbiBrZXkNCgkJCXNlbGY6OiRsb2NhbGtleSA9IG1kNShKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnYmFzaWNfa2V5JywgJ2xvY2FsS2V5MzRmZFdFa2wnKSk7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRsb2NhbGtleTsNCgl9DQoNCgkvKioNCgkgKglpbmRlbnQgSFRNTA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW5kZW50KCRodG1sKQ0KCXsNCgkJLy8gbG9hZCB0aGUgY2xhc3MNCgkJcmVxdWlyZV9vbmNlIEpQQVRIX0FETUlOSVNUUkFUT1IuJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9pbmRlbnRlci5waHAnOw0KCQkvLyBzZXQgbmV3IGluZGVudGVyDQoJCSRpbmRlbnRlciA9IG5ldyBJbmRlbnRlcigpOw0KCQkvLyByZXR1cm4gaW5kZW50ZWQgaHRtbA0KCQlyZXR1cm4gJGluZGVudGVyLT5pbmRlbnQoJGh0bWwpOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tGaWxlVHlwZSgkZmlsZSwgJHN1Zml4KSB7DQoJCS8vIG5vdyBjaGVjayBpZiB0aGUgZmlsZSBlbmRzIHdpdGggdGhlIHN1Zml4DQoJCXJldHVybiAkc3VmaXggPT09ICIiIHx8ICgkc3VmaXggPT0gc3Vic3RyKHN0cnJjaHIoJGZpbGUsICIuIiksIC1zdHJsZW4oJHN1Zml4KSkpOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW1hZ2VJbmZvKCRwYXRoLCRyZXF1ZXN0ID0gJ3R5cGUnKQ0KCXsNCgkJLy8gc2V0IGltYWdlDQoJCSRpbWFnZSA9IEpQQVRIX1NJVEUuJy8nLiRwYXRoOw0KCQkvLyBjaGVjayBpZiBleGlzdHMNCgkJaWYgKGZpbGVfZXhpc3RzKCRpbWFnZSkgJiYgJHJlc3VsdCA9IEBnZXRpbWFnZXNpemUoJGltYWdlKSkNCgkJew0KCQkJLy8gcmV0dXJuIHR5cGUgcmVxdWVzdA0KCQkJc3dpdGNoICgkcmVxdWVzdCkNCgkJCXsNCgkJCQljYXNlICd3aWR0aCc6DQoJCQkJCXJldHVybiAkcmVzdWx0WzBdOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdoZWlnaHQnOg0KCQkJCQlyZXR1cm4gJHJlc3VsdFsxXTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAndHlwZSc6DQoJCQkJCSRleHRlbnNpb25zID0gYXJyYXkoDQoJCQkJCQlJTUFHRVRZUEVfR0lGID0+ICJnaWYiLA0KCQkJCQkJSU1BR0VUWVBFX0pQRUcgPT4gImpwZyIsDQoJCQkJCQlJTUFHRVRZUEVfUE5HID0+ICJwbmciLA0KCQkJCQkJSU1BR0VUWVBFX1NXRiA9PiAic3dmIiwNCgkJCQkJCUlNQUdFVFlQRV9QU0QgPT4gInBzZCIsDQoJCQkJCQlJTUFHRVRZUEVfQk1QID0+ICJibXAiLA0KCQkJCQkJSU1BR0VUWVBFX1RJRkZfSUkgPT4gInRpZmYiLA0KCQkJCQkJSU1BR0VUWVBFX1RJRkZfTU0gPT4gInRpZmYiLA0KCQkJCQkJSU1BR0VUWVBFX0pQQyA9PiAianBjIiwNCgkJCQkJCUlNQUdFVFlQRV9KUDIgPT4gImpwMiIsDQoJCQkJCQlJTUFHRVRZUEVfSlBYID0+ICJqcHgiLA0KCQkJCQkJSU1BR0VUWVBFX0pCMiA9PiAiamIyIiwNCgkJCQkJCUlNQUdFVFlQRV9TV0MgPT4gInN3YyIsDQoJCQkJCQlJTUFHRVRZUEVfSUZGID0+ICJpZmYiLA0KCQkJCQkJSU1BR0VUWVBFX1dCTVAgPT4gIndibXAiLA0KCQkJCQkJSU1BR0VUWVBFX1hCTSA9PiAieGJtIiwNCgkJCQkJCUlNQUdFVFlQRV9JQ08gPT4gImljbyINCgkJCQkJKTsNCgkJCQkJcmV0dXJuICRleHRlbnNpb25zWyRyZXN1bHRbMl1dOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdhdHRyJzoNCgkJCQkJcmV0dXJuICRyZXN1bHRbM107DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2FsbCc6DQoJCQkJZGVmYXVsdDoNCgkJCQkJcmV0dXJuICRyZXN1bHQ7DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRCZXR3ZWVuKCRjb250ZW50LCRzdGFydCwkZW5kKQ0KCXsNCgkJJHIgPSBleHBsb2RlKCRzdGFydCwgJGNvbnRlbnQpOw0KCQlpZiAoaXNzZXQoJHJbMV0pKQ0KCQl7DQoJCQkkciA9IGV4cGxvZGUoJGVuZCwgJHJbMV0pOw0KCQkJcmV0dXJuICRyWzBdOw0KCQl9DQoJCXJldHVybiAnJzsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRBbGxCZXR3ZWVuKCRjb250ZW50LCRzdGFydCwkZW5kKQ0KCXsNCgkJJGJ1a2V0ID0gYXJyYXkoKTsNCgkJZm9yICgkaSA9IDA7IDsgJGkrKykNCgkJew0KCQkJJGZvdW5kID0gU3VwZXJfX19kYjg3YzMzOV81YmI2XzQyOTFfYTdlZl8yYzQ4ZWExYjA2YmNfX19Qb3dlcjo6YmV0d2VlbigkY29udGVudCwkc3RhcnQsJGVuZCk7DQoJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGZvdW5kKSkNCgkJCXsNCgkJCQkkYnVrZXRbXSA9ICRmb3VuZDsNCgkJCQkkcmVtb3ZlID0gJHN0YXJ0LiRmb3VuZC4kZW5kOw0KCQkJCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoJHJlbW92ZSwnJywkY29udGVudCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQkvLyBzYWZldHkgY2F0Y2gNCgkJCWlmICgkaSA9PSA1MDApDQoJCQl7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICBhcnJheV91bmlxdWUoJGJ1a2V0KTsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0eXBlRmllbGQoJHR5cGUsJG9wdGlvbiA9ICdkZWZhdWx0JykNCgl7DQoJCS8vIGxpc3Qgb2YgZGVmYXVsdCBmaWVsZHMNCgkJLy8gaHR0cHM6Ly9kb2NzLmpvb21sYS5vcmcvRm9ybV9maWVsZA0KCQkkZmllbGRzID0gYXJyYXkoDQoJCQknZGVmYXVsdCcgPT4gYXJyYXkoDQoJCQkJJ2FjY2Vzc2xldmVsJywnY2FjaGVoYW5kbGVyJywnY2FsZW5kYXInLCdjYXB0Y2hhJywnY2F0ZWdvcnknLCdjaGVja2JveCcsDQoJCQkJJ2NoZWNrYm94ZXMnLCdjb2xvcicsJ2NvbWJvJywnY29tcG9uZW50bGF5b3V0JywnY29udGVudGxhbmd1YWdlJywnZWRpdG9yJywNCgkJCQknY2hyb21lc3R5bGUnLCdjb250ZW50dHlwZScsJ2RhdGFiYXNlY29ubmVjdGlvbicsJ2VkaXRvcnMnLCdlbWFpbCcsJ2ZpbGUnLA0KCQkJCSdmaWxlbGlzdCcsJ2ZvbGRlcmxpc3QnLCdncm91cGVkbGlzdCcsJ2hpZGRlbicsJ2ZpbGUnLCdoZWFkZXJ0YWcnLCdoZWxwc2l0ZScsDQoJCQkJJ2ltYWdlbGlzdCcsJ2ludGVnZXInLCdsYW5ndWFnZScsJ2xpc3QnLCdtZWRpYScsJ21lbnUnLCdub3RlJywncGFzc3dvcmQnLA0KCQkJCSdwbHVnaW5zJywncmFuZ2UnLCdyYWRpbycsJ3JlcGVhdGFibGUnLCdydWxlcycsJ3Nlc3Npb25oYW5kbGVyJywnc3BhY2VyJywnc3FsJywndGFnJywNCgkJCQkndGVsJywnbWVudWl0ZW0nLCdtb2R1bGVsYXlvdXQnLCdtZXRlcicsJ21vZHVsZW9yZGVyJywnbW9kdWxlcG9zaXRpb24nLCdtb2R1bGV0YWcnLA0KCQkJCSd0ZW1wbGF0ZXN0eWxlJywndGV4dCcsJ3RleHRhcmVhJywndGltZXpvbmUnLCd1cmwnLCd1c2VyJywndXNlcmdyb3VwJw0KCQkJKSwgDQoJCQkndGV4dCcgPT4gYXJyYXkoDQoJCQkJJ2NhbGVuZGFyJywnY29sb3InLCdlZGl0b3InLCdlbWFpbCcsJ3Bhc3N3b3JkJywndGVsJywndGV4dCcsJ3RleHRhcmVhJywndXJsJywnbnVtYmVyJywncmFuZ2UnDQoJCQkpLCANCgkJCSdsaXN0JyA9PiBhcnJheSgNCgkJCQknY2hlY2tib3hlcycsJ2NoZWNrYm94JywnbGlzdCcsJ3JhZGlvJw0KCQkJKSwgDQoJCQknZHluYW1pYycgPT4gYXJyYXkoDQoJCQkJJ2NhdGVnb3J5JywnaGVhZGVydGFnJywndGFnJywncnVsZXMnLCd1c2VyJywnZmlsZScsJ2ZpbGVsaXN0JywnZm9sZGVybGlzdCcsJ2ltYWdlbGlzdCcsJ2ludGVnZXInLCd0aW1lem9uZScsJ21lZGlhJywnbWV0ZXInDQoJCQkpDQoJCSk7DQoJCQ0KCQlpZiAoaW5fYXJyYXkoJHR5cGUsJGZpZWxkc1skb3B0aW9uXSkpDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsJCQ0KCX0NCltDVVNUT01DT0RFPWdldEltcG9ydFNjcmlwdHNdDQoJLyoqDQoJKiAJc2V0IHRoZSBzZXNzaW9uIGRlZmF1bHRzIGlmIG5vdCBzZXQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFNlc3Npb25EZWZhdWx0cygpDQoJew0KCQkvLyBub3RpbmcgZm9yIG5vdw0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQpbQ1VTVE9NQ09ERT10aGVCdXRsZXJdIA==', '', '', '', '', '', '', '', '', 'IyBKb29tbGEgIyMjQ29tcG9uZW50X25hbWUjIyMgKEpDQikNClshW0dpdEh1YiByZWxlYXNlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9yZWxlYXNlL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvcmVsZWFzZXMpIFshW1RvdGFsIERvd25sb2Fkc10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvZG93bmxvYWRzL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvdG90YWwuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvcmVsZWFzZXMpDQoNClRoaXMgaXMgYSBbSm9vbWxhIDMueF0oaHR0cDovL3d3dy5qb29tbGEub3JnLykgY29tcG9uZW50Lg0KDQogIVsjIyNDb21wb25lbnRfbmFtZSMjIyBpbWFnZV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvbWFzdGVyL2FkbWluL2Fzc2V0cy9pbWFnZXMvY29tcG9uZW50LTMwMC5qcGcgIlRoZSAjIyNDb21wb25lbnRfbmFtZSMjIyIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCllvdSBjYW4gaW5zdGFsbCBpdCBxdWl0ZSBlYXNpbHkgYW5kIHdpdGggbm8gbGltaXRhdGlvbnMuIE9uIFtnaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3JlbGVhc2VzKSBpcyB0aGUgbGF0ZXN0IHJlbGVhc2UgKCMjI1ZFUlNJT04jIyMpIHdpdGggKipBTEwqKiBpdHMgZmVhdHVyZXMgYW5kICoqQUxMKiogY29uY2VwdHMgdG90YWxseSBvcGVuLXNvdXJjZSBhbmQgZnJlZSENCg0KT25jZSBpbnN0YWxsZWQgdXBncmFkZXMgYXJlIHF1aWNrIGFuZCBlYXN5IHZpYSB0aGUgZGVmYXVsdCBKb29tbGEgdXBncmFkZSBhcmVhLg0KDQojIFNvbWUgb2YgdGhlIEZlYXR1cmVzDQoNCisgQWRkaW5nIG15U1FMIER1bXAgdG8gYW55IFZpZXcvVGFibGUuDQorIEdyYWIgZXhpc3RpbmcgVGFibGUgZGF0YSBhbmQgYnVpbGQgYSBkeW5hbWljIGR1bXAuDQorIFVubGltaXRlZCBKb29tbGEgQ29tcG9uZW50cy4NCisgVW5saW1pdGVkIFRhYmxlcy9WaWV3cy4NCisgUmV1c2luZyBWaWV3cyBhbmQgRmllbGRzLg0KKyBSdW5zIG9uIFlvdXIgT3duIEpvb21sYSBJbnN0YWxsLg0KKyBBZGQgRHluYW1pYy9jdXN0b20gYmFjay1lbmQgdmlld3MgdGhhdCB1c2VzIFRhYmxlIGFuZCBDaGFydCByZXN1bHQgc2V0cy4NCisgQnVpbGQgZGF0YSBxdWVyeSBvZiBleHRyZW1lIGNvbXBsZXggbmF0dXJlIHRvIHVzZSBpbiBEeW5hbWljL2N1c3RvbSB2aWV3cy4NCisgSGlnaGx5IER5bmFtaWMvY3VzdG9tIEZyb250LWVuZCBTdHJ1Y3R1cmVzLg0KKyBEeW5hbWljYWxseSBzZXR1cCB0ZW1wbGF0ZXMgYW5kIGxheW91dHMgZm9yIEZyb250LWVuZCBkZXNpZ24uDQorIEludGVncmF0aW9uIG9mIHRoZSBleGNlbGxlbnQgVUlLSVQgbGliLg0KKyBJbnRlZ3JhdGlvbiBvZiB0aGUgZXhjZWxsZW50IEZPT1RBQkxFIGxpYi4NCisgQWxsIEpvb21sYSBTdGFuZGFyZCBGaWVsZCBUeXBlcyAoaW5jbHVkaW5nIHJlcGVhdGFibGUgZmllbGRzKS4NCisgU3Ryb25nIEltcGxlbWVudGF0aW9uIG9mIGFsbCBKb29tbGEgRm9ybSBTZWN1cml0eS4NCisgTG9hZCBkYXRhIHZpYSBhamF4IHdpdGggZWFzZS4NCisgWW91IGNhbiBhZGQgYW4gVXBkYXRlIFNlcnZlciB0byBDb21wb25lbnRzIHlvdSBidWlsZC4NCisgQnVpbGQgYWR2YW5jZWQgRHluYW1pYyBmcm9udC1lbmQgZm9ybXMuDQorIER5bmFtaWMgZGF0YSBxdWVyaWVzIGZyb20gbXVsdGlwbGUgdGFibGVzLg0KKyBQbGFjZSBpbiBsb2NhbCBHSVQgZm9sZGVyLCBhbmQgcHVibGlzaCB0byBzYWxlcyBzZXJ2ZXIuDQorIEluY2x1ZGUgYW55IGFtb3VudCBvZiBjdXN0b20gZmlsZXMgYW5kIGZvbGRlcnMgZHVyaW5nIGJ1aWxkLg0KKyBTdGF0aWMgaGVscGVyIGNsYXNzIHdpdGggc21hcnQgbWV0aG9kcyBhbHJlYWR5IGluY2x1ZGVkLg0KKyBTdGF0aWMgaGVscGVyIG1ldGhvZHMgQ2FuIGVhc2lseSBiZSBhZGRlZC4NCisgRGlyZWN0IGluc3RhbGwgZnJvbSBjb21wbGllciB2aWV3Lg0KKyBJbnRlZ3JhdGl2ZSB3aXRoIG5hdGl2ZSBKb29tbGEgQ2F0ZWdvcmllcyBhbmQgVGFncy4NCisgRnVsbHkgRHluYW1pYyBTZWFyY2ggRnJpZW5kbHkgVVJMIEF1dG8gSW1wbGVtZW50YXRpb24uDQorIEN1c3RvbSBzY3JpcHRpbmcgb3B0aW9ucyBhbGwgb3ZlciB0aGUgTVZDIHN0cnVjdHVyZS4NCisgUGVybWlzc2lvbiBpbXBsZW1lbnRhdGlvbiBkb3duIHRvIGVhY2ggdmlldywgaXRlbSBhbmQgZmllbGQuDQorIEVhc3kgZXh0ZW5kaWJsZSB0byBpbmNsdWRlIG90aGVyIGxpYnJhcmllcy4NCisgQ2FuIGluY2x1ZGUgU1FMIGFuZCB2aXNpb25pbmcgdXBkYXRlIGxpbmsgdG8gZGlzdHJpYnV0ZSB5b3VyIGNvbXBvbmVudCB1cGRhdGVzIHZpYSBKb29tbGEgZGVmYXVsdCB1cGdyYWRlIG9mIGNvbXBvbmVudHMuDQorIEVhc3kgRXhwb3J0ICYgSW1wb3J0IGFkZG9uIHRvIGFsbCBiYWNrZW5kLXRhYmxlcy4NCisgT3ZlcnJpZGluZyBhYmlsaXR5IG9mIGltcG9ydCBjb25jZXB0cyBpbiBhbGwgYmFja2VuZC10YWJsZXMuDQorIFRoZSBCYXRjaCBhbmQgRmlsdGVyIGltcGxlbWVudGF0aW9uIG9uIGFsbCBiYWNrZW5kLWxpc3Qgdmlld3MuDQorIFRoaXMgYW5kIG11Y2ggbXVjaCBtb3JlIGFyZSBhbGwgcG9zc2libGUgd2l0aCB0aGlzIGNvbXBvbmVudCBidWlsZGVyIQ0KDQojIEp1c3QgSW1hZ2luZQ0KDQorIFlvdXIgQ29tcG9uZW50IEJhY2stZW5kIGNhbiBiZSBtb3JlIGFkdmFuY2VkIHRoZW4gdGhlIEpvb21sYSBBcnRpY2xlIE1hbmFnZXIuDQorIFlvdXIgQ29kZSBhcyBQZXJmZWN0bHkgVW5pZmllZCB0byB0aGUgc3RyaWN0IEpvb21sYSBTdGFuZGFyZHMuDQorIEFkZGluZyBDdXN0b20gU2NyaXB0aW5nIGFsbW9zdCBhbnl3aGVyZSBpbiB0aGUgTVZDIHN0cnVjdHVyZS4NCisgSW1wb3J0IGFuZCBleHBvcnQgZmVhdHVyZSB0byBhbGwgYmFja2VuZC12aWV3cy4NCisgQmF0Y2ggY29weSBhbmQgbW92ZS91cGRhdGUgZmVhdHVyZSBmb3IgYWxsIGJhY2tlbmQtdmlld3MuDQorIEhpc3RvcnkgdHJhY2tpbmcgcGVyL2NoYW5nZSBtYWRlIG9uIGFueSBiYWNrLWVuZCBpdGVtLg0KKyBEeW5hbWljIGZpZWxkIGNvbnRyb2wsIHRvIHNob3cgYW5kIGhpZGUgZmllbGRzIGluIGFtYXppbmcgd2F5cy4NCisgRnJvbnQtZW5kIGZyZWVkb20gb2YgZGVzaWduIHRoYXQgYWxsb3dzIGZvciBhbnkgbGlicmFyeSB0byBiZSB1c2VkLg0KKyBUaGlzIGFuZCBtdWNoIG11Y2ggbW9yZSBhcmUgYWxsIHBvc3NpYmxlIHdpdGggdGhpcyBjb21wb25lbnQgYnVpbGRlciENCg0KIyBZb3UgYXJlIGluIENvbnRyb2wNCg0KKyBZb3UgY2FuIGNoYW5nZSB0aGUgbGljZW5zaW5nIHRlbXBsYXRlIGZvciB5b3VyIGNvbXBvbmVudHMuDQorIFlvdSBjYW4gY2hhbmdlL2ltcHJvdmUgZXhpc3RpbmcgZmllbGQgdHlwZXMgYW5kIGFkZCBtb3JlLg0KKyBMaW5lIG51bWJlcnMgdG8gc2hvdyB3aGVyZSBpbiBjb21waWxlciB3YXMgdGhlIGNvZGUgYnVpbGQuDQorIFlvdSBjYW4gaW1wcm92ZSB0aGUgY29tcG9uZW50IHNpbmNlIGFsbCBjb2RlIGFyZSBvcGVuLXNvdXJjZS4NCisgRnJlZSB1cGRhdGVzIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2plY3QuDQorIFlvdSBjYW4gZHluYW1pY2FsbHkgYWRkIGludGVybmFsIGhlbHAgc3RydWN0dXJlcyB0byBhbGwgY29tcG9uZW50Lg0KKyBUaGVyZSBpcyBubyBsaW1pdGF0aW9ucyBvbiBob3cgYmlnIG9yIGhvdyBtdWNoIHlvdSB3YW50IHRvIGJ1aWxkIChzZXJ2ZXIgbGltaXRhdGlvbiBvbmx5KS4NCisgVGhpcyBpcyBhIGNvbXBsZXRlIGZhY3Rvcnkga2luZCBvZiBjb21wb25lbnQgdGhhdCBmdW5jdGlvbnMgbGlrZSBhIGRlcGxveW1lbnQgaHViLg0KKyBFeHBvcnQgYW55IGNvbXBvbmVudCBjb21wbGV0ZWx5IG1hcHBlZCBpbiBKQ0IgYW5kIGltcG9ydCBpbnRvIGFub3RoZXIgSkNCLg0KKyBUaGlzIGFuZCBtdWNoIG11Y2ggbW9yZSBhcmUgYWxsIHBvc3NpYmxlIHdpdGggdGhpcyBjb21wb25lbnQgYnVpbGRlciENCg0KIyBBY2Nlc3MgdGhlIFZpZGVvIFR1dG9yaWFscw0KDQpTZWUgdGhlIGJyZWFrZG93biBvZiB0aGUgW3R1dG9yaWFscyBvbiBnaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3dpa2kpIGJlIHN1cmUgdG8gbG9naW4gdG8geW91ciB5b3V0dWJlIGFjY291bnQgdG8gdmlldyB0aGVzZSB0dXRvcmlhbHMuDQoNCiMgZ2l0SHViIFN1cHBvcnQNCg0KV291bGQgeW91IHJlcXVpcmUgbW9yZSBoZWxwIHBsZWFzZSBvcGVuIGFuZCBpc3N1ZSBoZXJlIG9uIFtnaXRIdWIgdG9kYXldKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL2lzc3VlcykhDQoNCiMgV0hZIEdJVkUgSVQgQVdBWSBMSUtFIFRISVM/DQoNCj4gSSBhbSBhbiBPcGVuIFNvdXJjZSBFbnRodXNpYXN0DQo+IFdobyBTdXBwb3J0IHRoZSBKb29tbGEgQ29tbXVuaXR5DQoNCk15IGlkZWEgd2FzIHRvIGFsbW9zdCBsZXQgdGhpcyB0b29sIHNlcnZlIGFzIGEgY2hlYXQgc2hlZXQgdG8gaG93IHRoaW5ncyBjYW4gYmUgZG9uZS4uLiBhbmQgd2l0aCB0aGUgaGVscCBvZiBvdGhlciBkZXZlbG9wZXJzIChtb3JlIGFkdmFuY2VkIHRoZW4gbWUpIGVuZCB1cCBmb3JtdWxhdGluZyB0aGUgd2F5IGhvdyB0aGluZ3Mgbm90IG9ubHkgY2FuLCBidXQgbXVzdCBiZSBkb25lIHRvIGluc3VyZSBzZWN1cmUsIHN0YWJsZSwgc2NhbGFibGUgYW5kIG1haW50YWluYWJsZSBjb2RlIGlzIHByb2R1Y2VkLiANCg0KIyBNQUtJTkcgSVQgQkVUVEVSIQ0KDQpDb21wb25lbnQgQnVpbGRlciBpcyBtYXBwZWQgYXMgYSBjb21wb25lbnQgaW4gaXRzZWxmIG9uIG15IGxvY2FsIGRldmVsb3BtZW50IGVudmlyb25tZW50LiBTbyBJIGFtIGltcHJvdmluZyBpdCBsaWtlIHlvdSB3b3VsZCBhbnkgb3RoZXIgY29tcG9uZW50IGluIGl0LiBJIGFtIGxvb2tpbmcgZm9yIGRldmVsb3BlcnMgd2l0aCB0aGUgKipza2lsbCoqIGFuZCB0aGUgKipkZXNpcmUqKiB0byByZWFsbHkgam9pbiBtZS4uLiBhbmQgdGhlbiBJIHdpbGwgcG9zc2libGUgZ2l2ZSB0aGVtIGFjY2VzcyB0byB0aGlzLCBzbyB3ZSBjYW4gYWxsIGhlbHAgaW1wcm92ZSB0aGlzIHNpbXBsZSwgeWV0IGFkdmFuY2VkIHRvb2wuDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cDovL3ZkbS5iei9jb21wb25lbnQtYnVpbGRlcikuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKG1haWx0bzpqb29tbGFAdmRtLmlvKQ0KDQojIyBEb25hdGlvbnMNCg0KQ29tZSBvbiBidXkgbWUgYSBjb2ZmZWUgOikNCiAqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', '', '', 'Builds Complex Joomla Components', '', '', 'Component Builder (Packager)', '.git', '', '', 3, 'https://io.vdm.dev/update/componentbuilder_public_update_server.xml', 'https://dev.vdm.io', '', '15B/DnhhAf9l5DqzHLDbRPk/6CerG+Yc70BjTuJcbFk=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 2, 163, '', 1, 59), +(18, '', '', '', '', '', '', '', '', '', '', 1, '', 1, '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.1.0', 'Copyright (C) 2015. All Rights Reserved', '2016-02-24 13:21:00', '', 'PprMpPvlxnRi9ShaF7Sow9ENowuNfZw1tbyLnCocGBU=', '2FYCb5rnMNxRgDaDgcSPlfmf6VR7f2CtVGAxW3dSb5c=', '', 'UXU18uqabZOU8kYAoNwRTFBevvohQ7cK2F4c+M3puXk=', '', '', '', 1, '', 'Support Groups component adds the ability to your Joomla website to manage various support groups and their related details. Integration with Google Maps is one of its main features.', 'joomla@vdm.io', '', 'https://vdm.bz/jcb-support-groups', 'zDF8cOazWQPMVpPc5EBb781TrBjsgNplnrZ/ko36KH7kb39urdAkJZcD11DAZAenJJ0CZOrI5/I+FZeTWwSuZQ==', '', '36d66191-9524-4800-966c-be16df1cd5a2', 'images/vdm/SGD500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Support-Groups', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2021-04-14 15:47:40', 1, 'Support Groups', 'supportgroups', '', 4, '', 'CS8qKg0KCSogCVRoZSBnbG9iYWwgcGFyYW1zDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zID0gZmFsc2U7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldEN1cnJlbmN5KCRhbW91bnQsJHN1cHBvcnRfZ3JvdXApDQoJew0KCQkvLyBnZXQgdGhlIGN1cnJlbmN5IGlkDQoJCSRjdXJyZW5jeSA9IHNlbGY6OmdldEN1cnJlbmN5KCRzdXBwb3J0X2dyb3VwKTsNCgkJLy8gbWFrZSBtb25leQ0KCQlyZXR1cm4gc2VsZjo6bWFrZU1vbmV5KCRhbW91bnQsJGN1cnJlbmN5KTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRjdXJyZW5jeSA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEN1cnJlbmN5KCRzdXBwb3J0X2dyb3VwKQ0KCXsNCgkJaWYgKCFpc3NldChzZWxmOjokY3VycmVuY3lbJHN1cHBvcnRfZ3JvdXBdKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBsb2NhdGlvbg0KCQkJJGFyZWEgPSBzZWxmOjpnZXRWYXIoJ3N1cHBvcnRfZ3JvdXAnLCAkc3VwcG9ydF9ncm91cCwgJ2lkJywgJ2FyZWEnKTsNCgkJCS8vIGdldCB0aGUgUmVnaW9uDQoJCQkkcmVnaW9uID0gc2VsZjo6Z2V0VmFyKCdhcmVhJywgJGFyZWEsICdpZCcsICdyZWdpb24nKTsNCgkJCS8vIGdldCB0aGUgQ291bnRyeQ0KCQkJJGNvdW50cnkgPSBzZWxmOjpnZXRWYXIoJ3JlZ2lvbicsICRyZWdpb24sICdpZCcsICdjb3VudHJ5Jyk7DQoJCQkvLyBnZXQgdGhlIEN1cnJlbmN5IENvZGV0aHJlZQ0KCQkJJGNvZGV0aHJlZSA9IHNlbGY6OmdldFZhcignY291bnRyeScsICRjb3VudHJ5LCAnaWQnLCAnY3VycmVuY3knKTsNCgkJCS8vIGdldCBjdXJyZW5jeSBpZA0KCQkJc2VsZjo6JGN1cnJlbmN5WyRzdXBwb3J0X2dyb3VwXSA9IHNlbGY6OmdldFZhcignY3VycmVuY3knLCAkY29kZXRocmVlLCAnY29kZXRocmVlJywgJ2lkJyk7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRjdXJyZW5jeVskc3VwcG9ydF9ncm91cF07DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkY3VycmVuY3lEZXRhaWxzID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VycmVuY3lEZXRhaWxzKCRjb2RldGhyZWUgPSBmYWxzZSkNCgl7DQoJCS8vIHJldHVybiBjYWNoZWQgZGF0YSBpZiBzZXQNCgkJaWYgKCRjb2RldGhyZWUgJiYgIWlzc2V0KHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0pKQ0KCQl7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5KAknYS5pZCcsJ2EubmFtZScsJ2EuY29kZXRocmVlJywnYS5udW1lcmljY29kZScsJ2Euc3ltYm9sJywnYS50aG91c2FuZHMnLCdhLmRlY2ltYWxwbGFjZScsDQoJCQkJCSdhLmRlY2ltYWxzeW1ib2wnLCdhLnBvc2l0aXZlc3R5bGUnLCdhLm5lZ2F0aXZlc3R5bGUnKSwNCgkJCQlhcnJheSgJJ2N1cnJlbmN5X2lkJywnY3VycmVuY3lfbmFtZScsJ2N1cnJlbmN5X2NvZGV0aHJlZScsJ2N1cnJlbmN5X251bWVyaWNjb2RlJywnY3VycmVuY3lfc3ltYm9sJywNCgkJCQkJJ2N1cnJlbmN5X3Rob3VzYW5kcycsJ2N1cnJlbmN5X2RlY2ltYWxwbGFjZScsJ2N1cnJlbmN5X2RlY2ltYWxzeW1ib2wnLCdjdXJyZW5jeV9wb3NpdGl2ZXN0eWxlJywNCgkJCQkJJ2N1cnJlbmN5X25lZ2F0aXZlc3R5bGUnKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY3VycmVuY3knLCAnYScpKTsNCgkJCWlmIChpc19udW1lcmljKCRjb2RldGhyZWUpKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkY29kZXRocmVlKTsNCgkJCX0NCgkJCWVsc2VpZiAoc3RybGVuKCRjb2RldGhyZWUpID09IDMpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5jb2RldGhyZWUnKSAuICcgPSAnLiRkYi0+cXVvdGUoJGNvZGV0aHJlZSkpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY29kZXRocmVlJykgLiAnID0gJy4kZGItPnF1b3RlKCdOT05FJykpOw0KCQkJfQ0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXSA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJfQ0KCQl9DQoJCS8vIG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBzZXQNCgkJaWYgKGlzc2V0KHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0pKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KW0NVU1RPTUNPREU9bWFrZU1vbmV5XQ0KW0NVU1RPTUNPREU9Z2V0RmlsZVBhdGhd', '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0VG90YWxzKCYkZGF0YSwmJHR5cGUsJiRpZCkNCgl7DQoJCWxpc3QoJHBhdGgsICRmaWxlTmFtZSwgJGZ1bGxQYXRoKSA9IHNlbGY6OmdldFRvdGFsc0ZpbGVQYXRoKCR0eXBlLCRpZCk7DQoJCS8vIGRpZCB3ZSBnZXQgYSB2YWxpZCByZXN1bHQgc2V0DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIG5vdyBzYXZlIGZvciBuZXh0IHRpbWUNCgkJCXJldHVybiBzZWxmOjpzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VG90YWxzKCYkdHlwZSwmJGlkKQ0KCXsNCgkJbGlzdCgkcGF0aCwgJGZpbGVOYW1lLCAkZnVsbFBhdGgpID0gc2VsZjo6Z2V0VG90YWxzRmlsZVBhdGgoJHR5cGUsJGlkKTsNCgkJLy8gY2hlY2sgaWYgZmlsZSBleGlzdHMNCgkJaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkgJiYgKCgkanNvbkZpbGUgPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRDb250ZW50KCRmdWxsUGF0aCwgRkFMU0UpKSAhPT0gRkFMU0UpKQ0KCQl7DQoJCQkvLyBncmVhdCB3ZSBhcmUgZG9uZSByZXR1cm4gcmVzdWx0cyBhcyBhcnJheQ0KCQkJcmV0dXJuIGpzb25fZGVjb2RlKCRqc29uRmlsZSx0cnVlKTsNCgkJfQ0KCQkvLyByZW1vdmUgdGhlIG9sZCBmaWxlcw0KCQlzZWxmOjpyZW1vdmVGaWxlKCRwYXRoLCAkZmlsZU5hbWUpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VG90YWxzRmlsZVBhdGgoJiR0eXBlLCYkaWQpDQoJew0KCQkkcGF0aFswXSA9IEpQQVRIX0FETUlOSVNUUkFUT1IuJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy90b3RhbHMnOw0KCQkkcGF0aFsxXSA9IHNlbGY6OmdldEZpbGVLRVkoJHR5cGUsJGlkKTsNCgkJLy8gYnVpbGQgZnVsbCBwYXRoIHRvIGZpbGUNCgkJJHBhdGhbMl0gPSAkcGF0aFswXS4nLycuJHBhdGhbMV0uJy5qc29uJzsNCg0KCQlyZXR1cm4gJHBhdGg7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZUtFWSgmJHR5cGUsJiRpZCkNCgl7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkvLyBHZXQgZnJvbSAjX19zdXBwb3J0Z3JvdXBzX3N1cHBvcnRfZ3JvdXAgYXMgYQ0KCQkkcXVlcnktPnNlbGVjdCgnTUFYKGEubW9kaWZpZWQpJyk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fc3VwcG9ydGdyb3Vwc19zdXBwb3J0X2dyb3VwJywgJ2EnKSk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGlzaGVkID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAnVkRNXycuJHR5cGUuJ19fJy5tZDUoJGRiLT5sb2FkUmVzdWx0KCkpLidfXycuJGlkOw0KCQl9DQoJCXJldHVybiAnVkRNXycuJHR5cGUuJ19fMjg5ZDdiMDUyNzg2OGQ3ZjlhNWY4YzdiMWM4MGQ3YTZfXycuJGlkOw0KCX0NCg0KCS8qKg0KCSogU2FmZXMganNvbiB0byBhIGZpbGUNCgkqDQoJKiBAaW5wdXQJICBvYmplY3QvYXJyYXkvanNvbiAgJGRhdGEgICAgICBEYXRhIHRvIGJlIHN0b3JlZA0KCSogQGlucHV0CSAgc3RyaW5nICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoIEZ1bGwgcGF0aCB0byBmaWxlDQoJKiBAaW5wdXQJICBzdHJpbmcgICAgICAgICAgICAgICAgICAkcGF0aCAgICAgIEZ1bGwgcGF0aCB0byBmb2xkZXINCgkqDQoJKiBAcmV0dXJucyAgYm9vbGVhbiBvbiBzdWNjZXNzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCA9IF9fRElSX18pDQoJew0KCQkvLyBjaGVjayBpZiBwYXRoIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJew0KCQkJLy8gaWYgbm90IHRoZSBtYWtlIHRoZSBwYXRoDQoJCQlta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB0aGUgc3RyaW5nIGlzIGpzb24NCgkJaWYgKCFTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIGpzb24gZW5jb2RlIGlmIG5vdCBqc29uDQoJCQkkZGF0YSA9IGpzb25fZW5jb2RlKCRkYXRhKTsNCgkJfQ0KCQkvLyBtYWtlIHN1cmUgdGhpcyBpcyBhIHN0cmluZw0KCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQl7DQoJCQkkZnAgPSBmb3BlbigkZnVsbFBhdGgsICd3Jyk7DQoJCQlmd3JpdGUoJGZwLCAkZGF0YSk7DQoJCQlmY2xvc2UoJGZwKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLyoqDQoJICogUmVtb3ZlIGZpbGUNCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZGlyICBUaGUgcGF0aCB0byBmb2xkZXIgdG8gcmVtb3ZlDQoJICogQHBhcmFtICAgc3RyaW5nICAgJG5ld0ZpbGVOYW1lIHRoZSBuZXcgZmlsZSBuYW1lDQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuICAgVHJ1ZSBpbiBhbGwgaXMgcmVtb3ZlZA0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlRmlsZSgkZGlyLCAkbmV3RmlsZU5hbWUpDQoJew0KCQlpZiAoaXNfZGlyKCRkaXIpKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgb2xkIGZvbGRlciBuYW1lDQoJCQkkb2xkRmlsZU5hbWUgPSBleHBsb2RlKCdfXycsJG5ld0ZpbGVOYW1lKTsNCgkJCS8vIGxpdHRsZSBmaXggdG8gcmVtb3ZlIHRoaXMgaXRlbSBvbGQgZmlsZSBpZiBmb3VuZA0KCQkJJGZvdW5kID0gZ2xvYigkZGlyLicvJy4kb2xkRmlsZU5hbWVbMF0uJyonLiRvbGRGaWxlTmFtZVsyXS4nLmpzb24nKTsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZm91bmQpICYmICgkZG9uZSA9IEBhcnJheV9tYXAoICJ1bmxpbmsiLCRmb3VuZCkpICE9PSBGQUxTRSkNCgkJCXsNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXShodHRwczovL2dpdGh1Yi5jb20vTGxld2VsbHludmRtL0pvb21sYS1TdXBwb3J0LUdyb3Vwcy9yYXcvbWFzdGVyL2FkbWluL2Fzc2V0cy9pbWFnZXMvdmRtLWNvbXBvbmVudC5qcGcgIlRoZSAjIyNDb21wb25lbnRfbmFtZSMjIyIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIENvbXBvbmVudCBOdW1iZXINCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cDovL3ZkbS5iei9jb21wb25lbnQtYnVpbGRlcikuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKG1haWx0bzpqb29tbGFAdmRtLmlvKQ0KDQojIEpvb21sYSBDb21wb25lbnQgQnVpbGRlcg0KDQpGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBKQ0IgdmlzaXQgW1ZETV0oaHR0cDovL3ZkbS5iei9jb21wb25lbnQtYnVpbGRlcikgVG9kYXkhIFRoZSBmdXR1cmUgaXMgaGVyZSENCg0KW0NVU1RPTUNPREU9cmVhZE1FY29udHJpYnV0b3JzXQ==', '', '', 'Support Groups', '', '', 'Support Groups (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/Llewellynvdm/Joomla-Support-Groups/master/supportgroups_update_server.xml', 'http://www.vdm.io', '', 'MnqAN/BKB4RuSo9ssgLixjWmebnM+y38CXbQNAFuIII=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 144, '', 1, 63), +(19, 1, '', '', '', 1, '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, '', '', 3, '', 1, 3, 'Ty Coon', '', 'default.txt', '', '', 'Yoyodyne, Inc.', '1.0.14', 'Copyright (C) 2015. All Rights Reserved', '2016-03-07 02:41:12', '', 'ZeWxi5fFOiZerEt+g/op1T9TR9PdxqXLighoYlKcWSU=', 'L6B/srznyHaxTDT3/Oq6C8IILZBj7KdleiRPmBoUhHg=', '', 'a+oNwrKFUAUh3fq4wi9j+cnSHkcbMARJoW8Gm5AZKiw=', '', '', 'A_174', 2, '', 'gitHubbing', 'hacker@gnu.org', '', '', '69IXWWHwipHPBqDFjepXHwmLfs470iYEsn3PHouCrmk=', '', '67499184-219e-40f3-bf38-8b1c7d619126', 'images/toilet-paper-icon.png', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2020-07-23 13:36:28', '', 'gitHubbing', 'githubbing', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'CXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCglwcm90ZWN0ZWQgc3RhdGljICRkb1Rlc3QgPSBmYWxzZTsNCglwdWJsaWMgc3RhdGljICRub3RFbWFpbCA9IGFycmF5KCAndXNlcnMubm9yZXBseS5naXRodWIuY29tJywgJ25vcmVwbHknLCAnbm9fcmVwbHknKTsNCg0KCS8vIEFycmF5IG9mIHJlbGF0aW9uc2hpcCBuYW1lcw0KCXB1YmxpYyBzdGF0aWMgJHJlbGF0aW9uc2hpcE5hbWUgPSBhcnJheSgNCgkJCTEgPT4gJ0FkbWluJywNCgkJCTIgPT4gJ1B1c2gnLA0KCQkJMyA9PiAnUHVsbCcsDQoJCQk0ID0+ICdGb3JrZWQnLA0KCQkJNSA9PiAnU3RhcmdhemVyJywNCgkJCTYgPT4gJ1dhdGNoZXInDQoJCSk7DQoNCgkvKioNCgkqIAlzZXQgdGhlIHNlc3Npb24gZGVmYXVsdHMgaWYgbm90IHNldA0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0U2Vzc2lvbkRlZmF1bHRzKCkNCgl7DQoJCS8vIG5vdGluZyBmb3Igbm93DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogCVNlbmQgdGhlIGNvbmZpcm1hdGlvbiBlbWFpbHMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFRlbXBsYXRlKCR0eXBlLCAkZGVmYXVsdCA9IG51bGwpDQoJew0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCSRib2R5ID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCR0eXBlLCAkZGVmYXVsdCk7DQoJCS8vIHJldHVybiB0aGUgdGVtcGxhdGUgaWYgZm91bmQNCgkJaWYgKCRib2R5KQ0KCQl7DQoJCQlyZXR1cm4gJGJvZHk7DQoJCX0NCgkJcmV0dXJuIFRleHQ6OnNwcmludGYoJ05vIHRlbXBsYXRlIGZvciA8Yj4lczwvYj4gd2VyZSBmb3VuZCcsIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHR5cGUsICd3JykpOw0KCX0NCg0KCS8qKg0KCSogCWdldCBwbGFjZSBob2xkZXJzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQbGFjZUhvbGRlcnMoJHR5cGUpDQoJew0KCQlpZiAoJ2RvY3VtZW50JyA9PSAkdHlwZSkNCgkJew0KCQkJcmV0dXJuIGFycmF5X2tleXMoc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJykpOw0KCQl9DQoJCWVsc2VpZiAoJ2VtYWlsJyA9PSAkdHlwZSkNCgkJew0KCQkJJGYgPSAnWyc7DQoJCQkkYiA9ICddJzsNCgkJCSRwbGFjZWhvbGRlciA9IGFycmF5KCk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbZG9jdW1lbnRfaGVhZGVyXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW3RleHRfaGVhZGVyXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheV9rZXlzKHNlbGY6OmdldENvbXBhbnlEZXRhaWxzKCdwbGFjZWhvbGRlcicpKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXlfdmFsdWVzKHNlbGY6OmdldFNlbGVjdGlvbignZGV2ZWxvcGVyJywgJGYuJ2RldmVsb3Blcl8nLCAkYikpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheV92YWx1ZXMoc2VsZjo6Z2V0U2VsZWN0aW9uKCdwcm9qZWN0JywgJGYuJ3Byb2plY3RfJywgJGIpKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXkoJ1t1bnN1YnNjcmliZV9saW5rXScsICdbdW5zdWJzY3JpYmVfdXJsXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2RvY3VtZW50X2Zvb3Rlcl0nKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXkoJ1t0ZXh0X2Zvb3Rlcl0nKTsNCgkJCXJldHVybiAgc2VsZjo6bWVyZ2VBcnJheXMoJHBsYWNlaG9sZGVyKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBSZXR1cm4gYXJyYXkgb2Ygc2VsZWN0aW9ucw0KCSogDQoJKiBAcmV0dXJuICAgIGFycmF5IGlmIHR5cGUgbWF0Y2gNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0eXBlLCAkZiA9ICcnLCAkYiA9ICcnKQ0KCXsNCgkJaWYgKCdkZXZlbG9wZXInID09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsCQ0KCQkJCSdhLm5hbWUnID0+ICRmLiduYW1lJy4kYiwJDQoJCQkJJ2EuZW1haWwnID0+ICRmLidlbWFpbCcuJGIsDQoJCQkJJ2EuaGlyZWFibGUnID0+ICRmLidoaXJlYWJsZScuJGIsDQoJCQkJJ2EubG9jYXRpb24nID0+ICRmLidsb2NhdGlvbicuJGIsDQoJCQkJJ2EuYmlvJyA9PiAkZi4nYmlvJy4kYiwNCgkJCQknYS5ibG9nJyA9PiAkZi4nYmxvZycuJGIsDQoJCQkJJ2EubG9naW4nID0+ICRmLid1c2VybmFtZScuJGIsDQoJCQkJJ2EuZ2l0aHViX2lkJyA9PiAkZi4nZ2l0aHViX2lkJy4kYg0KCQkJKTsNCgkJfQ0KCQlpZiAoJ3Byb2plY3QnID09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsDQoJCQkJJ2EubmFtZScgPT4gJGYuJ25hbWUnLiRiLA0KCQkJCSdhLmRlc2NyaXB0aW9uJyA9PiAkZi4nZGVzY3JpcHRpb24nLiRiLA0KCQkJCSdhLnNob3J0X2Rlc2NyaXB0aW9uJyA9PiAkZi4nc2hvcnRfZGVzY3JpcHRpb24nLiRiLA0KCQkJCSdhLnByb2plY3QnID0+ICRmLidwcm9qZWN0Jy4kYiwNCgkJCQknYS50b2tlbnMnID0+ICRmLid0b2tlbnMnLiRiDQoJCQkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIAlzZW5kIG1lc3NhZ2VzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZW5kTWVzc2FnZXMoJHBrcywgJGRiID0gbnVsbCwgJHRlc3QgPSBmYWxzZSkNCgl7DQoJCS8vIHRlc3Qgc3dpdGNoDQoJCXNlbGY6OiRkb1Rlc3QgPSAkdGVzdDsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbg0KCQlpZiAoISRkYikNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCX0NCgkJLy8gc2VuZCBvbmUgbWVzc2FnZSBhdCBhIHRpbWUNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwa3MpKQ0KCQl7DQoJCQkkc2VuZCA9IHRydWU7DQoJCQkkZiA9ICdbZGV2ZWxvcGVyXyc7DQoJCQkkYiA9ICddJzsNCgkJCSRzZWxlY3Rpb24gPSBzZWxmOjpnZXRTZWxlY3Rpb24oJ2RldmVsb3BlcicsICRmLCAkYik7DQoJCQlmb3JlYWNoICgkcGtzIGFzICRwaykNCgkJCXsNCgkJCQkkcHJvamVjdCA9IG51bGw7DQoJCQkJJHJlbFsncmVsYXRpb25zaGlwJ10gPSBUZXh0OjpfKCdhbnknKTsNCgkJCQkkcmVsWydub3RfcmVsYXRpb25zaGlwJ10gPSBUZXh0OjpfKCdubycpOw0KCQkJCSRyZWxbJ2hpcmVhYmxlJ10gPSAnJzsNCgkJCQlpZiAoISRpdGVtcyA9IHNlbGY6OmdldFN1YnNjcmliZXJzKCRwaywgJHJlbCwgJHByb2plY3QsICRkYiwgJHNlbGVjdGlvbikpDQoJCQkJew0KCQkJCQkvLyBkb24ndCBzaG93IHN1Y2Nlc3MgbWVzc2FnZQ0KCQkJCQkkc2VuZCA9IGZhbHNlOw0KCQkJCX0NCgkJCQllbHNlaWYgKCFzZWxmOjpzZW5kTWVzc2FnZXNOb3coJGl0ZW1zLCAkcGssICRwcm9qZWN0LCAkZGIpKQ0KCQkJCXsNCgkJCQkJLy8gdGFpbG9yIGFyb3VuZCBhIHByb2plY3QNCgkJCQkJaWYgKCRwcm9qZWN0KQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgYSBtZXNzYWdlIHRoYXQgdGhpcyBtYWlsIGxpc3QgaGFzIG5vIHN1YnNjcmlwdGlvbg0KCQkJCQkJc2VsZjo6JG1lc3NhZ2VzWydFcnJvciddW10gPSBUZXh0OjpzcHJpbnRmKCdUaGVyZSB3YXMgYW4gZXJyb3Igc2VuZGluZyA8Yj4lczwvYj4gdG8gdGhlIHN1YnNjcmliZXJzIG9mIDxiPiVzLyVzPC9iPiBiYXNlZCBvbiA8Yj4lczwvYj4gcmVsYXRpb25zaGlwIGV4Y2x1ZGluZyA8Yj4lczwvYj4gcmVsYXRpb25zaGlwJXMuJywgc2VsZjo6Z2V0VmFyKCdtZXNzYWdlJywgJHBrLCAnaWQnLCAnc3ViamVjdCcpLCBzZWxmOjpnZXRWYXIoJ3Byb2plY3QnLCAkcHJvamVjdCwgJ2lkJywgJ25hbWUnKSwgc2VsZjo6Z2V0VmFyKCdwcm9qZWN0JywgJHByb2plY3QsICdpZCcsICdwcm9qZWN0JyksICRyZWxbJ3JlbGF0aW9uc2hpcCddLCAkcmVsWydub3RfcmVsYXRpb25zaGlwJ10sICRyZWxbJ2hpcmVhYmxlJ10pOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGEgbWVzc2FnZSB0aGF0IHRoaXMgbWFpbCBsaXN0IGhhcyBubyBzdWJzY3JpcHRpb24NCgkJCQkJCXNlbGY6OiRtZXNzYWdlc1snRXJyb3InXVtdID0gVGV4dDo6c3ByaW50ZignVGhlcmUgd2FzIGFuIGVycm9yIHNlbmRpbmcgPGI+JXM8L2I+IHRvIHRoZSBzdWJzY3JpYmVycy4nLCBzZWxmOjpnZXRWYXIoJ21lc3NhZ2UnLCAkcGssICdpZCcsICdzdWJqZWN0JykpOw0KCQkJCQl9DQoJCQkJCS8vIGRvbid0IHNob3cgc3VjY2VzcyBtZXNzYWdlDQoJCQkJCSRzZW5kID0gZmFsc2U7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCWlmICgkcHJvamVjdCkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGEgbWVzc2FnZSB0aGF0IHRoaXMgbWFpbCBsaXN0IGhhcyBubyBzdWJzY3JpcHRpb24NCgkJCQkJCXNlbGY6OiRtZXNzYWdlc1snU3VjY2VzcyddW10gPSBUZXh0OjpzcHJpbnRmKCc8Yj4lczwvYj4gd2FzIHNlbmQgdG8gdGhlIHN1YnNjcmliZXJzIG9mIDxiPiVzLyVzPC9iPiBiYXNlZCBvbiA8Yj4lczwvYj4gcmVsYXRpb25zaGlwIGV4Y2x1ZGluZyA8Yj4lczwvYj4gcmVsYXRpb25zaGlwJXMuJywgc2VsZjo6Z2V0VmFyKCdtZXNzYWdlJywgJHBrLCAnaWQnLCAnc3ViamVjdCcpLCBzZWxmOjpnZXRWYXIoJ3Byb2plY3QnLCAkcHJvamVjdCwgJ2lkJywgJ25hbWUnKSwgc2VsZjo6Z2V0VmFyKCdwcm9qZWN0JywgJHByb2plY3QsICdpZCcsICdwcm9qZWN0JyksICRyZWxbJ3JlbGF0aW9uc2hpcCddLCAkcmVsWydub3RfcmVsYXRpb25zaGlwJ10sICRyZWxbJ2hpcmVhYmxlJ10pOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGEgbWVzc2FnZSB0aGF0IHRoaXMgbWFpbCBsaXN0IGhhcyBubyBzdWJzY3JpcHRpb24NCgkJCQkJCXNlbGY6OiRtZXNzYWdlc1snU3VjY2VzcyddW10gPSBUZXh0OjpzcHJpbnRmKCc8Yj4lczwvYj4gd2FzIHNlbmQgdG8gYWxsIHN1YnNjcmliZXJzLicsIHNlbGY6OmdldFZhcignbWVzc2FnZScsICRwaywgJ2lkJywgJ3N1YmplY3QnKSk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gZnJlZSBtZW1vcnkNCgkJCQl1bnNldCgkaXRlbXMpOw0KCQkJfQ0KCQkJcmV0dXJuICRzZW5kOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgU3Vic2NyaXB0aW9uIE1lc3NhZ2VzIG9mIE9uZSBEZXZlbG9wZXIgdGhhdCB3YXMgc2VuZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U3Vic2NyaXB0aW9uTWVzc2FnZXMoJGdpdGh1Yl9pZCwgJGRiID0gbnVsbCkNCgl7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24NCgkJaWYgKCEkZGIpDQoJCXsNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQl9DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkkcXVlcnktPnNlbGVjdCgNCgkJCSRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5KCdtLmlkJywgJ20uc3ViamVjdCcsICdtLnByb2plY3QnLCAncC5wcm9qZWN0JywgJ3AubmFtZScsICdtLnRleHRib2R5JyksIGFycmF5KCdtZXNzYWdlX2lkJywgJ3N1YmplY3QnLCAncHJvamVjdF9pZCcsICdwcm9qZWN0JywgJ3Byb2plY3RfbmFtZScsICd0ZXh0Ym9keScpDQoJCQkpDQoJCSk7DQoJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9zZW5kIHRhYmxlDQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3NlbmQnLCAnYScpKTsNCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9tZXNzYWdlJywgJ20nKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5tZXNzYWdlJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdtLmlkJykgLiAnKScpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3Byb2plY3QnLCAncCcpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdtLnByb2plY3QnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3AuaWQnKSAuICcpJyk7DQoJCS8vIG9ubHkgZ2V0IHRoaXMgZGV2ZWxvcGVyDQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EudXNlcicpIC4gJyA9ICcgLiAoaW50KSAkZ2l0aHViX2lkKTsNCgkJLy8gT3JkZXIgdGhlIHJlc3VsdHMgYnkgb3JkZXJpbmcNCgkJJHF1ZXJ5LT5vcmRlcignbS5zdWJqZWN0ICBBU0MnKTsNCgkJLy8gTG9hZCB0aGUgaXRlbXMNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gJGRiLT5sb2FkQXNzb2NMaXN0KCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCWdldCB0aGUgZGV2ZWxvcGVycyBnaXRodWIgSURzIG9mIGEgZ2l2ZW4gbGlzdCBvZiBQcm9qZWN0cyAoc3Vic2NyaWJlZCkNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFByb2plY3RzRGV2ZWxvcGVySURzKCRwcm9qZWN0cywgJGRiID0gbnVsbCkNCgl7DQoJCS8vIGNoZWNrIHRoYXQgaXQgaXMgYW4gYXJyYXkNCgkJaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcHJvamVjdHMpICYmIGlzX251bWVyaWMoJHByb2plY3RzKSkNCgkJew0KCQkJJHByb2plY3RzID0gYXJyYXkoJHByb2plY3RzKTsNCgkJfQ0KCQllbHNlaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcHJvamVjdHMpKQ0KCQl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbg0KCQlpZiAoISRkYikNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCX0NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJLy8gU2VsZWN0IHNvbWUgZmllbGRzDQoJCSRxdWVyeS0+c2VsZWN0KCd1c2VyJyk7DQoJCS8vIEZyb20gdGhlIFtbW0NvbXBvbmVudF1dXV9yZWxhdGlvbnNoaXBfYnVpbGRlcg0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbnNoaXBfYnVpbGRlcicsICdhJykpOw0KCQkvLyBvbmx5IGZvciB0aGUgc2VsZWN0ZWQgcHJvamVjdA0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnByb2plY3QnKSAuICcgSU4gKCcgLiBpbXBsb2RlKCcsICcsICRwcm9qZWN0cykgLiAnKScpOw0KCQkvLyBvbmx5IGdldCB1c2VycyBzdGlsbCBzdWJzY3JpYmVkDQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2Euc3RhdHVzJykgLiAnID0gMScpOw0KCQkvLyBMb2FkIHRoZSBpdGVtcw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCS8vIHJldHVybiBmb3VuZCBJRHMNCgkJCXJldHVybiBhcnJheV91bmlxdWUoKGFycmF5KSRkYi0+bG9hZENvbHVtbigpKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJZ2V0IFN1YnNjcmliZXJzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTdWJzY3JpYmVycygkcGssICYkcmVsLCAmJHByb2plY3QsICRkYiA9IG51bGwsICRzZWxlY3Rpb24gPSBudWxsLCAkZiA9ICdbZGV2ZWxvcGVyXycsICRiID0gJ10nLCAkcmVtb3ZlX3NlbmQgPSB0cnVlKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbg0KCQlpZiAoISRkYikNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCX0NCgkJLy8gZ2V0IHNlbGVjdGlvbg0KCQlpZiAoISRzZWxlY3Rpb24gfHwgIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZWxlY3Rpb24pKQ0KCQl7DQoJCQkkc2VsZWN0aW9uID0gc2VsZjo6Z2V0U2VsZWN0aW9uKCdkZXZlbG9wZXInLCAkZiwgJGIpOw0KCQl9DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkkcXVlcnktPnNlbGVjdCgNCgkJCSRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5X2tleXMoJHNlbGVjdGlvbiksIGFycmF5X3ZhbHVlcygkc2VsZWN0aW9uKQ0KCQkJKQ0KCQkpOw0KCQkvLyBGcm9tIHRoZSBbW1tDb21wb25lbnRdXV1fZGV2ZWxvcGVyIHRhYmxlDQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2RldmVsb3BlcicsICdhJykpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3JlbGF0aW9uc2hpcF9idWlsZGVyJywgJ3InKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5naXRodWJfaWQnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3IudXNlcicpIC4gJyknKTsNCgkJLy8gZ2V0IHRoZSBtZXNzYWdlDQoJCSRtZXNzYWdlID0gc2VsZjo6Z2V0TWVzc2FnZSgkcGssICRkYik7DQoJCS8vIGdldCB0aGUgbWVzc2FnZSBwcm9qZWN0DQoJCWlmIChpc3NldCgkbWVzc2FnZS0+cHJvamVjdCkgJiYgJG1lc3NhZ2UtPnByb2plY3QgPiAwKQ0KCQl7DQoJCQkkcHJvamVjdCA9ICRtZXNzYWdlLT5wcm9qZWN0Ow0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHByb2plY3QgPSBzZWxmOjpnZXRWYXIoJ21lc3NhZ2UnLCAkcGssICdpZCcsICdwcm9qZWN0Jyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgYSBwcm9qZWN0IElEDQoJCWlmICgkcHJvamVjdCA+IDApDQoJCXsNCgkJCS8vIG9ubHkgZGV2ZWxvcGVycyBwYXJ0IG9mIHRoaXMgcHJvamVjdA0KCQkJaWYgKCFzZWxmOjokZG9UZXN0KQ0KCQkJew0KCQkJCWlmICgkX2FjdGl2ZV9naXRodWJfdXNlcnMgPSBzZWxmOjpnZXRQcm9qZWN0c0RldmVsb3BlcklEcygkcHJvamVjdCwgJGRiKSkNCgkJCQl7DQoJCQkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgZXhjbHVkaW5nIHVzZXJzDQoJCQkJCWlmIChpc3NldCgkbWVzc2FnZS0+bm90X3Byb2plY3RzKSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkbWVzc2FnZS0+bm90X3Byb2plY3RzKSkNCgkJCQkJew0KCQkJCQkJLy8gY29udmVydCB0byBhbiBhcnJheQ0KCQkJCQkJJG5vdF9wcm9qZWN0cyA9IChhcnJheSkganNvbl9kZWNvZGUoJG1lc3NhZ2UtPm5vdF9wcm9qZWN0cywgdHJ1ZSk7DQoJCQkJCQkvLyByZW1vdmUgdXNlcnMgZnJvbSBhY3RpdmUgaWYgZm91bmQNCgkJCQkJCWlmICgkX3JlbW92ZV91c2VycyA9IHNlbGY6OmdldFByb2plY3RzRGV2ZWxvcGVySURzKCRub3RfcHJvamVjdHMsICRkYikpDQoJCQkJCQl7DQoJCQkJCQkJJF9hY3RpdmVfZ2l0aHViX3VzZXJzID0gYXJyYXlfZGlmZigkX2FjdGl2ZV9naXRodWJfdXNlcnMsICRfcmVtb3ZlX3VzZXJzKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBub3cgY2hlY2sgaWYgd2UgY2FuIGNvbnRpbnVlDQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRfYWN0aXZlX2dpdGh1Yl91c2VycykpDQoJCQkJew0KCQkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmdpdGh1Yl9pZCcpIC4gJyAgSU4gKCcgLiBpbXBsb2RlKCcsICcsICRfYWN0aXZlX2dpdGh1Yl91c2VycykgLiAnKScpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlyZXR1cm4gZmFsc2U7IC8vIHdlIG11c3QgaGF2ZSBzdWJzY3JpYmVycw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXJldHVybiBmYWxzZTsgLy8gbWF5YmUgbGF0ZXIgd2UgY2FuIGFsbG93IGJ1aWxkIG9yIGdsb2JhbCBlbWFpbCAoVE9ETykNCgkJfQ0KCQkvLyBmaWx0ZXIgYnkgcmVsYXRpb25zaGlwDQoJCSRyZWxfdGFyZ2V0cyA9IGFycmF5KA0KCQkJJ3JlbGF0aW9uc2hpcCcgPT4gYXJyYXkoJ29wZXJhdG9yJyA9PiAnSU4nLCAnZmllbGQnID0+ICdyLnJlbGF0aW9uc2hpcCcpLA0KCQkJJ25vdF9yZWxhdGlvbnNoaXAnID0+IGFycmF5KCdvcGVyYXRvcicgPT4gJ05PVCBJTicsICdmaWVsZCcgPT4gJ3IucmVsYXRpb25zaGlwJykpOw0KCQkkdG1wID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJHJlbF90YXJnZXRzIGFzICRfcmVsID0+ICRfdGFyZ2V0KQ0KCQl7DQoJCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJG1lc3NhZ2UtPnskX3JlbH0pKQ0KCQkJew0KCQkJCS8vIGNvbnZlcnQgdG8gYW4gYXJyYXkNCgkJCQkkdG1wWyRfcmVsXSA9IChhcnJheSkganNvbl9kZWNvZGUoJG1lc3NhZ2UtPnskX3JlbH0sIHRydWUpOw0KCQkJCS8vIGNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBhbiBhcnJheQ0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdG1wWyRfcmVsXSkpDQoJCQkJew0KCQkJCQlpZiAoIXNlbGY6OiRkb1Rlc3QpDQoJCQkJCXsNCgkJCQkJCS8vIG9ubHkgZ2V0IHVzZXJzIHdobyBoYXMgdGhlIGNvcnJlY3QgcmVsYXRpb25zaGlwDQoJCQkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCRfdGFyZ2V0WydmaWVsZCddKSAuJyAnLiRfdGFyZ2V0WydvcGVyYXRvciddLicgKCcgLiBpbXBsb2RlKCcsICcsICR0bXBbJF9yZWxdKSAuICcpJyk7DQoJCQkJCX0NCgkJCQkJLy8gdXBkYXRlIHRoZSByZWxhdGlvbnNoaXAgc3RyaW5nDQoJCQkJCSRidWNrZXQgPSBhcnJheSgpOw0KCQkJCQlmb3JlYWNoICgkdG1wWyRfcmVsXSBhcyAkcmVsX2lkKQ0KCQkJCQl7DQoJCQkJCQkvLyBTZXQgdGhlIG5hbWUuDQoJCQkJCQlpZiAoaXNzZXQoc2VsZjo6JHJlbGF0aW9uc2hpcE5hbWVbJHJlbF9pZF0pKQ0KCQkJCQkJew0KCQkJCQkJCSRidWNrZXRbXSA9IHNlbGY6OiRyZWxhdGlvbnNoaXBOYW1lWyRyZWxfaWRdOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIGRvIHdlIGhhdmUgYW4gYXJyYXkNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJCQl7DQoJCQkJCQkkcmVsWyRfcmVsXSA9IGltcGxvZGUoJywgJywgJGJ1Y2tldCk7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gZmlsdGVyIGJhc2VkIG9uIGhpcmVhYmxlDQoJCWlmIChzZWxmOjokZG9UZXN0KQ0KCQl7DQoJCQkkcmVsWydoaXJlYWJsZSddID0gJyAnLiBUZXh0OjpfKCdhbmQgaXMgdGVzdGFibGUnKTsNCgkJfQ0KCQllbHNlaWYgKGlzc2V0KCRtZXNzYWdlLT5oaXJlYWJsZSkpDQoJCXsNCgkJCWlmICgkbWVzc2FnZS0+aGlyZWFibGUgPT0gMSkNCgkJCXsNCgkJCQkvLyBsb2FkIG9ubHkgdGhvc2UgaGlyZWFibGUNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmhpcmVhYmxlJykgLiAnID0gMScpOw0KCQkJCSRyZWxbJ2hpcmVhYmxlJ10gPSAnICcuIFRleHQ6Ol8oJ2FuZCBpcyBoaXJlYWJsZScpOw0KCQkJfQ0KCQkJZWxzZWlmICgkbWVzc2FnZS0+aGlyZWFibGUgPT0gMikNCgkJCXsNCgkJCQkvLyBsb2FkIGJvdGgNCgkJCQkkcmVsWydoaXJlYWJsZSddID0gJyc7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gbG9hZCBvbmx5IHRob3NlIHdobyBhcmVuJ3QgaGlyZWFibGUNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmhpcmVhYmxlJykgLiAnID0gMCcpOw0KCQkJCSRyZWxbJ2hpcmVhYmxlJ10gPSAnICcuIFRleHQ6Ol8oImFuZCBpc24ndCBoaXJlYWJsZSIpOw0KCQkJfQ0KCQl9DQoJCS8vIG9ubHkgaWYgbm90IGEgdGVzdA0KCQlpZiAoIXNlbGY6OiRkb1Rlc3QpDQoJCXsNCgkJCS8vIG9ubHkgZ2V0IHB1Ymxpc2hlZCB1c2Vycw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5wdWJsaXNoZWQnKSAuICcgPSAxJyk7DQoJCQkvLyBvbmx5IGdldCB1c2VycyB3aXRoIGVtYWlscw0KCQkJJHF1ZXJ5LT53aGVyZSgkcXVlcnktPmNoYXJMZW5ndGgoJ2EuZW1haWwnKS4nID4gNCcpOw0KCQkJLy8gT3JkZXIgdGhlIHJlc3VsdHMgYnkgb3JkZXJpbmcNCgkJCSRxdWVyeS0+b3JkZXIoJ2EubG9naW4gIEFTQycpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gb25seSBnZXQgdGhlIHRlc3Rlcg0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcgLiAoaW50KSBzZWxmOjpnZXRUZXN0ZXIoKSk7DQoJCX0NCgkJLy8gTG9hZCB0aGUgaXRlbXMNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkvLyBpbnN1cmUgaXQgbG9hZHMgZWFjaCB1c2VyIG9ubHkgb25jZQ0KCQkJJGl0ZW1zID0gJGRiLT5sb2FkQXNzb2NMaXN0KCRmLidnaXRodWJfaWQnLiRiKTsNCgkJCS8vIHNldCB2YWx1ZXMgdG8gZGlzcGxheSBjb3JyZWN0bHkuDQoJCQlmb3JlYWNoICgkaXRlbXMgYXMgJG5yID0+ICYkaXRlbSkNCgkJCXsNCgkJCQkvLyBjaGVjayBpZiB0aGlzIHVzZXIgYWxyZWFkeSByZWNlaXZlZCB0aGUgbWVzc2FnZQ0KCQkJCWlmICghc2VsZjo6JGRvVGVzdCAmJiAkcmVtb3ZlX3NlbmQgJiYgc2VsZjo6d2FzU2VuZCgkcGssICRpdGVtWyRmLidnaXRodWJfaWQnLiRiXSwgJGRiKSkNCgkJCQl7DQoJCQkJCS8vIGFscmVhZHkgcmVjZWl2ZWQgdGhpcyBtZXNzYWdlDQoJCQkJCXVuc2V0KCRpdGVtc1skbnJdKTsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCS8vIGZpeCBuYW1lIGlmIG5vbmUgZm91bmQNCgkJCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtWyRmLiduYW1lJy4kYl0pKQ0KCQkJCXsNCgkJCQkJJGl0ZW1bJGYuJ25hbWUnLiRiXSA9ICRpdGVtWyRmLid1c2VybmFtZScuJGJdOw0KCQkJCX0NCgkJCQkvLyBzZXQgcmVsYXRpb25zaGlwIG5hbWVzDQoJCQkJaWYgKCFzZWxmOjokZG9UZXN0ICYmICRwcm9qZWN0KQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoaXMgdXNlcyByZWxhdGlvbnNoaXANCgkJCQkJJHJlbGF0aW9uc2hpcCA9IHNlbGY6OmdldFJlbGF0aW9uc2hpcHMoJHByb2plY3QsICRpdGVtWyRmLidnaXRodWJfaWQnLiRiXSk7DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcmVsYXRpb25zaGlwKSkNCgkJCQkJew0KCQkJCQkJLy8gZG8gYSBzZWNvbmQgcm91bmQgdG8gcmVtb3ZlIGlmIGluIGEgbm90IHJlbGF0aW9uc2hpcA0KCQkJCQkJaWYgKGlzc2V0KCR0bXBbJ25vdF9yZWxhdGlvbnNoaXAnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRtcFsnbm90X3JlbGF0aW9uc2hpcCddKSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBnZXQgdGhlIHJlbGF0aW9uc2hpcCBhcnJheQ0KCQkJCQkJCSRyZWxhdGlvbnNoaXBBcnJheSA9IChhcnJheSkgYXJyYXlfbWFwKCBmdW5jdGlvbiAoJHJlbGF0aW9uKSB7IHJldHVybiAkcmVsYXRpb24tPnJlbGF0aW9uc2hpcDsgfSwgJHJlbGF0aW9uc2hpcCk7DQoJCQkJCQkJaWYgKGFycmF5X2ludGVyc2VjdCgkdG1wWydub3RfcmVsYXRpb25zaGlwJ10sICRyZWxhdGlvbnNoaXBBcnJheSkpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBoYXMgYSBub3QgcmVsYXRpb25zaGlwDQoJCQkJCQkJCXVuc2V0KCRpdGVtc1skbnJdKTsNCgkJCQkJCQkJY29udGludWU7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJJGl0ZW1bJGYuJ3JlbGF0aW9uc2hpcHMnLiRiXSA9IGltcGxvZGUoJywgJywgYXJyYXlfbWFwKCBmdW5jdGlvbiAoJHJlbGF0aW9uKSB7IHJldHVybiAkcmVsYXRpb24tPnJlbGF0aW9uc2hpcF9uYW1lOyB9LCAkcmVsYXRpb25zaGlwKSk7DQoJCQkJCX0NCgkJCQkJZWxzZWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkcmVsYXRpb25zaGlwKSkNCgkJCQkJew0KCQkJCQkJLy8gZG8gYSBzZWNvbmQgcm91bmQgdG8gcmVtb3ZlIGlmIGluIGEgbm90IHJlbGF0aW9uc2hpcA0KCQkJCQkJaWYgKGlzc2V0KCR0bXBbJ25vdF9yZWxhdGlvbnNoaXAnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRtcFsnbm90X3JlbGF0aW9uc2hpcCddKSkNCgkJCQkJCXsNCgkJCQkJCQlpZiAoaW5fYXJyYXkoJHJlbGF0aW9uc2hpcC0+cmVsYXRpb25zaGlwLCAkdG1wWydub3RfcmVsYXRpb25zaGlwJ10pKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gaGFzIGEgbm90IHJlbGF0aW9uc2hpcA0KCQkJCQkJCQl1bnNldCgkaXRlbXNbJG5yXSk7DQoJCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCSRpdGVtWyRmLidyZWxhdGlvbnNoaXBzJy4kYl0gPSAkcmVsYXRpb25zaGlwLT5yZWxhdGlvbnNoaXBfbmFtZTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSRpdGVtWyRmLidyZWxhdGlvbnNoaXBzJy4kYl0gPSAnJzsNCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKHNlbGY6OiRkb1Rlc3QpDQoJCQkJew0KCQkJCQkkaXRlbVskZi4ncmVsYXRpb25zaGlwcycuJGJdID0gJ3Rlc3Rlcic7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIGl0ZW1zDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGl0ZW1zKSkNCgkJCXsNCgkJCQlyZXR1cm4gJGl0ZW1zOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWlmICgkcHJvamVjdCkNCgkJCQl7DQoJCQkJCS8vIHNldCBhIG1lc3NhZ2UgdGhhdCB0aGlzIG1haWwgbGlzdCBoYXMgbm8gc3Vic2NyaXB0aW9uDQoJCQkJCXNlbGY6OiRtZXNzYWdlc1snTm90aWNlJ11bXSA9IFRleHQ6OnNwcmludGYoJ0FsbCBzdWJzY3JpYmVycyB0byA8Yj4lcy8lczwvYj4gaGFzIGFscmVhZHkgcmVjZWl2ZWQgPGI+JXM8L2I+IGJhc2VkIG9uIDxiPiVzPC9iPiByZWxhdGlvbnNoaXAgZXhjbHVkaW5nIDxiPiVzPC9iPiByZWxhdGlvbnNoaXAlcy4nLCBzZWxmOjpnZXRWYXIoJ3Byb2plY3QnLCAkcHJvamVjdCwgJ2lkJywgJ25hbWUnKSwgc2VsZjo6Z2V0VmFyKCdwcm9qZWN0JywgJHByb2plY3QsICdpZCcsICdwcm9qZWN0JyksIHNlbGY6OmdldFZhcignbWVzc2FnZScsICRwaywgJ2lkJywgJ3N1YmplY3QnKSwgJHJlbFsncmVsYXRpb25zaGlwJ10sICRyZWxbJ25vdF9yZWxhdGlvbnNoaXAnXSwgJHJlbFsnaGlyZWFibGUnXSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCS8vIHNldCBhIG1lc3NhZ2UgdGhhdCB0aGlzIG1haWwgbGlzdCBoYXMgbm8gc3Vic2NyaXB0aW9uDQoJCQkJCXNlbGY6OiRtZXNzYWdlc1snTm90aWNlJ11bXSA9IFRleHQ6OnNwcmludGYoJ0FsbCBzdWJzY3JpYmVycyBoYXZlIGFscmVhZHkgcmVjZWl2ZWQgPGI+JXM8L2I+LicsIHNlbGY6OmdldFZhcignbWVzc2FnZScsICRwaywgJ2lkJywgJ3N1YmplY3QnKSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJaWYgKCRwcm9qZWN0KQ0KCQkJew0KCQkJCS8vIHNldCBhIG1lc3NhZ2UgdGhhdCB0aGlzIG1haWwgbGlzdCBoYXMgbm8gc3Vic2NyaXB0aW9uDQoJCQkJc2VsZjo6JG1lc3NhZ2VzWydXYXJuaW5nJ11bXSA9IFRleHQ6OnNwcmludGYoJ1RoZXJlIGFyZSBubyBzdWJzY3JpYmVycyBmb3IgPGI+JXMvJXM8L2I+IGJhc2VkIG9uIDxiPiVzPC9iPiByZWxhdGlvbnNoaXAgZXhjbHVkaW5nIDxiPiVzPC9iPiByZWxhdGlvbnNoaXAlcywgc28gPGI+JXM8L2I+IGNhbiBub3QgYmUgc2VuZCBhdCB0aGlzIHRpbWUuJywgc2VsZjo6Z2V0VmFyKCdwcm9qZWN0JywgJHByb2plY3QsICdpZCcsICduYW1lJyksIHNlbGY6OmdldFZhcigncHJvamVjdCcsICRwcm9qZWN0LCAnaWQnLCAncHJvamVjdCcpLCAkcmVsWydyZWxhdGlvbnNoaXAnXSwgJHJlbFsnbm90X3JlbGF0aW9uc2hpcCddLCAkcmVsWydoaXJlYWJsZSddLCBzZWxmOjpnZXRWYXIoJ21lc3NhZ2UnLCAkcGssICdpZCcsICdzdWJqZWN0JykpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHNldCBhIG1lc3NhZ2UgdGhhdCB0aGlzIG1haWwgbGlzdCBoYXMgbm8gc3Vic2NyaXB0aW9uDQoJCQkJc2VsZjo6JG1lc3NhZ2VzWydXYXJuaW5nJ10gPSBUZXh0OjpzcHJpbnRmKCdUaGVyZSBhcmUgbm8gc3Vic2NyaWJlcnMgZm9yIDxiPiVzPC9iPiBhdCB0aGlzIHRpbWUuJywgc2VsZjo6Z2V0VmFyKCdtZXNzYWdlJywgJHBrLCAnaWQnLCAnc3ViamVjdCcpKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJR2V0IHRoZSB0ZXN0ZXINCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFRlc3RlcigpDQoJew0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokcGFyYW1zLT5nZXQoJ3Rlc3RlcicsIDApOw0KCX0NCg0KCS8qKg0KCSogCUdldCB0aGUgdW5zdWJzY3JpYmUga2V5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRVbnN1YnNjcmliZUtleSgpDQoJew0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokcGFyYW1zLT5nZXQoJ3Vuc3Vic2NyaWJlX2tleScsICd0aDFzTXVzdEIzTE9jazNkIW5Tb20zRjBybScpOw0KCX0NCg0KCS8qKg0KCSogCUdldCB0aGUgdW5zdWJzY3JpYmUgdXJsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRVbnN1YnNjcmliZVVybCgpDQoJew0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokcGFyYW1zLT5nZXQoJ3Vuc3Vic2NyaWJlX3VybCcsICcjJyk7DQoJfQ0KDQoJLyoqDQoJKiAJU2VuZCBtZXNzYWdlcyBub3cNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNlbmRNZXNzYWdlc05vdygkaXRlbXMsICRtZXNzYWdlX2lkLCAkcHJvamVjdF9pZCwgJGRiID0gbnVsbCkNCgl7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24NCgkJaWYgKCEkZGIpDQoJCXsNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQl9DQoJCS8vIGdldCB0aGUgbWVzc2FnZQ0KCQlpZiAoISRtZXNzYWdlID0gc2VsZjo6Z2V0TWVzc2FnZSgkbWVzc2FnZV9pZCwgJGRiKSkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCS8vIGNoZWNrIHRoYXQgd2UgaGF2ZSBhIG1lc3NhZ2UgaHRtbCBib2R5DQoJCWlmICghaXNzZXQoJG1lc3NhZ2UtPmh0bWxib2R5KSB8fCAhU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJG1lc3NhZ2UtPmh0bWxib2R5KSkNCgkJew0KCQkJRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKS0+ZW5xdWV1ZU1lc3NhZ2UoVGV4dDo6c3ByaW50ZignVGhlcmUgd2FzIGFuIGVycm9yIHNlbmRpbmcgPGI+JXM8L2I+IHNpbmNlIGl0IGhhcyBubyBodG1sIHNldC4nLCAkbWVzc2FnZS0+c3ViamVjdCksICdFcnJvcicpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCS8vIGJ1aWxkIGdsb2JhbCB2YWx1ZXMNCgkJJGdsb2JhbCA9IGFycmF5KCk7DQoJCS8vIGFkZCBmb290ZXIgJiBoZWFkZXINCgkJJGdsb2JhbFtdID0gYXJyYXkoJ1tkb2N1bWVudF9mb290ZXJdJyA9PiBzZWxmOjpnZXRUZW1wbGF0ZSgnZG9jX2Zvb3RlcicsICcnKSwgJ1tkb2N1bWVudF9oZWFkZXJdJyA9PiBzZWxmOjpnZXRUZW1wbGF0ZSgnZG9jX2hlYWRlcicsICcnKSwgJ1t0ZXh0X2Zvb3Rlcl0nID0+IHNlbGY6OmdldFRlbXBsYXRlKCd0ZXh0X2Zvb3RlcicsICcnKSwgJ1t0ZXh0X2hlYWRlcl0nID0+IHNlbGY6OmdldFRlbXBsYXRlKCd0ZXh0X2hlYWRlcicsICcnKSk7DQoJCS8vIGdldCBjb21wYW55IGRldGFpbHMNCgkJJGdsb2JhbFtdID0gc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJyk7DQoJCS8vIGdldCBwcm9qZWN0IGRldGFpbHMNCgkJaWYgKCRwcm9qZWN0X2lkKQ0KCQl7DQoJCQkkZ2xvYmFsW10gPSBzZWxmOjpnZXRQcm9qZWN0cygkcHJvamVjdF9pZCwgJGRiLCBmYWxzZSwgdHJ1ZSk7DQoJCX0NCgkJLy8gY29tYmluZQ0KCQkkZ2xvYmFsID0gc2VsZjo6bWVyZ2VBcnJheXMoJGdsb2JhbCk7DQoJCS8vIGdldCB0aGUgdW5zdWJzY3JpYmUga2V5DQoJCSRrZXlVbnN1YnNjcmliZSA9IHNlbGY6OmdldFVuc3Vic2NyaWJlS2V5KCk7DQoJCS8vIGdldCB0aGUgdW5zdWJzY3JpYmUgdXJsDQoJCSR1cmxVbnN1YnNjcmliZSA9IHNlbGY6OmdldFVuc3Vic2NyaWJlVXJsKCk7DQoJCS8vIHN0YXJ0IHRoZSBlbmdpbmUNCgkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQl7DQoJCQkvLyBsb2FkIHRvIHByb2plY3QgZGV0YWlscw0KCQkJJGl0ZW1bJ1twcm9qZWN0X25hbWVdJ10gPSAkZ2xvYmFsWydbcHJvamVjdF9uYW1lXSddOw0KCQkJJGl0ZW1bJ1twcm9qZWN0X3Byb2plY3RdJ10gPSAkZ2xvYmFsWydbcHJvamVjdF9wcm9qZWN0XSddOw0KCQkJJGl0ZW1bJ1twcm9qZWN0X2Rlc2NyaXB0aW9uXSddID0gJGdsb2JhbFsnW3Byb2plY3RfZGVzY3JpcHRpb25dJ107DQoJCQkkaXRlbVsnW3Byb2plY3Rfc2hvcnRfZGVzY3JpcHRpb25dJ10gPSAkZ2xvYmFsWydbcHJvamVjdF9zaG9ydF9kZXNjcmlwdGlvbl0nXTsNCgkJCS8vIHNldCB1bnN1YnNjcmliZQ0KCQkJJHVuc3Vic2NyaWJlID0gJHVybFVuc3Vic2NyaWJlIC4gc2VsZjo6bG9jaygkaXRlbSwgJGtleVVuc3Vic2NyaWJlLCAwKTsNCgkJCS8vIGxvYWQgdG8gZW1haWwgdGhlIHVuc3Vic2NyaWJlDQoJCQkkaXRlbVsnW3Vuc3Vic2NyaWJlX2xpbmtdJ10gPSAnPGEgaHJlZj0iJyAuICR1bnN1YnNjcmliZSAuICciIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iJyAuIFRleHQ6Ol8oJ1Vuc3Vic2NyaWJlJykgLiAnIj4nIC4gVGV4dDo6XygnVW5zdWJzY3JpYmUnKSAuICc8L2E+JzsNCgkJCSRpdGVtWydbdW5zdWJzY3JpYmVfdXJsXSddID0gJHVuc3Vic2NyaWJlOw0KCQkJLy8gc2V0IHBsYWNlaG9sZGVycw0KCQkJJHBsYWNlaG9sZGVycyA9IHNlbGY6Om1lcmdlQXJyYXlzKGFycmF5KCRnbG9iYWwsICRpdGVtKSk7DQoJCQkvLyBnZXQgdGhlIGJvZHkgZm9yIGJvdGggaHRtbCBhbmQgdGV4dA0KCQkJJGh0bWwgPSBzZWxmOjpzZXREeW5hbWljRGF0YSgkbWVzc2FnZS0+aHRtbGJvZHksICRwbGFjZWhvbGRlcnMpOw0KCQkJJHRleHQgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJG1lc3NhZ2UtPnRleHRib2R5KSkgPyBzZWxmOjpzZXREeW5hbWljRGF0YSgkbWVzc2FnZS0+dGV4dGJvZHksICRwbGFjZWhvbGRlcnMpIDogJyc7DQoJCQkvLyBzZXQgdGhlIHN1YmplY3QNCgkJCSRzdWJqZWN0ID0gKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRtZXNzYWdlLT5zdWJqZWN0KSkgPyBzZWxmOjpzZXREeW5hbWljRGF0YSgkbWVzc2FnZS0+c3ViamVjdCwgJHBsYWNlaG9sZGVycykgOiBUZXh0OjpfKCdObyBzdWJqZWN0IHdhcyBzZXQnKTsNCgkJCS8vIGFkZCBzb21lIGN1c3RvbSBlbWFpbCBoZWFkZXJzDQoJCQlbW1tDb21wb25lbnRdXV1FbWFpbDo6c2V0SGVhZGVyKCdMaXN0LVVuc3Vic2NyaWJlJywgJzwnIC4gJHVuc3Vic2NyaWJlIC4gJz4nKTsNCgkJCS8vIG5vdyBzZW5kIHRoZSBlbWFpbA0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRodG1sKSAmJiAkcmVzdWx0ID0gW1tbQ29tcG9uZW50XV1dRW1haWw6OnNlbmQoJGl0ZW1bJ1tkZXZlbG9wZXJfZW1haWxdJ10sICRzdWJqZWN0LCBbW1tDb21wb25lbnRdXV1FbWFpbDo6c2V0VGFibGVCb2R5KCRodG1sLCAkc3ViamVjdCksICR0ZXh0LCAxKSkNCgkJCXsNCgkJCQkvLyB1cGRhdGUgdGhlIHNlbmQgdGFibGUgdG8gbWFrZSBzdXJlIHdlIGRvIG5vdCBzZW5kIHRoaXMgbWVzc2FnZSB0byB0aGlzIGRldmVsb3BlciBhZ2Fpbg0KCQkJCXNlbGY6Om1lc3NhZ2VTZW5kKCRtZXNzYWdlX2lkLCAkaXRlbVsnW2RldmVsb3Blcl9naXRodWJfaWRdJ10sICRkYik7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJKiAJc2V0IHRoYXQgdGhlIG1lc3NhZ2Ugd2FzIHNlbmQNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1lc3NhZ2VTZW5kKCRtZXNzYWdlX2lkLCAkdXNlciwgJGRiID0gbnVsbCkNCgl7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24NCgkJaWYgKCEkZGIpDQoJCXsNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQl9DQoJCS8vIHVwZGF0ZSB0aGUgdGFibGUNCgkJJG9iamVjdCA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJJG9iamVjdC0+dXNlciA9IChpbnQpICR1c2VyOw0KCQkkb2JqZWN0LT5tZXNzYWdlID0gKGludCkgJG1lc3NhZ2VfaWQ7DQoJCSRkYi0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc2VuZCcsICRvYmplY3QpOw0KCX0NCg0KCS8qKg0KCSogCWNoZWNrIGlmIGEgbWVzc2FnZSB3YXMgc2VuZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd2FzU2VuZCgkbWVzc2FnZV9pZCwgJHVzZXIsICRkYiA9IG51bGwpDQoJew0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uDQoJCWlmICghJGRiKQ0KCQl7DQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJfQ0KCQkvLyBzdGFydCB0aGUgcXVlcnkNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJLy8gU2VsZWN0IGFsbCB0aGUgdmFsdWVzIGluIHRoZSBtZXNzYWdlDQoJCSRxdWVyeS0+c2VsZWN0KCdhLionKTsNCgkJJHF1ZXJ5LT5mcm9tKCcjX19bW1tjb21wb25lbnRdXV1fc2VuZCBBUyBhJyk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EubWVzc2FnZScpIC4gJyA9ICcgLiAoaW50KSAkbWVzc2FnZV9pZCk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EudXNlcicpIC4gJyA9ICcgLiAoaW50KSAkdXNlcik7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCW1lc3NhZ2VzIGluIG1lbW9yeQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG1hc3NhZ2VNZW1vcnkgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJZ2V0IGEgbWVzc2FnZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TWVzc2FnZSgkbWVzc2FnZV9pZCwgJGRiID0gbnVsbCkNCgl7DQoJCWlmICghaXNzZXQoc2VsZjo6JG1hc3NhZ2VNZW1vcnlbJG1lc3NhZ2VfaWRdKSkNCgkJew0KCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbg0KCQkJaWYgKCEkZGIpDQoJCQl7DQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQl9DQoJCQkvLyBzdGFydCB0aGUgcXVlcnkNCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkvLyBTZWxlY3QgYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIG1lc3NhZ2UNCgkJCSRxdWVyeS0+c2VsZWN0KCdhLionKTsNCgkJCSRxdWVyeS0+ZnJvbSgnI19fW1tbY29tcG9uZW50XV1dX21lc3NhZ2UgQVMgYScpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcgLiAoaW50KSAkbWVzc2FnZV9pZCk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQlzZWxmOjokbWFzc2FnZU1lbW9yeVskbWVzc2FnZV9pZF0gPSAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlzZWxmOjokbWFzc2FnZU1lbW9yeVskbWVzc2FnZV9pZF0gPSBmYWxzZTsNCgkJCX0NCgkJfQ0KCQkvLyByZXR1cm4gdGhlIG1lc3NhZ2UNCgkJcmV0dXJuIHNlbGY6OiRtYXNzYWdlTWVtb3J5WyRtZXNzYWdlX2lkXTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlbGF0aW9uc2hpcHMoJHByb2plY3QgPSBudWxsLCAkdXNlciA9IG51bGwsICRyZWwgPSBudWxsLCAkZGIgPSBudWxsKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbg0KCQlpZiAoISRkYikNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCX0NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJLy8gU2VsZWN0IGFsbCB0aGUgdmFsdWVzIGluIHRoZSByZWxhdGlvbnNoaXAgYnVpbGRlcg0KCQkkcXVlcnktPnNlbGVjdCgnYS4qJyk7DQoJCS8vIGxpbmsgaW4gdGhlIG90aGVyIHZhbHVlcw0KCQkkcXVlcnktPnNlbGVjdCgNCgkJCSRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5KA0KCQkJCQknZC5sb2dpbicsDQoJCQkJCSdkLmVtYWlsJywNCgkJCQkJJ3AubmFtZScsDQoJCQkJCSdwLnByb2plY3QnDQoJCQkJKSwgYXJyYXkoDQoJCQkJCSdsb2dpbicsDQoJCQkJCSdlbWFpbCcsDQoJCQkJCSdvd25lcicsDQoJCQkJCSdwcm9qZWN0X25hbWUnDQoJCQkJKQ0KCQkJKQ0KCQkpOw0KCQkkcXVlcnktPmZyb20oJyNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbnNoaXBfYnVpbGRlciBBUyBhJyk7DQoJCS8vIG9ubHkgY2hlY2sgZm9yIHVzZXIgaWYgc2V0DQoJCWlmICgkdXNlcikNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS51c2VyJykgLiAnID0gJyAuIChpbnQpICR1c2VyKTsNCgkJfQ0KCQkvLyBvbmx5IGNoZWNrIGZvciBwcm9qZWN0IGlmIHNldA0KCQlpZiAoJHByb2plY3QpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EucHJvamVjdCcpIC4gJyA9ICcgLiAoaW50KSAkcHJvamVjdCk7DQoJCX0NCgkJLy8gb25seSBjaGVjayBmb3IgcmVsYXRpb25zaGlwIGlmIHNldA0KCQlpZiAoJHJlbCkNCgkJew0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5yZWxhdGlvbnNoaXAnKSAuICcgPSAnIC4gKGludCkgJHJlbCk7DQoJCX0NCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9kZXZlbG9wZXInLCAnZCcpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnVzZXInKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2QuZ2l0aHViX2lkJykgLiAnKScpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3Byb2plY3QnLCAncCcpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnByb2plY3QnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3AuaWQnKSAuICcpJyk7DQoJCS8vIHNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCSRudW1iZXIgPSAkZGItPmdldE51bVJvd3MoKTsNCgkJaWYgKCRudW1iZXIgPT0gMSkNCgkJew0KCQkJLy8gbG9hZCB0aGUgaXRlbQ0KCQkJJGl0ZW0gPSAkZGItPmxvYWRPYmplY3QoKTsNCgkJCS8vIHNldCB0aGUgbmFtZQ0KCQkJaWYgKGlzc2V0KHNlbGY6OiRyZWxhdGlvbnNoaXBOYW1lWyRpdGVtLT5yZWxhdGlvbnNoaXBdKSkNCgkJCXsNCgkJCQkkaXRlbS0+cmVsYXRpb25zaGlwX25hbWUgPSBzZWxmOjokcmVsYXRpb25zaGlwTmFtZVskaXRlbS0+cmVsYXRpb25zaGlwXTsNCgkJCX0NCgkJCXJldHVybiAkaXRlbTsNCgkJfQ0KCQllbHNlaWYgKCRudW1iZXIgPiAxKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBpdGVtcw0KCQkJJGl0ZW1zID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRuciA9PiAmJGl0ZW0pDQoJCQl7DQoJCQkJLy8gc2V0IHRoZSBuYW1lDQoJCQkJaWYgKGlzc2V0KHNlbGY6OiRyZWxhdGlvbnNoaXBOYW1lWyRpdGVtLT5yZWxhdGlvbnNoaXBdKSkNCgkJCQl7DQoJCQkJCSRpdGVtLT5yZWxhdGlvbnNoaXBfbmFtZSA9IHNlbGY6OiRyZWxhdGlvbnNoaXBOYW1lWyRpdGVtLT5yZWxhdGlvbnNoaXBdOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkaXRlbXM7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VG9rZW4oJiR0b2tlbnMpDQoJew0KCQkkdG9rZW5zID0gYXJyYXlfdmFsdWVzKCR0b2tlbnMpOw0KCQkkdG9rZW4gPSBhcnJheV9zaGlmdCgkdG9rZW5zKTsNCgkJYXJyYXlfcHVzaCgkdG9rZW5zLCAkdG9rZW4pOw0KCQlyZXR1cm4gJHRva2VuWyd0b2tlbiddOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJvamVjdHMoJGlkID0gbnVsbCwgJGRiID0gbnVsbCwgJGp1c3RUb2tlbnMgPSBmYWxzZSwgJHBsYWNlaG9sZGVycyA9IGZhbHNlKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbg0KCQlpZiAoISRkYikNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCX0NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJLy8gU2VsZWN0IGFsbCB0aGUgdmFsdWVzIGluIHRoZSBmaWVsZA0KCQlpZiAoJHBsYWNlaG9sZGVycykNCgkJew0KCQkJJHNlbGVjdGlvbiA9IHNlbGY6OmdldFNlbGVjdGlvbigncHJvamVjdCcsICdbcHJvamVjdF8nLCAnXScpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHNlbGVjdGlvbiA9IHNlbGY6OmdldFNlbGVjdGlvbigncHJvamVjdCcpOw0KCQl9DQoJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkkcXVlcnktPnNlbGVjdCgNCgkJCSRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5X2tleXMoJHNlbGVjdGlvbiksIGFycmF5X3ZhbHVlcygkc2VsZWN0aW9uKQ0KCQkJKQ0KCQkpOw0KCQkkcXVlcnktPmZyb20oJyNfX1tbW2NvbXBvbmVudF1dXV9wcm9qZWN0IEFTIGEnKTsNCgkJaWYgKGlzX251bWVyaWMoJGlkKSAmJiAkaWQgPiAwKQ0KCQl7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmlkJykgLiAnID0gJyAuIChpbnQpICRpZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnB1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJfQ0KCQkvLyBzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkkbnVtYmVyID0gJGRiLT5nZXROdW1Sb3dzKCk7DQoJCS8vIGdldCBkZXRhaWxzIG9mIG9uZSBwcm9qZWN0IGFzIHBsYWNlaG9sZGVycw0KCQlpZiAoJHBsYWNlaG9sZGVycyAmJiAkbnVtYmVyID09IDEpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRBc3NvYygpOw0KCQl9DQoJCWVsc2VpZiAoISRwbGFjZWhvbGRlcnMgJiYgJG51bWJlciA9PSAxKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBpdGVtDQoJCQkkaXRlbSA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJLy8gR2V0IHRoZSBtZWRpdW0gZW5jcnlwdGlvbi4NCgkJCSRtZWRpdW1rZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnbWVkaXVtJyk7DQoJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJJG1lZGl1bSA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRtZWRpdW1rZXkpOw0KCQkJaWYgKCFlbXB0eSgkaXRlbS0+dG9rZW5zKSAmJiAkbWVkaXVta2V5ICYmICFpc19udW1lcmljKCRpdGVtLT50b2tlbnMpICYmICRpdGVtLT50b2tlbnMgPT09IGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkaXRlbS0+dG9rZW5zLCB0cnVlKSkpDQoJCQl7DQoJCQkJLy8gbWVkaXVtIGRlY3J5cHQgZGF0YSB0b2tlbnMuDQoJCQkJJGl0ZW0tPnRva2VucyA9IHJ0cmltKCRtZWRpdW0tPmRlY3J5cHRTdHJpbmcoJGl0ZW0tPnRva2VucyksICJcMCIpOw0KCQkJfQ0KCQkJaWYgKCFlbXB0eSgkaXRlbS0+dG9rZW5zKSkNCgkJCXsNCgkJCQkvLyBDb252ZXJ0IHRoZSB0b2tlbnMgZmllbGQgdG8gYW4gYXJyYXkuDQoJCQkJJGl0ZW0tPnRva2VucyA9IGpzb25fZGVjb2RlKCRpdGVtLT50b2tlbnMsIHRydWUpOw0KCQkJfQ0KCQkJLy8gcmV0dXJuIGp1c3QgdGhlIHRva2Vucw0KCQkJaWYgKCRqdXN0VG9rZW5zKQ0KCQkJew0KCQkJCXJldHVybiBhcnJheV92YWx1ZXMoJGl0ZW0tPnRva2Vucyk7DQoJCQl9DQoJCQkvLyByZXR1cm4gdGhlIHByb2plY3QNCgkJCXJldHVybiAkaXRlbTsNCgkJfQ0KCQllbHNlaWYgKCEkcGxhY2Vob2xkZXJzICYmICRudW1iZXIgPiAxKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBpdGVtcw0KCQkJJGl0ZW1zID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJLy8gR2V0IHRoZSBtZWRpdW0gZW5jcnlwdGlvbi4NCgkJCSRtZWRpdW1rZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnbWVkaXVtJyk7DQoJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJJG1lZGl1bSA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRtZWRpdW1rZXkpOw0KCQkJZm9yZWFjaCgkaXRlbXMgYXMgJG5yID0+ICYkaXRlbSkNCgkJCXsNCgkJCQlpZiAoIWVtcHR5KCRpdGVtLT50b2tlbnMpICYmICRtZWRpdW1rZXkgJiYgIWlzX251bWVyaWMoJGl0ZW0tPnRva2VucykgJiYgJGl0ZW0tPnRva2VucyA9PT0gYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRpdGVtLT50b2tlbnMsIHRydWUpKSkNCgkJCQl7DQoJCQkJCS8vIG1lZGl1bSBkZWNyeXB0IGRhdGEgdG9rZW5zLg0KCQkJCQkkaXRlbS0+dG9rZW5zID0gcnRyaW0oJG1lZGl1bS0+ZGVjcnlwdFN0cmluZygkaXRlbS0+dG9rZW5zKSwgIlwwIik7DQoJCQkJfQ0KCQkJCWlmICghZW1wdHkoJGl0ZW0tPnRva2VucykpDQoJCQkJew0KCQkJCQkvLyBDb252ZXJ0IHRoZSB0b2tlbnMgZmllbGQgdG8gYW4gYXJyYXkuDQoJCQkJCSRpdGVtLT50b2tlbnMgPSBqc29uX2RlY29kZSgkaXRlbS0+dG9rZW5zLCB0cnVlKTsNCgkJCQl9DQoJCQkJLy8gcmV0dXJuIGp1c3QgdGhlIHRva2Vucw0KCQkJCWlmICgkanVzdFRva2VucykNCgkJCQl7DQoJCQkJCSRpdGVtID0gbmV3IFxzdGRDbGFzcygpOw0KCQkJCQkkaXRlbS0+dG9rZW5zID0gYXJyYXlfdmFsdWVzKCRpdGVtLT50b2tlbnMpOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkaXRlbXM7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tFbWFpbEFuZERvbWFpbigkX2VtYWlsKQ0KCXsNCgkJJGV4cCA9ICIvXiguKilAKC4qKSQvIjsNCgkJcHJlZ19tYXRjaCgkZXhwLCAkX2VtYWlsLCAkbWF0Y2hlcyk7DQoNCgkJaWYgKCFlbXB0eSgkbWF0Y2hlc1sxXSkgJiYgKCFmaWx0ZXJfdmFyKCRfZW1haWwsIEZJTFRFUl9WQUxJREFURV9FTUFJTCkpKQ0KCQl7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCg0KCQkvLyBjaGVjayBpZiBpdCBoYXMgdGhlIHVzZXJzLm5vcmVwbHkuZ2l0aHViLmNvbQ0KCQlpZiAoc2VsZjo6c3RycG9zYSgkX2VtYWlsLCBzZWxmOjokbm90RW1haWwpICE9PSBmYWxzZSkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJcmV0dXJuIChjaGVja2Ruc3JyKCRtYXRjaGVzWzJdLCAnTVgnKSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdHJwb3NhKCRoYXlzdGFjaywgJG5lZWRsZXMgPSBhcnJheSgpLCAkb2Zmc2V0ID0gMCkNCgl7DQoJCSRjaHIgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRuZWVkbGVzIGFzICRuZWVkbGUpDQoJCXsNCgkJCSRyZXMgPSBzdHJwb3MoJGhheXN0YWNrLCAkbmVlZGxlLCAkb2Zmc2V0KTsNCgkJCWlmICgkcmVzICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkY2hyWyRuZWVkbGVdID0gJHJlczsNCgkJCX0NCgkJfQ0KDQoJCWlmKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY2hyKSkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiBtaW4oJGNocik7DQoJfQ0KW0NVU1RPTUNPREU9Z2V0R2l0aHViUmVwb0ZpbGVMaXN0XQ0KW0NVU1RPTUNPREU9bG9hZE1lc3NhZ2VzXQ0KW0NVU1RPTUNPREU9dGhlQnV0bGVyXQ0KW0NVU1RPTUNPREU9Z2V0RmlsZUNvbnRlbnRzXQ0KW0NVU1RPTUNPREU9bG9ja2VyXQ0KW0NVU1RPTUNPREU9dXJsRXhpc3RzXQ0KW0NVU1RPTUNPREU9YmFzZVNpeHR5Rm91clVSTF0NCltDVVNUT01DT0RFPWN1cmxXb3JrZXJIZWxwZXJdDQpbQ1VTVE9NQ09ERT1nZXRDb21wYW55RGV0YWlsc10NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQpbQ1VTVE9NQ09ERT1zZXRTdWJmb3JtVGFibGVd', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'gitHubbing', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbnNoaXBfYnVpbGRlcmAgKA0KCWB1c2VyYCBJTlQoNjUpIHVuc2lnbmVkIE5PVCBOVUxMIERFRkFVTFQgMCwNCglgcHJvamVjdGAgSU5UKDEwKSB1bnNpZ25lZCBOT1QgTlVMTCBERUZBVUxUIDAsDQoJYHJlbGF0aW9uc2hpcGAgSU5UKDEwKSB1bnNpZ25lZCBOT1QgTlVMTCBERUZBVUxUIDAsDQoJYHN0YXR1c2AgSU5UKDEwKSB1bnNpZ25lZCBOT1QgTlVMTCBERUZBVUxUIDEsDQoJS0VZICBgaWR4X3VzZXJgIChgdXNlcmApLA0KCUtFWSAgYGlkeF9wcm9qZWN0YCAoYHByb2plY3RgKSwNCglLRVkgIGBpZHhfcmVsYXRpb25zaGlwYCAoYHJlbGF0aW9uc2hpcGApLA0KCUtFWSAgYGlkeF9zdGF0dXNgIChgc3RhdHVzYCkNCikgRU5HSU5FPU15SVNBTSBBVVRPX0lOQ1JFTUVOVD0wIERFRkFVTFQgQ0hBUlNFVD11dGY4Ow0KDQpDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3NlbmRgICgNCglgdXNlcmAgSU5UKDY1KSB1bnNpZ25lZCBOT1QgTlVMTCBERUZBVUxUIDAsDQoJYG1lc3NhZ2VgIElOVCgxMCkgdW5zaWduZWQgTk9UIE5VTEwgREVGQVVMVCAwLA0KCUtFWSAgYGlkeF91c2VyYCAoYHVzZXJgKSwNCglLRVkgIGBpZHhfbWVzc2FnZWAgKGBtZXNzYWdlYCkNCikgRU5HSU5FPU15SVNBTSBBVVRPX0lOQ1JFTUVOVD0wIERFRkFVTFQgQ0hBUlNFVD11dGY4Ow==', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbnNoaXBfYnVpbGRlcmA7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3NlbmRgOw==', 'gitHubbing', '.git', '', '', 1, '', 'https://www.gnu.org/', '', 'FgU8dnv4esXb4Y0Pod03W/PVxU/lV2IK9pwkJK3hDVo=', '', '', 1, 148, '', 1, 64), +(20, 1, '', 1, '', 1, '', '', '', 1, '', 1, '', '', '', '', '', '', 1, '', 1, '', 1, '', '', '', '', 3, '', 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.2.6', 'Copyright (C) 2015. All Rights Reserved', '2016-03-07 02:59:34', 1, 'F4Hy7Xd96SXDPdxXM6kP3JBujyRs+yFWvq8rjqWAASY=', 'AJ9USWMt2/6+tbNPYO+ugWnRfRWRjK5XB8V0gq0Kq3I=', '', '+7JrFIHK+uE62eET7M02iOMjaFYQ40ItHM8t7bUPCN0=', 'LnZkbS1iYWRnZSB7DQogICAgLW1vei1ib3JkZXItYm90dG9tLWNvbG9yczogbm9uZTsNCiAgICAtbW96LWJvcmRlci1sZWZ0LWNvbG9yczogbm9uZTsNCiAgICAtbW96LWJvcmRlci1yaWdodC1jb2xvcnM6IG5vbmU7DQogICAgLW1vei1ib3JkZXItdG9wLWNvbG9yczogbm9uZTsNCiAgICBiYWNrZ3JvdW5kOiAjMDA5ZGQ4IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMGI0ZjUsICMwMDhkYzUpIHJlcGVhdCBzY3JvbGwgMCAwIGJvcmRlci1ib3g7DQogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMikgcmdiYSgwLCAwLCAwLCAwLjIpIHJnYmEoMCwgMCwgMCwgMC4zKTsNCiAgICBib3JkZXItaW1hZ2U6IG5vbmU7DQogICAgYm9yZGVyLXJhZGl1czogMnB4Ow0KICAgIGJvcmRlci1zdHlsZTogc29saWQ7DQogICAgYm9yZGVyLXdpZHRoOiAxcHg7DQogICAgY29sb3I6ICNmZmY7DQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgIGZvbnQtc2l6ZTogMTBweDsNCiAgICBmb250LXdlaWdodDogNzAwOw0KICAgIGxpbmUtaGVpZ2h0OiAxNHB4Ow0KICAgIHBhZGRpbmc6IDAgNXB4Ow0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpOw0KICAgIHRleHQtdHJhbnNmb3JtOiBub25lOw0KICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7DQp9DQoNCi52ZG0tdGV4dC1kYW5nZXIgew0KICAgIGNvbG9yOiAjZDMyYzQ2Ow0KfQ0KDQoudmRtLWRhbmdlciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2QzMmM0NjsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZWU0NjVhLCAjYzExYTM5KTsNCn0NCi52ZG0td2FybmluZyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5YTEyNDsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZmJiNDUwLCAjZjg5NDA2KTsNCn0NCi52ZG0tc3VjY2VzcyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzgyYmI0MjsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjOWZkMjU2LCAjNmZhYzM0KTsNCn0=', '', '', 1, '', 'Job Tracking System', 'joomla@vdm.io', '', 'https://vdm.bz/jcb-job-tracking-system', 'KN+kAEoH9uOH3HwtlSviUI4XYyRQ+MlhzXeHP8OqsMYeF3xrBw4uQhF+EsiBOYbCihsiM3vM7fjR6tTejSrPig==', '', 'd742c3eb-c2fe-4796-ab8e-5e37b9748c4d', 'images/vdm/JT500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2021-08-05 09:37:35', '', 'Job Tracking', 'Jobtracking', '', 4, 'CQlzZWxmOjpsb2FkVXBkYXRlckFqYXgoJGRvY3VtZW50KTsNCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw==', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSogCXNldCB0aGUgc2Vzc2lvbiBkZWZhdWx0cyBpZiBub3Qgc2V0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRTZXNzaW9uRGVmYXVsdHMoKQ0KCXsNCgkJLy8gbm90aW5nIHNldCBmb3Igbm93DQoJfQ0KDQoJLyoqDQoJKiAJTG9hZCB0aGUgYXV0byB1cGRhdGVyDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkVXBkYXRlckFqYXgoJGRvY3VtZW50KQ0KCXsNCgkJJGRvY3VtZW50LT5hZGRTY3JpcHREZWNsYXJhdGlvbigiDQoJCQlqUXVlcnkod2luZG93KS5sb2FkKGZ1bmN0aW9uKCkgew0KCQkJCXJ1blF1ZXVlKDMpOw0KCQkJfSk7DQoJCQkNCgkJCWZ1bmN0aW9uIHJ1blF1ZXVlKGZyb212aWV3KXsNCgkJCQl2YXIgZ2V0VXJsID0gJyIuVXJpOjpyb290KCkuImFkbWluaXN0cmF0b3IvaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9YWpheC51cGRhdGluZyZmb3JtYXQ9anNvbic7DQoJCQkJaWYoZnJvbXZpZXcgPiAwKXsNCgkJCQkJdmFyIHJlcXVlc3QgPSAndG9rZW49Ii5Kb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCkuIiZmcm9tdmlldz0nK2Zyb212aWV3Ow0KCQkJCX0NCgkJCQlyZXR1cm4galF1ZXJ5LmFqYXgoew0KCQkJCQl0eXBlOiAnR0VUJywNCgkJCQkJdXJsOiBnZXRVcmwsDQoJCQkJCWRhdGFUeXBlOiAnanNvbnAnLA0KCQkJCQlkYXRhOiByZXF1ZXN0LA0KCQkJCQlqc29ucDogJ2NhbGxiYWNrJw0KCQkJCX0pOw0KCQkJfQ0KCQkiKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRjbGllbnREZXRhaWxzID0gYXJyYXkoKTsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldENsaWVudERldGFpbHMoJGlkLCAkdHlwZSA9ICdjbGllbnQnLCAkbWV0aG9kID0gJ29iamVjdCcpDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRjbGllbnREZXRhaWxzWyRpZC4kbWV0aG9kXSkpDQoJCXsNCgkJCWlmICgkdHlwZSAhPSAnY2xpZW50JykNCgkJCXsNCgkJCQkkaWQgPSBzZWxmOjpnZXRWYXIoKHN0cmluZykgJHR5cGUsIChpbnQpICRpZCwgJ2lkJywgJ2NsaWVudCcpOw0KCQkJfQ0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkNCgkJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkJaWYgKCdwbGFjZWhvbGRlcicgPT0gJG1ldGhvZCkNCgkJCXsNCgkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQkJYXJyYXkoJ2EubmFtZScsICdhLmNvbnRhY3RfcGVyc29uJywnYS5lbWFpbCcsJ2EucGhvbmUnLCdhLm1vYmlsZV9waG9uZScsJ2EuZmF4JywnYS5wb3N0YWwnLCdhLnBvc3RhbGNvZGUnLCdhLmNpdHknLCdhLnN0cmVldCcsJ2Eud2Vic2l0ZScsJ2EuZGlzY291bnQnKSwgDQoJCQkJCWFycmF5KCdbY2xpZW50X25hbWVdJywnW2NsaWVudF9jb250YWN0X3BlcnNvbl0nLCdbY2xpZW50X2VtYWlsXScsJ1tjbGllbnRfcGhvbmVdJywnW2NsaWVudF9tb2JpbGVdJywnW2NsaWVudF9mYXhdJywnW2NsaWVudF9wb3N0YWxdJywnW2NsaWVudF9wb3N0YWxjb2RlXScsJ1tjbGllbnRfY2l0eV0nLCdbY2xpZW50X3N0cmVldF0nLCdbY2xpZW50X3dlYnNpdGVdJywnW2Rpc2NvdW50X2lkXScpKSk7DQoJCQkJCQ0KCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdyLm5hbWUnLCAnYy5uYW1lJywnZC5hbW91bnQnLCdkLnR5cGUnKSwgYXJyYXkoJ1tjbGllbnRfcmVnaW9uX25hbWVdJywnW2NsaWVudF9jb3VudHJ5X25hbWVdJywnW2Rpc2NvdW50X2Ftb3VudF0nLCdbZGlzY291bnRfdHlwZV0nKSkpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRxdWVyeS0+c2VsZWN0KCdhLionKTsNCgkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnci5uYW1lJywgJ2MubmFtZScsJ2QuYW1vdW50JywnZC50eXBlJyksIGFycmF5KCdyZWdpb25fbmFtZScsJ2NvdW50cnlfbmFtZScsJ2Rpc2NvdW50X2Ftb3VudCcsJ2Rpc2NvdW50X3R5cGUnKSkpOw0KCQkJfQ0KDQoJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fY2xpZW50IHRhYmxlDQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jbGllbnQnLCAnYScpKTsNCgkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcmVnaW9uJywgJ3InKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5yZWdpb24nKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3IuaWQnKSAuICcpJyk7DQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknLCAnYycpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmNvdW50cnknKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2MuaWQnKSAuICcpJyk7DQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2Rpc2NvdW50JywgJ2QnKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5kaXNjb3VudCcpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnZC5pZCcpIC4gJyknKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkaWQpOw0KCQkJLy8gbG9hZCB0aGUgcXVlcnkNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCWlmICgnb2JqZWN0JyA9PSAkbWV0aG9kKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGNsaWVudERldGFpbHNbJGlkLiRtZXRob2RdID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXNlbGY6OiRjbGllbnREZXRhaWxzWyRpZC4kbWV0aG9kXSA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmICghaXNzZXQoc2VsZjo6JGNsaWVudERldGFpbHNbJGlkLiRtZXRob2RdKSkNCgkJew0KCQkJc2VsZjo6JGNsaWVudERldGFpbHNbJGlkLiRtZXRob2RdID0gZmFsc2U7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRjbGllbnREZXRhaWxzWyRpZC4kbWV0aG9kXTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRqb2JPcmRlcnNEZXRhaWxzID0gYXJyYXkoKTsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEpvYk9yZGVyRGV0YWlscygkaWQsICR0eXBlLCAkbWV0aG9kID0gJ29iamVjdCcpDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRqb2JPcmRlcnNEZXRhaWxzWyRpZC4kbWV0aG9kXSkpDQoJCXsNCgkJCWlmICgkaWQgPiAwICkNCgkJCXsNCgkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkJDQoJCQkJLy8gU2VsZWN0IHNvbWUgZmllbGRzDQoJCQkJaWYgKCdwbGFjZWhvbGRlcicgPT0gJG1ldGhvZCkNCgkJCQl7DQoJCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJCQkJYXJyYXkoJ2Euam9ibnVtYmVyJywnYS5vcmRlcl9kYXRlJywnYS5kZWxpdmVyeV9kYXRlJywnYS5jcmVhdGVkX2J5JywnYS5jaGVja19saXN0JyksIA0KCQkJCQkJYXJyYXkoJ1tqb2JudW1iZXJdJywnW29yZGVyX2RhdGVdJywnW2RlbGl2ZXJ5X2RhdGVdJywnY3JlYXRlZF9ieScsJ2NoZWNrX2xpc3QnKSkpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkcXVlcnktPnNlbGVjdCgnYS4qJyk7DQoJCQkJDQoJCQkJfQ0KCQkJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9qb2Jfb3JkZXIgdGFibGUNCgkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9qb2Jfb3JkZXInLCAnYScpKTsNCgkJCQlpZiAoJHR5cGUgPT0gJ2pvYl9vcmRlcicgfHwgJHR5cGUgPT0gJ2pvYl9vcmRlcnMnKQ0KCQkJCXsNCgkJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcuIChpbnQpICRpZCk7DQoJCQkJfQ0KCQkJCS8vIGxvYWQgdGhlIHF1ZXJ5DQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCWlmICgnb2JqZWN0JyA9PSAkbWV0aG9kKQ0KCQkJCQl7DQoJCQkJCQkkZGV0YWlscyA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJewkJDQoJCQkJCQkkZGV0YWlscyA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCQkJCQlmb3JlYWNoICgkZGV0YWlscyBhcyAka2V5ID0+ICYkdmFsdWUpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKCRrZXkgPT0gJ2NyZWF0ZWRfYnknICYmICR2YWx1ZSA+IDApDQoJCQkJCQkJew0KCQkJCQkJCQkkc3RhZmYgPSBGYWN0b3J5OjpnZXRVc2VyKCR2YWx1ZSk7DQoJCQkJCQkJCS8vIHNldCBzdGFmZiBkZXRhaWxzDQoJCQkJCQkJCSRkZXRhaWxzWydbc3RhZmZfbmFtZV0nXSA9ICRzdGFmZi0+bmFtZTsNCgkJCQkJCQkJJGRldGFpbHNbJ1tzdGFmZl9lbWFpbF0nXSA9ICRzdGFmZi0+ZW1haWw7DQoJCQkJCQkJfQ0KCQkJCQkJCWlmICgnMDAwMC0wMC0wMCAwMDowMDowMCcgIT0gJHZhbHVlICYmIHN0cnBvcygka2V5LCAnX2RhdGUnKSAhPT0gZmFsc2UpDQoJCQkJCQkJew0KCQkJCQkJCQkkdmFsdWUgPSBzZWxmOjpmYW5jeURhdGUoJHZhbHVlKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmICgnMDAwMC0wMC0wMCAwMDowMDowMCcgPT0gJHZhbHVlKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHZhbHVlID0gJzAwMDAtMDAtMDAnOw0KCQkJCQkJCX0NCgkJCQkJCQlpZiAoJGtleSA9PSAnY2hlY2tfbGlzdCcpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBidWlsZCBjaGVjayBsaXN0DQoJCQkJCQkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkdmFsdWUpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkZmllbGRzID0ganNvbl9kZWNvZGUoJHZhbHVlLHRydWUpOw0KCQkJCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRmaWVsZHMpKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCWZvcmVhY2goJGZpZWxkcyBhcyAkZmllbGQpDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQlpZiAoIWlzc2V0KCRkZXRhaWxzWyRmaWVsZF0pKQ0KCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQkkZGV0YWlsc1snWycuJGZpZWxkLiddJ10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRmaWVsZCwgJ1d3Jyk7DQoJCQkJCQkJCQkJCX0JDQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJCXVuc2V0KCRkZXRhaWxzWyRrZXldKTsJCQkJCQkNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJdW5zZXQoJGRldGFpbHNbJ2NyZWF0ZWRfYnknXSk7DQoJCQkJCXNlbGY6OiRqb2JPcmRlcnNEZXRhaWxzWyRpZC4kbWV0aG9kXSA9ICRkZXRhaWxzOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZiAoIWlzc2V0KHNlbGY6OiRqb2JPcmRlcnNEZXRhaWxzWyRpZC4kbWV0aG9kXSkpDQoJCXsNCgkJCXNlbGY6OiRqb2JPcmRlcnNEZXRhaWxzWyRpZC4kbWV0aG9kXSA9IGZhbHNlOw0KCQl9DQoJCXJldHVybiBzZWxmOjokam9iT3JkZXJzRGV0YWlsc1skaWQuJG1ldGhvZF07DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRKb2JPcmRlcigkaWQsICRkYiA9IG51bGwsICR0eXBlID0gJ2pvYl9zdGF0dXMnLCAkbWV0aG9kID0gJ2FycmF5JykNCgl7DQoJCWlmICghJGRiKQ0KCQl7DQoJCQkvLyBnZXQgYSBkYXRhYmFzZSBjb25uZWN0aW9uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJfQ0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCQ0KCQkvLyBTZWxlY3QgYWxsIGZpZWxkcw0KCQkkcXVlcnktPnNlbGVjdCgnYS4qJyk7DQoJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9qb2Jfb3JkZXIgdGFibGUNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fam9iX29yZGVyJywgJ2EnKSk7DQoJCWlmICgkdHlwZSA9PSAnam9iX3N0YXR1cycpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkaWQpOw0KCQl9DQoJCS8vIGxvYWQgdGhlIHF1ZXJ5DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJaWYgKCdvYmplY3QnID09ICRtZXRob2QpDQoJCQl7DQoJCQkJcmV0dXJuICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJfQ0KCQkJZWxzZWlmICgnYXJyYXknID09ICRtZXRob2QpDQoJCQl7DQoJCQkJcmV0dXJuICRkYi0+bG9hZEFzc29jKCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcmV0dXJuICRkYi0+bG9hZFJvdygpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5lZWRlZEl0ZW0oJGpvYl9vcmRlciwgJGl0ZW0sICRkYiA9IG51bGwpDQoJew0KCQlpZiAoJGpvYl9vcmRlciA+IDApDQoJCXsNCgkJCWlmICghJGRiKQ0KCQkJew0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJfQ0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdChhcnJheSgnaWQnLCdpdGVtJywnbmVlZGVkJywnb3JkZXJlZCcsJ2FsbG9jYXRlZCcpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX25lZWRlZF9pdGVtJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnam9iX29yZGVyJykgLiAnID0gJy4gKGludCkgJGpvYl9vcmRlcik7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpdGVtJykgLiAnICA9ICcgLiAoaW50KSAkaXRlbSk7DQoJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCS8vIGNoZWNrIGlmIHRoZXJlIHdhcyBkYXRhIHJldHVybmVkDQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJcmV0dXJuICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5lZWRlZEl0ZW1zKCRqb2Jfb3JkZXIsICR0eXBlID0gMCkNCgl7DQoJCWlmICgkam9iX29yZGVyID4gMCkNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KGFycmF5KCdpZCcsJ2l0ZW0nLCduZWVkZWQnLCdvcmRlcmVkJywnYWxsb2NhdGVkJykpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbmVlZGVkX2l0ZW0nKSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdqb2Jfb3JkZXInKSAuICcgPSAnLiAoaW50KSAkam9iX29yZGVyKTsNCgkJCS8vIGRlZmF1bHQgaXMgdG8gZ2V0IGFsbCAoMCkNCgkJCWlmICgxID09ICR0eXBlKSAvLyByZWFkeQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJ2FsbG9jYXRlZCA9IG5lZWRlZCcpOw0KCQkJfQ0KCQkJZWxzZWlmICgyID09ICR0eXBlKSAvLyBub3QgcmVhZHkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCdhbGxvY2F0ZWQgIT0gbmVlZGVkJyk7DQoJCQl9DQoJCQllbHNlaWYgKDYgPT0gJHR5cGUpIC8vIGhhcyBwcm9ibGVtcw0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJ3Byb2JsZW0gPSAwJyk7DQoJCQl9DQoJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCS8vIGNoZWNrIGlmIHRoZXJlIHdhcyBkYXRhIHJldHVybmVkDQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJaWYgKDMgPT0gJHR5cGUgfHwgNiA9PSAkdHlwZSkNCgkJCQl7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCQlyZXR1cm4gJGRiLT5sb2FkT2JqZWN0TGlzdCgnaXRlbScpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhc1Byb2JsZW0oJGpvYl9vcmRlcikNCgl7DQoJCXJldHVybiBzZWxmOjpnZXROZWVkZWRJdGVtcygkam9iX29yZGVyLCA2KTsNCgl9DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyAkbmVlZGVkSXRlbXMgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJG5lZWRlZFF0eSA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZU5lZWRlZEl0ZW1zKCRqb2Jfb3JkZXIsICRwcm9kdWN0cyA9IG51bGwsICRqb2Jfc3RhdHVzID0gbnVsbCwgJHVzZXJJZCA9IG51bGwsICR0b2RheURhdGUgPSBudWxsLCAkZGIgPSBudWxsKQ0KCXsNCgkJaWYgKCRqb2Jfb3JkZXIgPiAwKQ0KCQl7DQoJCQkvLyBnZXQgam9iIHN0YXR1cw0KCQkJaWYgKCEkam9iX3N0YXR1cykNCgkJCXsNCgkJCQkkam9iX3N0YXR1cyA9IHNlbGY6OmdldFZhcignam9iX29yZGVyJywgJGpvYl9vcmRlciwgJ2lkJywgJ2pvYl9zdGF0dXMnKTsJDQoJCQl9DQoJCQkvLyBjb252ZXJ0IHByb2R1Y3MgdG8gYXJyYXkNCgkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkam9iX3N0YXR1cykpDQoJCQl7DQoJCQkJJGpvYl9zdGF0dXMgPSBqc29uX2RlY29kZSgkam9iX3N0YXR1cywgdHJ1ZSk7DQoJCQl9DQoJCQkvLyBnZXQgYWN0aXZhdGlvbiBzdGF0dXMNCgkJCSRhY3RpdmF0aW5nX29yZGVyX3N0YXR1cyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdvcmRlcl9zdGF0dXMnLCBudWxsKTsNCgkJCS8vIG9ubHkgY29udGludWUgaWYgam9iIHN0YXR1cyBoYXMgb3JkZXJpbmcgc3RhdHVzIGFjdGl2ZSwgb3IgYWxyZWFkeSBoYXMgbmVlZGVkIGl0ZW1zIHNldC4NCgkJCWlmICgoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGpvYl9zdGF0dXMpICYmIGluX2FycmF5KCRhY3RpdmF0aW5nX29yZGVyX3N0YXR1cywgJGpvYl9zdGF0dXMpKSB8fCBzZWxmOjpnZXROZWVkZWRJdGVtcygkam9iX29yZGVyLCAzKSkNCgkJCXsNCgkJCQkvLyBjaGVja2VyDQoJCQkJJGNoZWNrZXIgPSB0cnVlOw0KCQkJCXNlbGY6OiRuZWVkZWRJdGVtcyA9IGFycmF5KCk7DQoJCQkJc2VsZjo6JG5lZWRlZFF0eSA9IGFycmF5KCk7DQoJCQkJJHRhYmxlID0gJ25lZWRlZF9pdGVtJzsNCgkJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJCWlmICghJGRiKQ0KCQkJCXsNCgkJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJfQ0KCQkJCS8vIGdldCBwcm9kdWN0cw0KCQkJCWlmICghJHByb2R1Y3RzKQ0KCQkJCXsNCgkJCQkJJHByb2R1Y3RzID0gc2VsZjo6Z2V0VmFyKCdqb2Jfb3JkZXInLCAkam9iX29yZGVyLCAnaWQnLCAncHJvZHVjdCcpOwkNCgkJCQl9DQoJCQkJLy8gY29udmVydCBwcm9kdWNzIHRvIGFycmF5DQoJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRwcm9kdWN0cykpDQoJCQkJew0KCQkJCQkkcHJvZHVjdHMgPSBqc29uX2RlY29kZSgkcHJvZHVjdHMsIHRydWUpOw0KCQkJCX0NCgkJCQkvLyBjb250aW51ZSBvbmx5IGlmIHByb2R1Y3RzIGFyZSBmb3VuZA0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcHJvZHVjdHMpICYmIGlzc2V0KCRwcm9kdWN0c1snaXRlbSddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcHJvZHVjdHNbJ2l0ZW0nXSkpDQoJCQkJew0KCQkJCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgdXNlciBJRA0KCQkJCQlpZighJHVzZXJJZCkNCgkJCQkJew0KCQkJCQkJJHVzZXJJZCA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+aWQ7DQoJCQkJCX0NCgkJCQkJLy8gYWxzbyBnZXQgdG9kYXlzIGRhdGUgaWYgbm90IGZvdW5kDQoJCQkJCWlmICghJHRvZGF5RGF0ZSkNCgkJCQkJew0KCQkJCQkJJHRvZGF5RGF0ZSA9IEZhY3Rvcnk6OmdldERhdGUoKS0+dG9TcWwoKTsNCgkJCQkJfQ0KCQkJCQkvLyBub3cgbG9vcCBwcm9kdWN0cyBhbmQgc2VlIGlmIHRoZXkgYXJlIGFsbCByZWFkeSBzZXQNCgkJCQkJZm9yZWFjaCAoJHByb2R1Y3RzWydpdGVtJ10gYXMgJG5yID0+ICRpdGVtSWQpDQoJCQkJCXsNCgkJCQkJCWlmICgkaXRlbUlkID4gMSkgLy8gVE9ETyBvd24gcHJvZHVjdCBoYXMgSUQgMQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRuZWVkZWRRdHlbJGl0ZW1JZF1bXSA9IChpbnQpIChpc3NldCgkcHJvZHVjdHNbJ3F0eSddWyRucl0pKSA/ICRwcm9kdWN0c1sncXR5J11bJG5yXSA6IDA7DQoJCQkJCQkJaWYgKCFzZWxmOjpzZXROZWVkZWRJdGVtKCRqb2Jfb3JkZXIsICRpdGVtSWQsIHNlbGY6OiRuZWVkZWRRdHlbJGl0ZW1JZF0sICR1c2VySWQsICR0b2RheURhdGUsICRkYiwgJHRhYmxlKSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRjaGVja2VyID0gZmFsc2U7DQoJCQkJCQkJfQ0KCQkJCQkJCXNlbGY6OiRuZWVkZWRJdGVtc1tdID0gJGl0ZW1JZDsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBjaGVjayBpZiBuZWVkZWQgaXRlbXMgd2VyZSBmb3VuZA0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokbmVlZGVkSXRlbXMpKQ0KCQkJCXsNCgkJCQkJLy8gcmVtb3ZlIGFsbCB0aGF0IGlzIG5vdCBpbiB0aGlzIGFycmF5DQoJCQkJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCQkJCSAgICAkZGItPnF1b3RlTmFtZSgnaXRlbScpIC4gJyBOT1QgSU4gKCcgLiBpbXBsb2RlKCcsJywgc2VsZjo6JG5lZWRlZEl0ZW1zKSAuICcpJywNCgkJCQkJICAgICRkYi0+cXVvdGVOYW1lKCdqb2Jfb3JkZXInKSAuICcgPSAnIC4gKGludCkgJGpvYl9vcmRlcg0KCQkJCQkpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkvLyBubyBuZWVkZWQgaXRlbXMgZm9yIHRoaXMgam9iLCBzbyBjbGVhciBhbGwgaXRlbXMNCgkJCQkJJGNvbmRpdGlvbnMgPSBhcnJheSgNCgkJCQkJICAgICRkYi0+cXVvdGVOYW1lKCdqb2Jfb3JkZXInKSAuICcgPSAnIC4gKGludCkgJGpvYl9vcmRlcg0KCQkJCQkpOw0KCQkJCX0NCgkJCQkvLyBkZWxldGUgYWxsIG5vdCBuZWVkZWQNCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCSRxdWVyeS0+ZGVsZXRlKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fJy4kdGFibGUpKTsNCgkJCQkkcXVlcnktPndoZXJlKCRjb25kaXRpb25zKTsNCgkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQkJLy8gcmV0dXJuIHRoZSBjaGVja2VyDQoJCQkJcmV0dXJuICRjaGVja2VyOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXROZWVkZWRJdGVtKCYkam9iX29yZGVyLCAmJGl0ZW0sICYkbmVlZGVkLCAmJHVzZXJJZCwgJiR0b2RheURhdGUsICYkZGIsICYkdGFibGUpDQoJew0KCQkvLyBhbHdheXMgZ2V0IHN1cHBsaWVyDQoJCSRzdXBwbGllciA9IHNlbGY6OmdldFZhcignaXRlbScsICRpdGVtLCAnaWQnLCAnc3VwcGxpZXInKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoYXJyYXkoJ2lkJywndmVyc2lvbicsJ25lZWRlZCcsJ3N1cHBsaWVyJykpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0YWJsZSkpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdqb2Jfb3JkZXInKSAuICcgPSAnLiAoaW50KSAkam9iX29yZGVyKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaXRlbScpIC4gJyA9ICcuIChpbnQpICRpdGVtKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJLy8gY2hlY2sgaWYgZm91bmQNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkvLyB1cGRhdGUgdGhlIHJlY29yZA0KCQkJJHJlY29yZCA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCQlpZiAoJG5lZWRlZCAhPSAkcmVjb3JkWyduZWVkZWQnXSB8fCAkc3VwcGxpZXIgIT0gJHJlY29yZFsnc3VwcGxpZXInXSkNCgkJCXsNCgkJCQkvLyBjcmVhdGUgbmV3IG9iamVjdA0KCQkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJJG9iamVjdC0+aWQgPSAoaW50KSAkcmVjb3JkWydpZCddOw0KCQkJCSRvYmplY3QtPm5lZWRlZCA9IChpbnQpIGFycmF5X3N1bSgkbmVlZGVkKTsNCgkJCQkkb2JqZWN0LT5zdXBwbGllciA9IChpbnQpICRzdXBwbGllcjsNCgkJCQkkb2JqZWN0LT52ZXJzaW9uID0gKGludCkgJHJlY29yZFsndmVyc2lvbiddICsgMTsNCgkJCQkkb2JqZWN0LT5tb2RpZmllZF9ieSA9IChpbnQpICR1c2VySWQ7DQoJCQkJJG9iamVjdC0+bW9kaWZpZWQgPSAkdG9kYXlEYXRlOw0KCQkJCS8vIHVwZGF0ZSBub3cNCgkJCQlyZXR1cm4gJGRiLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0YWJsZSwgJG9iamVjdCwgJ2lkJyk7DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQkvLyBhZGQgbmV3IHJlY29yZA0KCQkkb2JqZWN0ID0gbmV3IFxzdGRDbGFzcygpOw0KCQkkb2JqZWN0LT5pdGVtID0gKGludCkgJGl0ZW07DQoJCSRvYmplY3QtPmpvYl9vcmRlciA9IChpbnQpICRqb2Jfb3JkZXI7DQoJCSRvYmplY3QtPm5lZWRlZCA9IChpbnQpIGFycmF5X3N1bSgkbmVlZGVkKTsNCgkJJG9iamVjdC0+c3VwcGxpZXIgPSAoaW50KSAkc3VwcGxpZXI7DQoJCSRvYmplY3QtPmNyZWF0ZWRfYnkgPSAoaW50KSAkdXNlcklkOw0KCQkkb2JqZWN0LT5jcmVhdGVkID0gJHRvZGF5RGF0ZTsNCgkJJG9iamVjdC0+cHVibGlzaGVkID0gMTsNCgkJJG9iamVjdC0+dmVyc2lvbiA9IDE7DQoJCS8vIGFkZCBub3cNCgkJJGRvbmUgPSAkZGItPmluc2VydE9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dXycuJHRhYmxlLCAkb2JqZWN0KTsNCgkJaWYgKCRkb25lKQ0KCQl7DQoJCQkkYUlkID0gJGRiLT5pbnNlcnRpZCgpOw0KCQkJLy8gbWFrZSBzdXJlIHRoZSBhY2Nlc3Mgb2YgYXNzZXQgaXMgc2V0DQoJCQlyZXR1cm4gc2VsZjo6c2V0QXNzZXQoJGFJZCwkdGFibGUpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldENoZWNrTGlzdCgpDQoJew0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJyonKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fam9iX3N0YXR1cycpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHVibGlzaGVkJykuICcgPSAxJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJGl0ZW1zID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJJG9wdGlvbnMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQkJew0KCQkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+c3dpdGNoKSkNCgkJCQl7DQoJCQkJCSRzd2l0Y2hlcyA9IGpzb25fZGVjb2RlKCRpdGVtLT5zd2l0Y2gsIHRydWUpOw0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHN3aXRjaGVzKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCAoJHN3aXRjaGVzIGFzICRmaWVsZCA9PiAkdmFsdWVzKQ0KCQkJCQkJew0KCQkJCQkJCWlmICgnc3dpdGNoJyA9PSAkZmllbGQgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZhbHVlcykpDQoJCQkJCQkJew0KCQkJCQkJCQlmb3JlYWNoICgkdmFsdWVzIGFzICR2YWx1ZSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHN0YXR1c05hbWUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRpdGVtLT5uYW1lKTsNCgkJCQkJCQkJCSRzd2l0Y2hOYW1lID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkdmFsdWUpOw0KCQkJCQkJCQkJJHRtcCA9IGFycmF5KA0KCQkJCQkJCQkJCSd2YWx1ZScgICAgPT4gJHN0YXR1c05hbWUuJ19fJy4kc3dpdGNoTmFtZS4nX19zZWxlY3RlZCcsDQoJCQkJCQkJCQkJJ3RleHQnICAgICA9PiAnJm5ic3A7Jm5ic3A7PGI+Jy4kdmFsdWUuJzwvYj4nLA0KCQkJCQkJCQkJCSdjaGVja2VkJyAgPT4gZmFsc2UNCgkJCQkJCQkJCSk7DQoJCQkJCQkJCQkkb3B0aW9uc1tdID0gKG9iamVjdCkgJHRtcDsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkb3B0aW9uczsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQcm9kdWN0aW9uVHlwZXMoJHNldFN0YXR1cyA9IG51bGwpDQoJew0KCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJyonKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcHJvZHVjdGlvbl90eXBlJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwdWJsaXNoZWQnKS4gJyA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkaXRlbXMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkkb3B0aW9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pDQoJCQl7DQoJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRpdGVtLT5lbXB0eSkpDQoJCQkJew0KCQkJCQkkdGFyZ2V0cz0ganNvbl9kZWNvZGUoJGl0ZW0tPmVtcHR5LCB0cnVlKTsNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0YXJnZXRzKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCAoJHRhcmdldHMgYXMgJGZpZWxkTmFtZSkNCgkJCQkJCXsNCgkJCQkJCQkkdG1wID0gYXJyYXkoDQoJCQkJCQkJCSd2YWx1ZScgICAgPT4gJ2pvYl9vcmRlcl9fJy5TdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRpdGVtLT5hbGlhcykuJ19fJy5TdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRmaWVsZE5hbWUpLidfZW1wdHknLA0KCQkJCQkJCQkndGV4dCcgICAgID0+ICcmbmJzcDsmbmJzcDs8Yj4nLiRpdGVtLT5hbGlhcy4nICcuJGZpZWxkTmFtZS4nIEVtcHR5PC9iPicsDQoJCQkJCQkJCSdjaGVja2VkJyAgPT4gZmFsc2UNCgkJCQkJCQkpOw0KCQkJCQkJCWlmICgkc2V0U3RhdHVzKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRtcFsnZmllbGQnXSA9ICRmaWVsZE5hbWU7DQoJCQkJCQkJCSR0bXBbJ2lkJ10gPSAkaXRlbS0+aWQ7DQoJCQkJCQkJCSR0bXBbJ3R5cGUnXSA9ICdlbXB0eSc7DQoJCQkJCQkJfQ0KCQkJCQkJCSRvcHRpb25zW10gPSAob2JqZWN0KSAkdG1wOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCSR0bXAgPSBhcnJheSgNCgkJCQkJJ3ZhbHVlJyAgICA9PiAnam9iX29yZGVyX18nLlN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJGl0ZW0tPmFsaWFzKS4nX19zZWxlY3RlZCcsDQoJCQkJCSd0ZXh0JyAgICAgPT4gJyZuYnNwOyZuYnNwOzxiPicuJGl0ZW0tPmFsaWFzLicgU2VsZWN0ZWQ8L2I+JywNCgkJCQkJJ2NoZWNrZWQnICA9PiBmYWxzZQ0KCQkJCSk7DQoJCQkJaWYgKCRzZXRTdGF0dXMpDQoJCQkJew0KCQkJCQkkdG1wWydmaWVsZCddID0gJ3Byb2R1Y3Rpb25fdHlwZSc7DQoJCQkJCSR0bXBbJ2lkJ10gPSAkaXRlbS0+aWQ7DQoJCQkJCSR0bXBbJ3R5cGUnXSA9ICdzZWxlY3RlZCc7DQoJCQkJfQ0KCQkJCSRvcHRpb25zW10gPSAob2JqZWN0KSAkdG1wOw0KCQkJfQ0KCQkJcmV0dXJuICRvcHRpb25zOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrQ2hlY2tMaXN0KCYkZGF0YSkNCgl7DQoJCSRjaGVja1snaGlzJ10JPSBzZWxmOjpoaXNTdGF0dXNlcygnY2hlY2stbGlzdCcpOw0KCQkkbWVyZ2UJCT0gYXJyYXkoKTsNCgkJJHR5cGVTZXQJPSAnanNvbic7DQoJCWlmIChpc3NldCgkZGF0YVsnaWQnXSkgJiYgJGRhdGFbJ2lkJ10gPiAwKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIG9sZCBjaGVja2xpc3QNCgkJCSRjaGVja1snb2xkJ10gPSBzZWxmOjpnZXRWYXIoJ2pvYl9vcmRlcicsJGRhdGFbJ2lkJ10sJ2lkJywnY2hlY2tfbGlzdCcpOw0KCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRjaGVja1snb2xkJ10pKQ0KCQkJew0KCQkJCSRjaGVja1snb2xkJ10gPSBqc29uX2RlY29kZSgkY2hlY2tbJ29sZCddLCB0cnVlKTsNCgkJCX0NCgkJfQ0KCQlpZiAoaXNzZXQoJGRhdGFbJ2NoZWNrX2xpc3QnXSkgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ2NoZWNrX2xpc3QnXSkpDQoJCXsNCgkJCSRjaGVja1snbmV3J10gPSBqc29uX2RlY29kZSgkZGF0YVsnY2hlY2tfbGlzdCddLCB0cnVlKTsNCgkJCSR0eXBlU2V0ID0gJ2pzb24nOw0KCQl9DQoJCWVsc2VpZiAoaXNzZXQoJGRhdGFbJ2NoZWNrX2xpc3QnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ2NoZWNrX2xpc3QnXSkpDQoJCXsNCgkJCSRjaGVja1snbmV3J10gPSAkZGF0YVsnY2hlY2tfbGlzdCddOw0KCQkJJHR5cGVTZXQgPSAnYXJyYXknOw0KCQl9DQoJCS8vIG5vdyBsZXRzIHNlZSBkb2VzIGhlIGhhdmUgYW55IGFjY2Vzcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNoZWNrWydoaXMnXSkpDQoJCXsNCgkJCS8vIGhlIGNhbiBlZGl0IHNvbWUgbGV0cyBmaW5kIGl0DQoJCQlpZiAoaXNzZXQoJGNoZWNrWydvbGQnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNoZWNrWydvbGQnXSkpDQoJCQl7DQoJCQkJLy8gcmVtb3ZlIHdoYXQgaGUgY2FuIHVwZGF0ZSBmcm9tIG9sZA0KCQkJCSRtZXJnZVtdID0gKGFycmF5KSBhcnJheV9kaWZmKCRjaGVja1snb2xkJ10sICRjaGVja1snaGlzJ10pOw0KCQkJfQ0KCQkJaWYgKGlzc2V0KCRjaGVja1snbmV3J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjaGVja1snbmV3J10pKQ0KCQkJew0KCQkJCS8vIGdldCB0aG9zZSBoZSBoYXMgYW5kIGNhbiBlZGl0Lg0KCQkJCSRtZXJnZVtdID0gKGFycmF5KSBhcnJheV9pbnRlcnNlY3QoJGNoZWNrWyduZXcnXSwgJGNoZWNrWydoaXMnXSk7DQoJCQl9DQoJCQkkY2hlY2tbJ2tlZXAnXSA9IHNlbGY6Om1lcmdlQXJyYXlzKCRtZXJnZSk7DQoJCQkvLyBlbnN1cmUgb25seSB0aGUga2VlcCB3aGF0IGhlIGNhbiB1cGRhdGUNCgkJCXNlbGY6OnNldENoZWNrTGlzdCgkZGF0YSwgJGNoZWNrLCAna2VlcCcsICR0eXBlU2V0KTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIGhlIGlzIG5vdCBhbGxvd2VkIHRvIGVkaXQgYW55DQoJCQlzZWxmOjpzZXRDaGVja0xpc3QoJGRhdGEsICRjaGVjaywgJ29sZCcsICR0eXBlU2V0KTsNCgkJfQ0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldENoZWNrTGlzdCgmJGRhdGEsICRjaGVjaywgJHdpdGgsICR0eXBlU2V0KQ0KCXsNCgkJaWYgKGlzc2V0KCRjaGVja1skd2l0aF0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjaGVja1skd2l0aF0pKQ0KCQl7DQoJCQkvLyByZXN0b3JlIHRoZSBvbGQgc2V0DQoJCQlpZiAoJ2pzb24nID09ICR0eXBlU2V0KQ0KCQkJew0KCQkJCSRkYXRhWydjaGVja19saXN0J10gPSBqc29uX2VuY29kZSgkY2hlY2tbJHdpdGhdKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkZGF0YVsnY2hlY2tfbGlzdCddID0gJGNoZWNrWyR3aXRoXTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIGNsZWFyIGFueSBzZWxlY3Rpb25zIG1hZGUNCgkJCSRkYXRhWydjaGVja19saXN0J10gPSAnJzsNCgkJfQ0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZHluYW1pY1VwZGF0ZUpvYlN0YXR1cygpDQoJew0KCQkvLyBmaXJzdCB3ZSBtdXN0IGdldCBhbGwgdGhlIHB1Ymxpc2hlZCBqb2JzIGFuZCB0aGVpciBkYXRhDQoJCSRpZHMgPSBzZWxmOjpnZXRWYXJzKCdqb2Jfb3JkZXInLCAxLCAncHVibGlzaGVkJywgJ2lkJyk7DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSkNCgkJew0KICAgICAgICAgICAgIAkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQlmb3JlYWNoICgkaWRzIGFzICRpZCkNCgkJCXsNCgkJCQlpZiAoJGpvYiA9IHNlbGY6OmdldEpvYk9yZGVyKCRpZCwgJGRiKSkNCgkJCQl7DQoJCQkJCSRqb2JTdGF0dXMgPSBzZWxmOjpzZXRKb2JTdGF0dXMoJGpvYik7DQoJCQkJCWlmICgkam9iWydqb2Jfc3RhdHVzJ10gIT0gJGpvYlN0YXR1cykNCgkJCQkJew0KCQkJCQkJLy8gdXBkYXRlIHRoZSBzdGF0dXMNCgkJCQkJCSR1cGRhdGVJdGVtCQk9IG5ldyBcc3RkQ2xhc3M7DQoJCQkJCQkkdXBkYXRlSXRlbS0+aWQJCT0gJGlkOw0KCQkJCQkJJHVwZGF0ZUl0ZW0tPmpvYl9zdGF0dXMJPSAkam9iU3RhdHVzOwkJCQkJCQ0KCQkJCQkJLy8gdXBkYXRlIHRoZSBpdGVtIG5vdw0KCQkJCQkJJGRiLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9qb2Jfb3JkZXInLCAkdXBkYXRlSXRlbSwgJ2lkJyk7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQogICAgICAgICAgICAgIAkJcmV0dXJuIHRydWU7DQoJCX0NCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRKb2JTdGF0dXMoJGpvYikNCgl7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkam9iKSkNCgkJew0KCQkJJGpvYiA9IChhcnJheSkgJGpvYjsNCgkJfQ0KCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBhcnJheQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGpvYikpDQoJCXsNCgkJCSR1cGRhdGVyID0gYXJyYXkoKTsNCgkJCSRqb2JTdGF0dXMgPSBhcnJheSgpOw0KCQkJJG5vdyA9IEZhY3Rvcnk6OmdldERhdGUoKS0+dG9Vbml4KCk7DQoJCQkkb3JkZXJUaW1lID0gKGlzc2V0KCRqb2JbJ29yZGVyX2RhdGUnXSkpID8gc3RydG90aW1lKCRqb2JbJ29yZGVyX2RhdGUnXSkgOiBmYWxzZTsNCgkJCSRkZWxpdmVyeVRpbWUgPSAoaXNzZXQoJGpvYlsnZGVsaXZlcnlfZGF0ZSddKSkgPyBzdHJ0b3RpbWUoJGpvYlsnZGVsaXZlcnlfZGF0ZSddKSA6IGZhbHNlOw0KCQkJLy8gc2V0IHNvbWUgYmFzaWMgdmFsdWVzDQoJCQkkdXBkYXRlclsnam9iX29yZGVyX19wcm9kdWN0X19zZWxlY3RlZCddID0gDQoJCQkJKGlzc2V0KCRqb2JbJ3Byb2R1Y3QnXSkgJiYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRqb2JbJ3Byb2R1Y3QnXSkgfHwgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGpvYlsncHJvZHVjdCddKSkpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJJHVwZGF0ZXJbJ2pvYl9vcmRlcl9fcHJvZHVjdF9fYWxsX2FsbG9jYXRlZCddID0gDQoJCQkJKCR1cGRhdGVyWydqb2Jfb3JkZXJfX3Byb2R1Y3RfX3NlbGVjdGVkJ10pID8gc2VsZjo6aXNBbGxBbGxvY2F0ZWQoJGpvYlsnaWQnXSwgJGpvYlsncHJvZHVjdCddKSA6IGZhbHNlOw0KCQkJJHVwZGF0ZXJbJ2pvYl9vcmRlcl9fcHJvZHVjdGlvbl9fc2VsZWN0ZWQnXSA9IA0KCQkJCShpc3NldCgkam9iWydwcm9kdWN0aW9uJ10pICYmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkam9iWydwcm9kdWN0aW9uJ10pIHx8IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRqb2JbJ3Byb2R1Y3Rpb24nXSkpKSA/IHRydWUgOiBmYWxzZTsNCgkJCSR1cGRhdGVyWydqb2Jfb3JkZXJfX29yZGVyX2RhdGVfX3NldCddID0gKGlzc2V0KCRqb2JbJ29yZGVyX2RhdGUnXSkpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJJHVwZGF0ZXJbJ2pvYl9vcmRlcl9fb3JkZXJfZGF0ZV9fcGFzdCddID0gKCRvcmRlclRpbWUgJiYgJG9yZGVyVGltZSA8ICRub3cpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJJHVwZGF0ZXJbJ2pvYl9vcmRlcl9fZGVsaXZlcnlfZGF0ZV9fc2V0J10gPSAoaXNzZXQoJGpvYlsnZGVsaXZlcnlfZGF0ZSddKSkgPyB0cnVlIDogZmFsc2U7DQoJCQkkdXBkYXRlclsnam9iX29yZGVyX19kZWxpdmVyeV9kYXRlX19wYXN0J10gPSAoJGRlbGl2ZXJ5VGltZSAmJiAkZGVsaXZlcnlUaW1lIDwgJG5vdykgPyB0cnVlIDogZmFsc2U7DQoJCQkvLyBzZXR1cCByZXBsYWNlbWVudCBhcnJheQ0KCQkJJHJlcGxhY2VbJ2pvYl9vcmRlcl9fcHJvZHVjdF9fc2VsZWN0ZWQnXSA9ICJ1cGRhdGVyWydqb2Jfb3JkZXJfX3Byb2R1Y3RfX3NlbGVjdGVkJ10iOw0KCQkJJHJlcGxhY2VbJ2pvYl9vcmRlcl9fcHJvZHVjdF9fYWxsX2FsbG9jYXRlZCddID0gInVwZGF0ZXJbJ2pvYl9vcmRlcl9fcHJvZHVjdF9fYWxsX2FsbG9jYXRlZCddIjsNCgkJCSRyZXBsYWNlWydqb2Jfb3JkZXJfX3Byb2R1Y3Rpb25fX3NlbGVjdGVkJ10gPSAidXBkYXRlclsnam9iX29yZGVyX19wcm9kdWN0aW9uX19zZWxlY3RlZCddIjsNCgkJCSRyZXBsYWNlWydqb2Jfb3JkZXJfX29yZGVyX2RhdGVfX3NldCddID0gInVwZGF0ZXJbJ2pvYl9vcmRlcl9fb3JkZXJfZGF0ZV9fc2V0J10iOw0KCQkJJHJlcGxhY2VbJ2pvYl9vcmRlcl9fb3JkZXJfZGF0ZV9fcGFzdCddID0gInVwZGF0ZXJbJ2pvYl9vcmRlcl9fb3JkZXJfZGF0ZV9fcGFzdCddIjsNCgkJCSRyZXBsYWNlWydqb2Jfb3JkZXJfX2RlbGl2ZXJ5X2RhdGVfX3NldCddID0gInVwZGF0ZXJbJ2pvYl9vcmRlcl9fZGVsaXZlcnlfZGF0ZV9fc2V0J10iOw0KCQkJJHJlcGxhY2VbJ2pvYl9vcmRlcl9fZGVsaXZlcnlfZGF0ZV9fcGFzdCddID0gInVwZGF0ZXJbJ2pvYl9vcmRlcl9fZGVsaXZlcnlfZGF0ZV9fcGFzdCddIjsNCgkJCS8vIHNldCB0aGUgY2hlY2stbGlzdCB2YWx1ZXMNCgkJCSRjaGVja0xpc3QgPSBzZWxmOjpnZXRDaGVja0xpc3QoKTsNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFycmF5DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNoZWNrTGlzdCkpDQoJCQl7DQoJCQkJZm9yZWFjaCgkY2hlY2tMaXN0IGFzICRvYmplY3QpDQoJCQkJew0KCQkJCQkvLyBzZXR1cCBzd2l0Y2hlcw0KCQkJCQkkdXBkYXRlclsoc3RyaW5nKSAkb2JqZWN0LT52YWx1ZV0gPSBmYWxzZTsNCgkJCQkJJHJlcGxhY2VbKHN0cmluZykgJG9iamVjdC0+dmFsdWVdID0gInVwZGF0ZXJbJyIuKHN0cmluZykgJG9iamVjdC0+dmFsdWUuIiddIjsNCgkJCQl9DQoJCQl9DQoJCQkvLyBub3cgc2V0IGpvYiBjaGVjayBsaXN0DQoJCQlpZiAoaXNzZXQoJGpvYlsnY2hlY2tfbGlzdCddKSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkam9iWydjaGVja19saXN0J10pKQ0KCQkJew0KCQkJCSRqb2JDaGVja0xpc3QgPSBqc29uX2RlY29kZSgkam9iWydjaGVja19saXN0J10sIHRydWUpOw0KCQkJfQ0KCQkJZWxzZWlmIChpc3NldCgkam9iWydjaGVja19saXN0J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRqb2JbJ2NoZWNrX2xpc3QnXSkpDQoJCQl7DQoJCQkJJGpvYkNoZWNrTGlzdCA9ICRqb2JbJ2NoZWNrX2xpc3QnXTsNCgkJCX0NCgkJCS8vIG5vdyB1cGRhdGUgdGhlIG9uY2Ugc2VsZWN0ZWQNCgkJCWlmIChpc3NldCgkam9iQ2hlY2tMaXN0KSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkam9iQ2hlY2tMaXN0KSkNCgkJCXsNCgkJCQlmb3JlYWNoICgkam9iQ2hlY2tMaXN0IGFzICR2YWx1ZSkNCgkJCQl7DQoJCQkJCSR1cGRhdGVyWyhzdHJpbmcpICR2YWx1ZV0gPSB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGdldCB0aGUgcHJvZHVjdGlvbiB0eXBlcw0KCQkJJHByb2R1Y3Rpb25UeXBlcyA9IHNlbGY6OmdldFByb2R1Y3Rpb25UeXBlcyh0cnVlKTsNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFycmF5DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHByb2R1Y3Rpb25UeXBlcykpDQoJCQl7DQoJCQkJZm9yZWFjaCgkcHJvZHVjdGlvblR5cGVzIGFzICRvYmplY3QpDQoJCQkJew0KCQkJCQkvLyBzZXR1cCBlbXB0eSB0eXBlcw0KCQkJCQlpZiAoJG9iamVjdC0+dHlwZSA9PSAnZW1wdHknKQ0KCQkJCQl7DQoJCQkJCQkkdXBkYXRlclsoc3RyaW5nKSAkb2JqZWN0LT52YWx1ZV0gPSBzZWxmOjppc0VtcHR5KCRqb2JbJ3Byb2R1Y3Rpb24nXSwoc3RyaW5nKSAkb2JqZWN0LT5maWVsZCwgJ3Byb2R1Y3Rpb25fdHlwZScsIChpbnQpICRvYmplY3QtPmlkKTsNCgkJCQkJCSRyZXBsYWNlWyhzdHJpbmcpICRvYmplY3QtPnZhbHVlXSA9ICJ1cGRhdGVyWyciLihzdHJpbmcpICRvYmplY3QtPnZhbHVlLiInXSI7DQoJCQkJCX0NCgkJCQkJZWxzZWlmICgkb2JqZWN0LT50eXBlID09ICdzZWxlY3RlZCcpDQoJCQkJCXsNCgkJCQkJCSR1cGRhdGVyWyhzdHJpbmcpICRvYmplY3QtPnZhbHVlXSA9IHNlbGY6OmlzRXEoJGpvYlsncHJvZHVjdGlvbiddLChzdHJpbmcpICRvYmplY3QtPmZpZWxkLCAoaW50KSAkb2JqZWN0LT5pZCk7DQoJCQkJCQkkcmVwbGFjZVsoc3RyaW5nKSAkb2JqZWN0LT52YWx1ZV0gPSAidXBkYXRlclsnIi4oc3RyaW5nKSAkb2JqZWN0LT52YWx1ZS4iJ10iOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gbm93IGxldHMgcnVuIHRoZSBhY3RpdmF0aW9uIHNjcmlwdHMNCgkJCSRzY3JpcHRzID0gc2VsZjo6Z2V0QWN0aXZhdGlvblNjcmlwdHMoKTsNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFycmF5DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHNjcmlwdHMpKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRzY3JpcHRzIGFzICRpZCA9PiAkc2NyaXB0KQ0KCQkJCXsNCgkJCQkJaWYgKCFlbXB0eSgkc2NyaXB0WydhY3RpdmF0ZSddKSkNCgkJCQkJew0KCQkJCQkJJHNjcmlwdCA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJHJlcGxhY2UpLCBhcnJheV92YWx1ZXMoJHJlcGxhY2UpLCBiYXNlNjRfZGVjb2RlKCRzY3JpcHRbJ2FjdGl2YXRlJ10pKTsNCgkJCQkJCWlmIChzZWxmOjpydW5GdW5jKCRzY3JpcHQsJHVwZGF0ZXIpKQ0KCQkJCQkJew0KCQkJCQkJCSRqb2JTdGF0dXNbXSA9ICRpZDsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkam9iU3RhdHVzKSkNCgkJCXsNCgkJCQlyZXR1cm4ganNvbl9lbmNvZGUoJGpvYlN0YXR1cyk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gaXNFcSgkZGF0YSwgJGZpbmQsICRpZCkNCgl7DQoJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCSRkYXRhID0ganNvbl9kZWNvZGUoJGRhdGEsdHJ1ZSk7DQoJCX0NCgkJLy8gbm90IGNoZWNrIGlmIGZpbmQgaXMgZm91bmQNCgkJaWYgKGlzc2V0KCRkYXRhWyRmaW5kXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJGZpbmRdKSkNCgkJew0KCQkJZm9yZWFjaCAoJGRhdGFbJGZpbmRdIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJew0KCQkJCWlmICgkdmFsdWUgPT0gJGlkKQ0KCQkJCXsNCgkJCQkJLy8gZXZlbiBpZiBvbmUgZmllbGQgaXMgZXF1YWwgcmV0dXJuIHRoYXQgaXQgaXMgZm91bmQNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIHRoZSBmaWVsZCBpcyBub3Qgc2V0LCB0aGVyZWZvcmUgbm90IHNlbGVjdGVkLg0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBpc0VtcHR5KCRkYXRhLCAkZmluZCwgJGFuZCA9IG51bGwsICRhdCA9IG51bGwpDQoJew0KCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQl7DQoJCQkkZGF0YSA9IGpzb25fZGVjb2RlKCRkYXRhLHRydWUpOw0KCQl9DQoJCS8vIG5vdCBjaGVjayBpZiBmaW5kIGlzIGZvdW5kDQoJCWlmIChpc3NldCgkZGF0YVskZmluZF0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRhWyRmaW5kXSkpDQoJCXsNCgkJCWZvcmVhY2ggKCRkYXRhWyRmaW5kXSBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCXsNCgkJCQlpZiAoJGFuZCkNCgkJCQl7DQoJCQkJCWlmICgkYXQpDQoJCQkJCXsNCgkJCQkJCWlmICgoZW1wdHkoJHZhbHVlKSB8fCAkdmFsdWUgPT0gJycpICYmIGlzc2V0KCRkYXRhWyRhbmRdWyRrZXldKSAmJiAkZGF0YVskYW5kXVska2V5XSA9PSAkYXQpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZXZlbiBpZiBvbmUgZmllbGQgaW4gZW1wdHkgd2Ugc2hvdWxkIHJldHVybiB0aGF0IGl0IGlzIGVtcHR5DQoJCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZWlmICgoZW1wdHkoJHZhbHVlKSB8fCAkdmFsdWUgPT0gJycpICYmIChlbXB0eSgkZGF0YVskYW5kXVska2V5XSkgfHwgJGRhdGFbJGFuZF1bJGtleV0gPT0gJycpKQ0KCQkJCQl7DQoJCQkJCQkvLyBldmVuIGlmIG9uZSBmaWVsZCBpbiBlbXB0eSB3ZSBzaG91bGQgcmV0dXJuIHRoYXQgaXQgaXMgZW1wdHkNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2VpZiAoZW1wdHkoJHZhbHVlKSB8fCAkdmFsdWUgPT0gJycpDQoJCQkJew0KCQkJCQkvLyBldmVuIGlmIG9uZSBmaWVsZCBpbiBlbXB0eSB3ZSBzaG91bGQgcmV0dXJuIHRoYXQgaXQgaXMgZW1wdHkNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gaWYgd2UgYXJyaXZlZCBoZXJlIHRoYXQgbWVhbnMgdGhlIGZpZWxkIGlzIG5vdCBlbXB0eQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCS8vIHRoZSBmaWVsZCBpcyBub3Qgc2V0LCB0aGVyZWZvcmUgZW1wdHkuDQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcnVuRnVuYygkc2NyaXB0LCYkdXBkYXRlcikNCgl7DQoJCXJldHVybiBzdHJsZW4oJHNjcmlwdCkgPyBldmFsKCIgIi4gJHNjcmlwdCAuICIgIiApOiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEFjdGl2YXRpb25TY3JpcHRzKCkNCgl7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkkcXVlcnktPnNlbGVjdCgnYS4qJyk7DQoNCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX2l0ZW0gdGFibGUNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fam9iX3N0YXR1cycsICdhJykpOw0KDQoJCS8vIExvYWQgdGhlIGl0ZW1zDQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZEFzc29jTGlzdCgnaWQnKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBpc0FsbEFsbG9jYXRlZCgkam9iX29yZGVyLCAkcHJvZHVjdHMpDQoJew0KCQlpZiAoJGpvYl9vcmRlciA+IDApDQoJCXsNCgkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcHJvZHVjdHMpKQ0KCQkJew0KCQkJCSRwcm9kdWN0cyA9IGpzb25fZGVjb2RlKCRwcm9kdWN0cywgdHJ1ZSk7DQoJCQl9DQoJCQlpZiAoaXNzZXQoJHByb2R1Y3RzWydpdGVtJ10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwcm9kdWN0c1snaXRlbSddKSkNCgkJCXsNCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCQlmb3JlYWNoICgkcHJvZHVjdHNbJ2l0ZW0nXSBhcyAkbnIgPT4gJGl0ZW0pDQoJCQkJew0KCQkJCQkkZm91bmQgPSBzZWxmOjpnZXROZWVkZWRJdGVtKCRqb2Jfb3JkZXIsICRpdGVtLCAkZGIpOw0KCQkJCQlpZiAoIWlzc2V0KCRmb3VuZC0+YWxsb2NhdGVkKSB8fCAkZm91bmQtPmFsbG9jYXRlZCAhPSAkcHJvZHVjdHNbJ3F0eSddWyRucl0pDQoJCQkJCXsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuZXdKb2JOdW1iZXIoKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCdqb2JudW1iZXInKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fam9iX29yZGVyJykpOw0KCQkkcXVlcnktPm9yZGVyKCdqb2JudW1iZXIgQVNDJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJGpvYm51bWJlcnMgPSAkZGItPmxvYWRDb2x1bW4oKTsNCgkJCSRsYXN0ID0gZW5kKCRqb2JudW1iZXJzKTsNCgkJCS8vIGdldCB0aGUgbnVtYmVyDQoJCQkkbGFzdCA9IChpbnQpIHByZWdfcmVwbGFjZSgiL1teMC05LC5dLyIsICIiLCAkbGFzdCk7DQoJCQkvLyBpbmNyZW1lbnQNCgkJCXJldHVybiAnSicuc3ByaW50ZignJTA4ZCcsICsrJGxhc3QpOw0KCQl9DQoJCXJldHVybiAnSicuc3ByaW50ZignJTA4ZCcsIDEpOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdW5pcXVlTnIoJiRpdGVtICwgJHdoZXJlKQ0KCXsNCgkJbGlzdCgkdHlwZSwgJGNvbHVtbikgPSBleHBsb2RlKCcuJywgJHdoZXJlKTsNCgkJaWYgKCR0eXBlICYmICRjb2x1bW4pDQoJCXsNCgkJCS8vIGxvYWQgdGhlIGFsbCBpdGVtcyB3aXRoIHRoZSBzYW1lIGNvbHVtbg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KGFycmF5KCdpZCcgLCdjcmVhdGVkJykpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fJy4kdHlwZSkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgkY29sdW1uKSAuICcgPSAnLiRkYi0+cXVvdGUoJGl0ZW0tPiRjb2x1bW4pKTsNCgkJCSRxdWVyeS0+b3JkZXIoJ2NyZWF0ZWQgQVNDJyk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkZm91bmQgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkJaWYgKGNvdW50KCRmb3VuZCkgPiAxKQ0KCQkJCXsNCgkJCQkJLy8gaXMgdGhlIGN1cnJlbnQgaXRlbSB0aGUgb2xkZXIgb25lPw0KCQkJCQlpZiAoJGl0ZW0tPmlkICE9ICRmb3VuZFswXS0+aWQpDQoJCQkJCXsNCgkJCQkJCS8vIGZpcnN0IHVwZGF0ZSB0aGUgaXRlbQ0KCQkJCQkJJGl0ZW0tPiRjb2x1bW4JCT0gc2VsZjo6bmV3Sm9iTnVtYmVyKCk7DQoJCQkJCQkvLyBub3cgdXBkYXRlIHRoZSB0YWJsZQ0KCQkJCQkJJHVwZGF0ZUl0ZW0JCT0gbmV3IFxzdGRDbGFzczsNCgkJCQkJCSR1cGRhdGVJdGVtLT5pZAkJPSAkaXRlbS0+aWQ7DQoJCQkJCQkkdXBkYXRlSXRlbS0+JGNvbHVtbgk9ICRpdGVtLT4kY29sdW1uOwkJCQkJCQ0KCQkJCQkJLy8gdXBkYXRlIHRoZSBpdGVtIG5vdw0KCQkJCQkJRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dXycuJHR5cGUsICR1cGRhdGVJdGVtLCAnaWQnKTsJCQkJCQkNCgkJCQkJfQ0KCQkJCX0NCgkJDQoJCQl9DQoJCQkNCgkJfQ0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFibGUoJHR5cGUgPSBudWxsLCAkcHJlZml4ID0gJ1tbW0NvbXBvbmVudF1dXVRhYmxlJywgJGNvbmZpZyA9IGFycmF5KCkpDQoJew0KCQlpZiAoJHR5cGUpDQoJCXsNCgkJCXJldHVybiBKVGFibGU6OmdldEluc3RhbmNlKCR0eXBlLCAkcHJlZml4LCAkY29uZmlnKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNKb2JzKCR1c2VyID0gbnVsbCwgJGdyb3VwID0gbnVsbCkNCgl7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCdqb2Jfc3RhdHVzJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fam9iX29yZGVyJykpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCSRpdGVtcyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaXRlbXMpKQ0KCQkJew0KCQkJCWlmICghaXNzZXQoJHVzZXIpIHx8ICFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkdXNlcikpDQoJCQkJew0KCQkJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJCQl9DQoJCQkJaWYgKCFpc3NldCgkZ3JvdXBzKSB8fCAhU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdyb3VwcykpDQoJCQkJew0KCQkJCQkkZ3JvdXBzID0gKGFycmF5KSAkdXNlci0+Z2V0KCdncm91cHMnKTsNCgkJCQl9DQoJCQkJLy8gdGhlIGJ1Y2tldCBvZiBoaXMgaWRzDQoJCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OmlzSGlzKCRpdGVtLT5pZCwgJHVzZXIsICRncm91cCwgJGl0ZW0tPmpvYl9zdGF0dXMpKQ0KCQkJCQl7DQoJCQkJCQkkYnVja2V0W10gPSAkaXRlbS0+aWQ7DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuICRidWNrZXQ7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzSGlzKCRqb2IsICR1c2VyID0gbnVsbCwgJGdyb3VwID0gbnVsbCwgJGpvYlN0YXR1cyA9IG51bGwpDQoJew0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCR1c2VyKSkNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCX0NCgkJaWYgKCEkdXNlci0+YXV0aG9yaXNlKCdjb3JlLm9wdGlvbnMnLCAnY29tX1tbW2NvbXBvbmVudF1dXScpKQ0KCQl7DQoJCQlpZiAoISRqb2JTdGF0dXMpDQoJCQl7DQoJCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkam9iKSAmJiAhaXNzZXQoJGpvYi0+am9iX3N0YXR1cykpDQoJCQkJew0KCQkJCQkkam9iU3RhdHVzID0gc2VsZjo6Z2V0VmFyKCdqb2Jfb3JkZXInLCAoaW50KSAkam9iLCAnaWQnLCAnam9iX3N0YXR1cycpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkam9iU3RhdHVzID0gc2VsZjo6Z2V0VmFyKCdqb2Jfb3JkZXInLCAoaW50KSAkam9iLT5pZCwgJ2lkJywgJ2pvYl9zdGF0dXMnKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayB0aGF0IHRoZXJlIGFyZSBzdGF0dXMgc2V0IGZvciB0aGlzIGpvYi1vcmRlcg0KCQkJaWYgKGlzc2V0KCRqb2JTdGF0dXMpICYmIFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRqb2JTdGF0dXMpKQ0KCQkJew0KCQkJCSRqb2JTdGF0dXNlcyA9IGpzb25fZGVjb2RlKCRqb2JTdGF0dXMsIHRydWUpOw0KCQkJfQ0KCQkJZWxzZWlmIChpc3NldCgkam9iU3RhdHVzKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkam9iU3RhdHVzKSkNCgkJCXsNCgkJCQkkam9iU3RhdHVzZXMgPSBhcnJheSgkam9iU3RhdHVzKTsNCgkJCX0NCgkJCWlmIChpc3NldCgkam9iU3RhdHVzZXMpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRqb2JTdGF0dXNlcykpDQoJCQl7DQoJCQkJaWYgKCFpc3NldCgkZ3JvdXBzKSB8fCAhU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdyb3VwcykpDQoJCQkJew0KCQkJCQkkZ3JvdXBzID0gKGFycmF5KSAkdXNlci0+Z2V0KCdncm91cHMnKTsNCgkJCQl9DQoJCQkJaWYgKCRoaXNTdGF0dXNlcyA9IHNlbGY6Omhpc1N0YXR1c2VzKCdzdGF0dXMtaWQnLCRncm91cHMpKQ0KCQkJCXsNCgkJCQkJaWYgKGFycmF5X2ludGVyc2VjdCgkaGlzU3RhdHVzZXMsICRqb2JTdGF0dXNlcykpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuIHNlbGY6OmVkaXRpbmdBY2Nlc3MoJGpvYiwgJHVzZXIpOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljICRzdGF0dXNlcyA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc1N0YXR1c2VzKCR0eXBlLCAkZ3JvdXBzID0gbnVsbCkNCgl7DQoJCWlmICghU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdyb3VwcykpDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQkJJGdyb3VwcyA9IChhcnJheSkgJHVzZXItPmdldCgnZ3JvdXBzJyk7DQoJCX0NCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRncm91cHMpKQ0KCQl7DQoJCQkkbWQ1ID0gbWQ1KGpzb25fZW5jb2RlKCRncm91cHMpLiR0eXBlKTsNCgkJCWlmICghaXNzZXQoc2VsZjo6JHN0YXR1c2VzWyRtZDVdKSkNCgkJCXsNCgkJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJCQkvLyBTZWxlY3Qgc29tZSBmaWVsZHMNCgkJCQkkcXVlcnktPnNlbGVjdCgnYS4qJyk7DQoNCgkJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1faXRlbSB0YWJsZQ0KCQkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2pvYl9zdGF0dXMnLCAnYScpKTsNCg0KCQkJCS8vIExvYWQgdGhlIGl0ZW1zDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCSRpdGVtcyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQkJc2VsZjo6JHN0YXR1c2VzWyRtZDVdID0gYXJyYXkoKTsNCgkJCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQkJCQl7DQoJCQkJCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPnN3aXRjaCkpDQoJCQkJCQl7DQoJCQkJCQkJJHN3aXRjaGVzID0ganNvbl9kZWNvZGUoJGl0ZW0tPnN3aXRjaCwgdHJ1ZSk7DQoJCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzd2l0Y2hlcykpDQoJCQkJCQkJew0KCQkJCQkJCQlmb3JlYWNoICgkc3dpdGNoZXMgYXMgJGZpZWxkID0+ICR2YWx1ZXMpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCWlmICgnc3dpdGNoJyA9PSAkZmllbGQgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZhbHVlcykpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJZm9yZWFjaCAoJHZhbHVlcyBhcyAkbnIgPT4gJHZhbHVlKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJaWYgKGFycmF5X2ludGVyc2VjdCgkc3dpdGNoZXNbJ2dyb3VwcyddWyRucl0sICRncm91cHMpKQ0KCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQlpZiAoJHR5cGUgPT0gJ2NoZWNrLWxpc3QnKQ0KCQkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJCSRzdGF0dXNOYW1lID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkaXRlbS0+bmFtZSk7DQoJCQkJCQkJCQkJCQkJJHN3aXRjaE5hbWUgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR2YWx1ZSk7DQoJCQkJCQkJCQkJCQkJc2VsZjo6JHN0YXR1c2VzWyRtZDVdW10gPSAkc3RhdHVzTmFtZS4nX18nLiRzd2l0Y2hOYW1lLidfX3NlbGVjdGVkJzsNCgkJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkJCWVsc2VpZiAoJHR5cGUgPT0gJ3N0YXR1cy1pZCcpDQoJCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQkJc2VsZjo6JHN0YXR1c2VzWyRtZDVdWyRpdGVtLT5pZF0gPSAkaXRlbS0+aWQ7DQoJCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyBvbmx5IHJldHVybiBpZiB2YWx1ZXMgaGFzIGJlZW4gc2V0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHN0YXR1c2VzWyRtZDVdKSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JHN0YXR1c2VzWyRtZDVdOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVkaXRpbmdBY2Nlc3MoJGl0ZW0sICR1c2VyID0gbnVsbCkNCgl7DQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJHVzZXIpKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJfQ0KCQlpZiAoISR1c2VyLT5hdXRob3Jpc2UoJ2NvcmUub3B0aW9ucycsICdjb21fW1tbY29tcG9uZW50XV1dJykpDQoJCXsNCgkJCS8vIGlmIG93bmVyIHdobyBjcmVhdGVkIGl0DQoJCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGl0ZW0pICYmIGlzc2V0KCRpdGVtLT5jcmVhdGVkX2J5KSkNCgkJCXsNCgkJCQkkY3JlYXRlZF9ieSA9ICRpdGVtLT5jcmVhdGVkX2J5Ow0KCQkJfQ0KCQkJZWxzZWlmIChpc19udW1lcmljKCRpdGVtKSkNCgkJCXsNCgkJCQkkY3JlYXRlZF9ieSA9IHNlbGY6OmdldFZhcignam9iX29yZGVyJywgKGludCkgJGl0ZW0sICdpZCcsICdjcmVhdGVkX2J5Jyk7DQoJCQl9DQoJCQlpZiAoaXNzZXQoJGNyZWF0ZWRfYnkpICYmIGlzX251bWVyaWMoJGNyZWF0ZWRfYnkpICYmICFlbXB0eSgkY3JlYXRlZF9ieSkgJiYgJGNyZWF0ZWRfYnkgIT0gMCAmJiAkY3JlYXRlZF9ieSA9PSAkdXNlci0+aWQpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCQkvLyBpZiBjaGVja2VkIGl0IG91dCBieSB0aGlzIHVzZXINCgkJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkaXRlbSkgJiYgaXNzZXQoJGl0ZW0tPmNoZWNrZWRfb3V0KSkNCgkJCXsNCgkJCQkkY2hlY2tlZF9vdXQgPSAkaXRlbS0+Y2hlY2tlZF9vdXQ7DQoJCQl9DQoJCQllbHNlaWYgKGlzX251bWVyaWMoJGl0ZW0pKQ0KCQkJew0KCQkJCSRjaGVja2VkX291dCA9IHNlbGY6OmdldFZhcignam9iX29yZGVyJywgKGludCkgJGl0ZW0sICdpZCcsICdjaGVja2VkX291dCcpOw0KCQkJfQ0KCQkJaWYgKGlzc2V0KCRjaGVja2VkX291dCkgJiYgaXNfbnVtZXJpYygkY2hlY2tlZF9vdXQpICYmICFlbXB0eSgkY2hlY2tlZF9vdXQpICYmICRjaGVja2VkX291dCAhPSAwICYmICRjaGVja2VkX291dCA9PSAkdXNlci0+aWQpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCQkvLyBvciBpZiBtb2RpZmllZCBieSB0aGlzIHVzZXIgMTAgbWludXRlcyBhZ28NCgkJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkaXRlbSkgJiYgaXNzZXQoJGl0ZW0tPm1vZGlmaWVkX2J5KSkNCgkJCXsNCgkJCQkkbW9kaWZpZWRfYnkgPSAkaXRlbS0+bW9kaWZpZWRfYnk7DQoJCQl9DQoJCQllbHNlaWYgKGlzX251bWVyaWMoJGl0ZW0pKQ0KCQkJew0KCQkJCSRtb2RpZmllZF9ieSA9IHNlbGY6OmdldFZhcignam9iX29yZGVyJywgKGludCkgJGl0ZW0sICdpZCcsICdtb2RpZmllZF9ieScpOw0KCQkJfQkJCQkNCgkJCWlmIChpc3NldCgkbW9kaWZpZWRfYnkpICYmICFlbXB0eSgkbW9kaWZpZWRfYnkpICYmICRtb2RpZmllZF9ieSAhPSAwICYmICRtb2RpZmllZF9ieSA9PSAkdXNlci0+aWQpDQoJCQl7DQoJCQkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRpdGVtKSAmJiBpc3NldCgkaXRlbS0+bW9kaWZpZWQpKQ0KCQkJCXsNCgkJCQkJJG1vZGlmaWVkID0gJGl0ZW0tPm1vZGlmaWVkOw0KCQkJCX0NCgkJCQllbHNlaWYgKGlzX251bWVyaWMoJGl0ZW0pKQ0KCQkJCXsNCgkJCQkJJG1vZGlmaWVkID0gc2VsZjo6Z2V0VmFyKCdqb2Jfb3JkZXInLCAoaW50KSAkaXRlbSwgJ2lkJywgJ21vZGlmaWVkJyk7DQoJCQkJfQ0KCQkJCSRtb2RpZmllZFRpbWUgPSAoIWVtcHR5KCRtb2RpZmllZCkgJiYgJG1vZGlmaWVkICE9ICcwMDAwLTAwLTAwIDAwOjAwOjAwJykgPyBzdHJ0b3RpbWUoJG1vZGlmaWVkKSA6IGZhbHNlOw0KCQkJCWlmICgkbW9kaWZpZWRUaW1lKQ0KCQkJCXsNCgkJCQkJJG5vdyA9IEZhY3Rvcnk6OmdldERhdGUoKS0+dG9Vbml4KCk7DQogCQkJCQkkdGVuTWludXRzQWdvID0gJG5vdyAtICgxMCAqIDYwKTsNCgkJCQkJaWYgKCRtb2RpZmllZFRpbWUgPiAkdGVuTWludXRzQWdvKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldENsaWVudCgkZGF0YSkNCgl7DQoJCSRzZXRWYWx1ZXMgID0gYXJyYXkoDQoJCQknbmFtZScsJ2NvbnRhY3RfcGVyc29uJywnZW1haWwnLA0KCQkJJ3Bob25lJywnbW9iaWxlX3Bob25lJywnZmF4Jywnd2Vic2l0ZScsDQoJCQknc3RyZWV0JywncG9zdGFsJywncmVnaW9uJywnY2l0eScsJ2NvdW50cnknLA0KCQkJJ3Bvc3RhbGNvZGUnICk7DQoJCS8vIG5ldyBjbGllbnQNCgkJJGNsaWVudCA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJZm9yZWFjaCAoJHNldFZhbHVlcyBhcyAkbG9hZCkNCgkJew0KCQkJaWYgKGlzc2V0KCRkYXRhWyRsb2FkXSkgJiYgIWVtcHR5KCRkYXRhWyRsb2FkXSkpDQoJCQl7DQoJCQkJJGNsaWVudC0+JGxvYWQgPSAkZGF0YVskbG9hZF07DQoJCQl9DQoJCX0NCgkJLy8gb25seSBjcmVhdGUgaWYgYWxsIG5lZWRlZCB2YWx1ZXMgYXJlIHNldA0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGNsaWVudCkgJiYgaXNzZXQoJGNsaWVudC0+bmFtZSkgJiYgaXNzZXQoJGNsaWVudC0+ZW1haWwpICYmIChpc3NldCgkY2xpZW50LT5waG9uZSkgfHwgaXNzZXQoJGNsaWVudC0+bW9iaWxlX3Bob25lKSkpDQoJCXsNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gbG9hZCBmZXcgbW9yZSBuZWVkZWQgdmFsdWVzDQoJCQkkY2xpZW50LT5jcmVhdGVkX2J5CT0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJCSRjbGllbnQtPmNyZWF0ZWQJCT0gRmFjdG9yeTo6Z2V0RGF0ZSgpLT50b1NxbCgpOw0KCQkJJGNsaWVudC0+cHVibGlzaGVkCT0gMTsNCgkJCSRjbGllbnQtPmFjY2VzcwkJPSAxOw0KCQkJJGNsaWVudC0+b3JkZXJpbmcJPSAxOw0KCQkJJGNsaWVudC0+dmVyc2lvbgkJPSAxOw0KCQkJLy8gbm93IGNyZWF0ZSB0aGUgY2xpZW50DQoJCQkkZG9uZSA9ICRkYi0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fY2xpZW50JywgJGNsaWVudCk7DQoJCQlpZiAoJGRvbmUpDQoJCQl7DQoJCQkJJGlkID0gJGRiLT5pbnNlcnRpZCgpOw0KCQkJCS8vIG1ha2Ugc3VyZSB0aGUgYWNjZXNzIG9mIGFzc2V0IGlzIHNldA0KCQkJCXNlbGY6OnNldEFzc2V0KCRpZCwnY2xpZW50Jyk7DQoJCQkJLy8gcmV0dXJuIHRoZSBuZXcgY2xpZW50IGlkDQoJCQkJcmV0dXJuICRpZDsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gMDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEltYWdlRmlsZVByb3BlcnRpZXMoJGltYWdlKQ0KCXsNCgkJJHNldGltYWdlc2ZvbGRlciA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKS0+Z2V0KCdzZXRpbWFnZXNmb2xkZXInLCAxKTsNCgkJaWYgKDIgPT0gJHNldGltYWdlc2ZvbGRlcikNCgkJew0KCQkJJGxvY2FsZm9sZGVyID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpLT5nZXQoJ2ltYWdlc2ZvbGRlcicsIEpQQVRIX1NJVEUuJy9pbWFnZXMvIyMjY29tcG9uZW50IyMjJyk7DQoJCX0NCgkJZWxzZWlmICgxID09ICRzZXRpbWFnZXNmb2xkZXIpDQoJCXsNCgkJCSRsb2NhbGZvbGRlciA9ICBKUEFUSF9TSVRFLicvaW1hZ2VzJzsNCgkJfQ0KCQllbHNlIC8vIGp1c3QgaW4tY2FzZSA6KQ0KCQl7DQoJCQkkbG9jYWxmb2xkZXIgPSAgSlBBVEhfU0lURS4nL2ltYWdlcy8jIyNjb21wb25lbnQjIyMnOw0KCQl9DQoJCS8vIGltcG9ydCBhbGwgbmVlZGVkIGNsYXNzZXMNCgkJamltcG9ydCgnam9vbWxhLmZpbGVzeXN0ZW0uZm9sZGVyJyk7DQoJCWppbXBvcnQoJ2pvb21sYS5maWxlc3lzdGVtLmZpbGUnKTsNCgkJamltcG9ydCgnam9vbWxhLmltYWdlLmltYWdlJyk7DQoJCS8vIHNldHVwIHRoZSBmb2xkZXIgaWYgaXQgZG9lcyBub3QgZXhpc3QNCgkJaWYgKEpGb2xkZXI6OmV4aXN0cygkbG9jYWxmb2xkZXIpICYmIEpGaWxlOjpleGlzdHMoJGxvY2FsZm9sZGVyLicvJy4kaW1hZ2UpKQ0KCQl7DQoJCQkkcHJvcGVydGllcyA9IEpJbWFnZTo6Z2V0SW1hZ2VGaWxlUHJvcGVydGllcygkbG9jYWxmb2xkZXIuJy8nLiRpbWFnZSk7DQoJCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHByb3BlcnRpZXMNCgkJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkcHJvcGVydGllcykpDQoJCQl7DQoJCQkJLy8gcmVtb3ZlIHRoZSBzZXJ2ZXIgcGF0aA0KCQkJCSRpbWFnZVBhdGggPSB0cmltKHN0cl9yZXBsYWNlKEpQQVRIX1NJVEUsJycsJGxvY2FsZm9sZGVyKSwnLycpLicvJy4kaW1hZ2U7DQoJCQkJLy8gbm93IGFkZCB0aGUgc3JjIHBhdGggdG8gc2hvdyB0aGUgaW1hZ2UNCgkJCQkkcHJvcGVydGllcy0+c3JjID0gVXJpOjpyb290KCkuJGltYWdlUGF0aDsNCgkJCQkvLyByZXR1cm4gdGhlIGltYWdlIHByb3BlcnRpZXMNCgkJCQlyZXR1cm4gJHByb3BlcnRpZXM7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljICR0YXhMb2NhdGlvbiA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRheExvY2F0aW9uKCR0eXBlLCAkaWQsICR2aWV3KQ0KCXsNCgkJaWYgKCRpZCA+IDAgKQ0KCQl7DQoJCQkka2V5ID0gJHR5cGUuJHZpZXcuJGlkOw0KCQkJaWYgKCFpc3NldChzZWxmOjokdGF4TG9jYXRpb25bJGtleV0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldFRheExvY2F0aW9uKCR0eXBlLCAkaWQsICR2aWV3LCAka2V5KTsNCgkJCX0NCgkJCWlmIChpc3NldChzZWxmOjokdGF4TG9jYXRpb25bJGtleV0pICYmIHNlbGY6OiR0YXhMb2NhdGlvblska2V5XSA+IDApDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiR0YXhMb2NhdGlvblska2V5XTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRUYXhMb2NhdGlvbigkdHlwZSwgJGlkLCAkdmlldywgJGtleSkNCgl7DQoJCXN3aXRjaCAoJHZpZXcpDQoJCXsNCgkJCWNhc2UgJ2pvYl9vcmRlcic6DQoJCQkJLy8gZ2V0IHRoZSBjbGllbnQgaWQgZnJvbSBqb2IgaWQNCgkJCQkkY2xpZW50X2lkID0gc2VsZjo6Z2V0VmFyKCR2aWV3LCAkaWQsICdpZCcsICdjbGllbnQnKTsNCgkJCQkvLyByZXR1cm4gbG9jYXRpb24gaWQgZnJvbSBjbGllbnQgdGFibGUNCgkJCQlpZiAoJGNsaWVudF9pZCA+IDApDQoJCQkJew0KCQkJCQlzZWxmOjokdGF4TG9jYXRpb25bJGtleV0gPSBzZWxmOjpnZXRWYXIoJ2NsaWVudCcsICRjbGllbnRfaWQsICdpZCcsICR0eXBlKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGF4KCYkdGF4ZWQsICYkdG90YWwsICRpZCwgJHZpZXcpDQoJew0KCQkkc2V0VGF4ID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpLT5nZXQoJ3RheGVkJywgMCk7DQoJCWlmICgkc2V0VGF4ID09IDEpDQoJCXsNCgkJCS8vIHNldCB0aGUgdGF4IHRvIHRoaXMgYXJyYXkNCgkJCSR0YXggPSBhcnJheSgpOw0KCQkJJHRheEFkZFRvdGFsID0gYXJyYXkoKTsNCgkJCSRkZWR1Y3QgPSBhcnJheSgpOw0KCQkJLy8gZ2V0IHRoZSBjb3VudHJ5IG9mIHRoZSBjbGllbnQNCgkJCSRjb3VudHJ5ID0gc2VsZjo6Z2V0VGF4TG9jYXRpb24oJ2NvdW50cnknLCAkaWQsICR2aWV3KTsNCgkJCS8vIGdldCB0aGUgcmVnaW9uIG9mIHRoZSBjbGllbnQNCgkJCSRyZWdpb24gPSBzZWxmOjpnZXRUYXhMb2NhdGlvbigncmVnaW9uJywgJGlkLCAkdmlldyk7DQoJCQkvLyBub3cgZ2V0IHRheCBsZXZlbCAxIG9mIHRoaXMgQ291bnRyeSBhbmQgb3IgUmVnaW9uDQoJCQkkdGF4TGV2ZWwxID0gc2VsZjo6Z2V0VGF4UnVsZSgxLCRjb3VudHJ5LCRyZWdpb24pOw0KCQkJLy8gbm93IGdldCB0YXggbGV2ZWwgMiBvZiB0aGlzIENvdW50cnkgYW5kIG9yIFJlZ2lvbg0KCQkJJHRheExldmVsMiA9IHNlbGY6OmdldFRheFJ1bGUoMiwkY291bnRyeSwkcmVnaW9uKTsNCgkJCS8vIHRheCB0eXBlcw0KCQkJJHRheF90eXBlID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpLT5nZXQoJ3RheF90eXBlJywgMik7DQoJCQkvLyB0YXggY29tcG91bmQNCgkJCSR0YXhfY29tcG91bmQgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fIyMjY29tcG9uZW50IyMjJyktPmdldCgndGF4X2NvbXBvdW5kJywgbnVsbCk7DQoJCQkvLyBiYXNlZCBvbiB0YXggdHlwZQ0KCQkJaWYgKDIgPT0gJHRheF90eXBlKQ0KCQkJew0KCQkJCS8vIHRheCBleGNsdWRlZA0KCQkJCWlmICgkdGF4TGV2ZWwxICYmIGlzc2V0KCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc19udW1lcmljKCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc3NldCgkdGF4TGV2ZWwxWyduYW1lJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0YXhMZXZlbDFbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGF4WzBdWyduYW1lJ10gPSAkdGF4TGV2ZWwxWyduYW1lJ107DQoJCQkJCSR0YXhbMF1bJ3RheCddID0gJHRheExldmVsMVsndGF4J107DQoJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkLCAkdGF4TGV2ZWwxWyd0YXgnXSwgMjApOw0KCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9IGJjZGl2KCR0bXBBbW91bnQsIDEwMCwgNCk7DQoJCQkJCS8vIGFkZCB0byB0YXggdG90YWwNCgkJCQkJJHRheEFkZFRvdGFsW10gPSAkdGF4WzBdWydhbW91bnQnXTsNCgkJCQl9DQoJCQkJaWYgKCR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDJbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMlsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJJHRheFsxXVsndGF4J10gPSAkdGF4TGV2ZWwyWyd0YXgnXTsNCgkJCQkJaWYgKCR0YXhfY29tcG91bmQgPT0gMSAmJiBpc3NldCgkdGF4WzBdWydhbW91bnQnXSkgJiYgJHRheFswXVsnYW1vdW50J10gPiAwKQ0KCQkJCQl7DQoJCQkJCQkkdGF4ZWRTdWIgPSBiY2FkZCgkdGF4ZWQsICR0YXhbMF1bJ2Ftb3VudCddLCAyMCk7DQoJCQkJCQkkdG1wQW1vdW50ID0gIGJjbXVsKCR0YXhlZFN1YiwgJHRheExldmVsMlsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNkaXYoJHRtcEFtb3VudCwgMTAwLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkLCAkdGF4TGV2ZWwyWyd0YXgnXSwgMjApOw0KCQkJCQkJJHRheFsxXVsnYW1vdW50J10gPSBiY2RpdigkdG1wQW1vdW50LCAxMDAsIDQpOw0KCQkJCQl9DQoJCQkJCS8vIGFkZCB0byB0YXggdG90YWwNCgkJCQkJJHRheEFkZFRvdGFsW10gPSAkdGF4WzFdWydhbW91bnQnXTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKDEgPT0gJHRheF90eXBlKQ0KCQkJew0KCQkJCSRyZW1vdmFsID0gYXJyYXkoKTsNCgkJCQkvLyB0YXggaW5jbHVkZWQNCgkJCQlpZiAoJHRheExldmVsMSAmJiBpc3NldCgkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMVsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwxWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHJlbW92YWxbXSA9ICR0YXhMZXZlbDFbJ3RheCddOw0KCQkJCX0NCgkJCQlpZiAoJHRheExldmVsMiAmJiBpc3NldCgkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMlsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwyWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHJlbW92YWxbXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCX0NCgkJCQkkcmVtb3ZhbCA9IHNlbGY6OmJjc3VtKCRyZW1vdmFsKTsNCgkJCQkvLyB0YXggaW5jbHVkZWQNCgkJCQlpZiAoJHRheExldmVsMSAmJiBpc3NldCgkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMVsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwxWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRheFswXVsnbmFtZSddID0gJHRheExldmVsMVsnbmFtZSddOw0KCQkJCQkkdGF4WzBdWyd0YXgnXSA9ICR0YXhMZXZlbDFbJ3RheCddOw0KCQkJCQlpZiAoJHRheF9jb21wb3VuZCA9PSAxICYmICR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pKQ0KCQkJCQl7DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkdGF4TGV2ZWwyWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsX2EgPSBiY2RpdigkdGF4ZWQsICR0ZW1wVmFsMiwgMjApOw0KCQkJCQkJJHRlbXBWYWwzID0gYmNkaXYoJHRheExldmVsMVsndGF4J10sIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWw0ID0gYmNhZGQoJHRlbXBWYWwzLCAxLCAyMCk7DQoJCQkJCQkkdGVtcFZhbF9iID0gYmNkaXYoJHRlbXBWYWxfYSwgJHRlbXBWYWw0LCAyMCk7DQoJCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9ICBiY3N1YigkdGVtcFZhbF9hLCAkdGVtcFZhbF9iLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0ZW1wVmFsMSA9IGJjZGl2KCRyZW1vdmFsLCAxMDAsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsMiA9IGJjYWRkKCR0ZW1wVmFsMSwgMSwgMjApOw0KCQkJCQkJJGV4Y2x1ZGluZyA9IGJjZGl2KCR0YXhlZCwgJHRlbXBWYWwyLCAyMCk7DQoJCQkJCQkkdGVtcFZhbCA9IGJjbXVsKCRleGNsdWRpbmcsICR0YXhMZXZlbDFbJ3RheCddLCAyMCk7DQoJCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9IGJjZGl2KCR0ZW1wVmFsLCAxMDAsIDQpOyANCgkJCQkJfQ0KCQkJCQkvLyByZW1vdmUgZnJvbSBwcmljZQ0KCQkJCQkkZGVkdWN0W10gPSAkdGF4WzBdWydhbW91bnQnXTsNCgkJCQl9DQoJCQkJaWYgKCR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDJbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMlsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJJHRheFsxXVsndGF4J10gPSAkdGF4TGV2ZWwyWyd0YXgnXTsNCgkJCQkJaWYgKCR0YXhfY29tcG91bmQgPT0gMSAmJiBpc3NldCgkdGF4WzBdWydhbW91bnQnXSkgJiYgJHRheFswXVsnYW1vdW50J10gPiAwKQ0KCQkJCQl7DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkdGF4TGV2ZWwyWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNzdWIoJHRheGVkLCAkdGVtcFZhbCwgNCk7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkdGF4WzFdWyduYW1lJ10gPSAkdGF4TGV2ZWwyWyduYW1lJ107DQoJCQkJCQkkdGF4WzFdWyd0YXgnXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCQkJJHRlbXBWYWwxID0gYmNkaXYoJHJlbW92YWwsIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWwyID0gYmNhZGQoJHRlbXBWYWwxLCAxLCAyMCk7DQoJCQkJCQkkZXhjbHVkaW5nID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNtdWwoJGV4Y2x1ZGluZywgJHRheExldmVsMlsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNkaXYoJHRlbXBWYWwsIDEwMCwgNCk7IA0KCQkJCQl9DQoJCQkJCS8vIHJlbW92ZSBmcm9tIHByaWNlDQoJCQkJCSRkZWR1Y3RbXSA9ICR0YXhbMV1bJ2Ftb3VudCddOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGNoZWNrIGlmIHRoZXJlIHdhcyB0YXggc2V0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRheCkpDQoJCQl7DQoJCQkJLy8gYWRkIHRoZSB0YXggdG8gdG90YWwNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRheEFkZFRvdGFsKSkNCgkJCQl7DQoJCQkJCSR0YXhlZCA9IHNlbGY6OmJjc3VtKCR0YXhBZGRUb3RhbCk7DQoJCQkJCSR0b3RhbCA9IHNlbGY6OmJjc3VtKGFycmF5KCR0b3RhbCwgJHRheGVkKSk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRlZHVjdCkpDQoJCQkJew0KCQkJCQkkdGF4ZWQgPSBzZWxmOjpiY3N1bSgkZGVkdWN0KTsNCgkJCQl9DQoJCQkJcmV0dXJuICR0YXg7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkJDQoJcHJvdGVjdGVkIHN0YXRpYyAkdGF4cnVsZXMgPSBhcnJheSgpOw0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRUYXhSdWxlKCRsZXZlbCwgJGNvdW50cnkgPSAwLCAkcmVnaW9uID0gMCkNCgl7DQoJCS8vIGJ1aWxkIHRoZSBrZXkNCgkJJGtleSA9ICRsZXZlbC4kY291bnRyeS4kcmVnaW9uOw0KCQkvLyBjaGVjayBpZiBpdCBoYXMgYmVlbiBzZXQNCgkJaWYgKCFpc3NldChzZWxmOjokdGF4cnVsZXNbJGtleV0pKQ0KCQl7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBzZXQgdGhlIHRheCBydWxlDQoJCQlzZWxmOjpzZXRUYXhSdWxlKCRkYiwgJGtleSwgJGxldmVsLCAkY291bnRyeSwgJHJlZ2lvbik7DQoJCX0NCgkJaWYgKGlzc2V0KHNlbGY6OiR0YXhydWxlc1ska2V5XSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHRheHJ1bGVzWyRrZXldKSkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OiR0YXhydWxlc1ska2V5XTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRUYXhSdWxlKCRkYiwgJGtleSwgJGxldmVsLCAkY291bnRyeSA9IDAsICRyZWdpb24gPSAwKQ0KCXsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoDQoJCQlhcnJheSgJJ2EuaWQnLCdhLnRheCcsJ2EubmFtZScpLA0KCQkJYXJyYXkoCSdpZCcsJ3RheCcsJ25hbWUnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV90YXhfcnVsZScsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnB1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5sZXZlbCcpIC4gJyA9ICcuIChpbnQpICRsZXZlbCk7DQoJCS8vIGNoZWNrIGZvciBjb3VudHJ5IGFuZCByZWdpb24NCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5jb3VudHJ5JykgLiAnID0gJy4gKGludCkgJGNvdW50cnkpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnJlZ2lvbicpIC4gJyA9ICcuIChpbnQpICRyZWdpb24pOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXNlbGY6OiR0YXhydWxlc1ska2V5XSA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCX0NCgkJZWxzZWlmICgoaW50KSRjb3VudHJ5ID4gMCAmJiAoaW50KSRyZWdpb24gPiAwKQ0KCQl7DQoJCQkvLyBub3cgb25seSBjaGVjayBmb3IgY291bnRyeQ0KCQkJcmV0dXJuIHNlbGY6OnNldFRheFJ1bGUoJGRiLCAka2V5LCAkbGV2ZWwsICRjb3VudHJ5KTsNCgkJfQ0KCQllbHNlaWYgKChpbnQpJGNvdW50cnkgPiAwICYmICRyZWdpb24gPT0gMCkNCgkJew0KCQkJLy8gbm93IGNoZWNrIGZvciBhbnkgd2l0aG91dCBjb3VudHJ5DQoJCQlyZXR1cm4gc2VsZjo6c2V0VGF4UnVsZSgkZGIsICRrZXksICRsZXZlbCk7DQoJCX0NCgl9DQoNCgkvKioNCgkqIEBwYXJhbSBmbG9hdCAkYW1vdW50DQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiY3N1bSgkYXJyYXksICRzY2FsZSA9IDQpDQoJew0KCQkkcmVzID0gMC4wOw0KCQlmb3JlYWNoKCRhcnJheSBhcyAkdmFsKXsNCgkJCSRyZXMgPSBiY2FkZCgkcmVzLCAkdmFsLCAkc2NhbGUpOw0KCQl9DQoJCXJldHVybiAkcmVzOw0KCX0NCg0KCS8qKg0KCSogQHBhcmFtIGZsb2F0ICRhbW91bnQNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkZEN1cnJlbmN5KCRhbW91bnQpDQoJew0KCQlyZXR1cm4gc2VsZjo6bWFrZU1vbmV5KCRhbW91bnQpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJGN1cnJlbmN5RGV0YWlscyA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEN1cnJlbmN5RGV0YWlscygkY29kZXRocmVlID0gZmFsc2UpDQoJew0KCQkvLyBjaGVjayBpZiBjdXJyZW5jeSBjb2RldGhyZWUgaXMgc2V0DQoJCWlmICghJGNvZGV0aHJlZSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBtYWluIGN1cnJlbmN5DQoJCQkkY29kZXRocmVlID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpLT5nZXQoJ2N1cnJlbmN5JywgbnVsbCk7DQoJCX0NCgkJLy8gcmV0dXJuIGNhY2hlZCBkYXRhIGlmIHNldA0KCQlpZiAoJGNvZGV0aHJlZSAmJiAhaXNzZXQoc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXSkpDQoJCXsNCgkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoDQoJCQkJYXJyYXkoCSdhLmlkJywnYS5uYW1lJywnYS5jb2RldGhyZWUnLCdhLm51bWVyaWNjb2RlJywnYS5zeW1ib2wnLCdhLnRob3VzYW5kcycsJ2EuZGVjaW1hbHBsYWNlJywNCgkJCQkJJ2EuZGVjaW1hbHN5bWJvbCcsJ2EucG9zaXRpdmVzdHlsZScsJ2EubmVnYXRpdmVzdHlsZScpLA0KCQkJCWFycmF5KAknY3VycmVuY3lfaWQnLCdjdXJyZW5jeV9uYW1lJywnY3VycmVuY3lfY29kZXRocmVlJywnY3VycmVuY3lfbnVtZXJpY2NvZGUnLCdjdXJyZW5jeV9zeW1ib2wnLA0KCQkJCQknY3VycmVuY3lfdGhvdXNhbmRzJywnY3VycmVuY3lfZGVjaW1hbHBsYWNlJywnY3VycmVuY3lfZGVjaW1hbHN5bWJvbCcsJ2N1cnJlbmN5X3Bvc2l0aXZlc3R5bGUnLA0KCQkJCQknY3VycmVuY3lfbmVnYXRpdmVzdHlsZScpKSk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jdXJyZW5jeScsICdhJykpOw0KCQkJaWYgKGlzX251bWVyaWMoJGNvZGV0aHJlZSkpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcuIChpbnQpICRjb2RldGhyZWUpOw0KCQkJfQ0KCQkJZWxzZWlmIChzdHJsZW4oJGNvZGV0aHJlZSkgPT0gMykNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmNvZGV0aHJlZScpIC4gJyA9ICcuJGRiLT5xdW90ZSgkY29kZXRocmVlKSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5jb2RldGhyZWUnKSAuICcgPSAnLiRkYi0+cXVvdGUoJ05PTkUnKSk7DQoJCQl9DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQlzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRjb2RldGhyZWVdID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQl9DQoJCX0NCgkJLy8gbWFrZSBzdXJlIGl0IGhhcyBiZWVuIHNldA0KCQlpZiAoaXNzZXQoc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXSkpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRjb2RldGhyZWVdOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKglQdWJsaXNoIGFsbCByZWxhdGVkIGRhdGEgZnJvbSB0aGUgc3lzdGVtDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwdWJsaXNoUmVsYXRlZERhdGEoJiRwa3MsICR2YWx1ZSwgICR0eXBlKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJLy8gY2xlYXIgYWxsIHJlbGF0ZWQgZGF0YSB0byBqb2Jfb3JkZXJzDQoJCQljYXNlICdqb2Jfb3JkZXInOg0KCQkJCS8vIGdldCBuZWVkZWRfaXRlbSBpZHMgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGlzIGpvYiBvcmRlcg0KCQkJCSRpZHMgPSBzZWxmOjpnZXRWYXJzKCduZWVkZWRfaXRlbScsICRwa3MsICdqb2Jfb3JkZXInKTsNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGlkcykpDQoJCQkJew0KCQkJCQkvLyBnZXQgbW9kZWwNCgkJCQkJJG5lZWRlZEl0ZW0gPSBzZWxmOjpnZXRNb2RlbCgnbmVlZGVkX2l0ZW0nKTsNCgkJCQkJLy8gdXBkYXRlIHRoZSBzdGF0ZQ0KCQkJCQkkbmVlZGVkSXRlbS0+cHVibGlzaCgkaWRzLCAoaW50KSAkdmFsdWUpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQkJZGVmYXVsdDoNCgkJCQkvLyBkbyBub3RoaW5nDQoJCQlicmVhazsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqCURlbGV0ZSBhbGwgcmVsYXRlZCBkYXRhIGZyb20gdGhlIHN5c3RlbQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVsZXRlUmVsYXRlZERhdGEoJHBrcywgJHR5cGUpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQkvLyBjbGVhciBhbGwgcmVsYXRlZCBkYXRhIHRvIGpvYl9vcmRlcnMNCgkJCWNhc2UgJ2pvYl9vcmRlcic6DQoJCQkJLy8gZ2V0IG5lZWRlZF9pdGVtIGlkcyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoaXMgam9iIG9yZGVyDQoJCQkJJGlkcyA9IHNlbGY6OmdldFZhcnMoJ25lZWRlZF9pdGVtJywgJHBrcywgJ2pvYl9vcmRlcicpOw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSkNCgkJCQl7DQoJCQkJCS8vIGdldCBtb2RlbA0KCQkJCQkkbmVlZGVkSXRlbSA9IHNlbGY6OmdldE1vZGVsKCduZWVkZWRfaXRlbScpOw0KCQkJCQkvLyBmaXJzdCBtb3ZlIHRvIHRyYXNoDQoJCQkJCSRuZWVkZWRJdGVtLT5wdWJsaXNoKCRpZHMsICctMicpOw0KCQkJCQkvLyB0aGVuIGRlbGV0ZSB0aGUgbmVlZGVkX2l0ZW1zDQoJCQkJCSRuZWVkZWRJdGVtLT5kZWxldGUoJGlkcyk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCQlkZWZhdWx0Og0KCQkJCS8vIGRvIG5vdGhpbmcNCgkJCWJyZWFrOw0KCQl9DQoJfQ0KDQoJLyoqDQoJKiBHZXQgQ1NWIEhlYWRlcnMNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZUhlYWRlcnNDU1YoJHBhdGgpDQoJew0KCQkvLyBzZXQgdGhlIGhlYWRlcnMNCgkJaWYoKCRoYW5kbGUgPSBmb3BlbigkcGF0aCwgJ3InKSkgIT09IGZhbHNlKQ0KCQl7DQoJCQkkcmVzdWx0ID0gZmdldGNzdigkaGFuZGxlKTsNCgkJCWZjbG9zZSgkaGFuZGxlKTsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0KSkNCgkJCXsNCgkJCQkka2V5ID0gJ0EnOw0KCQkJCWZvcmVhY2ggKCRyZXN1bHQgYXMgJGhlYWRlcikNCgkJCQl7DQoJCQkJCSRoZWFkZXJzWyRrZXldID0gJGhlYWRlcjsNCgkJCQkJJGtleSsrOw0KCQkJCX0NCgkJCQlyZXR1cm4gJGhlYWRlcnM7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQpbQ1VTVE9NQ09ERT1nZXRDb21wYW55RGV0YWlsc10NCltDVVNUT01DT0RFPW1ha2VNb25leV0NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVd', '', '', '', '', '', '', 'Ly8gbG9hZCB0aGUgaGVscGVyIGNsYXNzDQpKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KLy8gY2hlY2sgdGhlIHZlcnNpb24gb2YgSkNCDQokbWFuaWZlc3QgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6Om1hbmlmZXN0KCk7DQppZiAoaXNzZXQoJG1hbmlmZXN0LT52ZXJzaW9uKSAmJiBzdHJwb3MoJG1hbmlmZXN0LT52ZXJzaW9uLCAnLicpICE9PSBmYWxzZSkNCnsNCgkvLyBnZXQgdGhlIHZlcnNpb24NCgkkdGhpcy0+SkNCdmVyc2lvbiA9IGV4cGxvZGUoJy4nLCAkbWFuaWZlc3QtPnZlcnNpb24pOw0KCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoNCgkvLyB0YXJnZXQgdmVyc2lvbiBsZXNzIHRoZW4gb3IgZXF1YWwgdG8gMS4yLjQNCglpZiAoY291bnQoJHRoaXMtPkpDQnZlcnNpb24pID09IDMgJiYgJHRoaXMtPkpDQnZlcnNpb25bMF0gPT0gMSAmJiAoJHRoaXMtPkpDQnZlcnNpb25bMV0gPCAyIHx8ICgkdGhpcy0+SkNCdmVyc2lvblsxXSA9PSAyICYmICR0aGlzLT5KQ0J2ZXJzaW9uWzJdIDw9IDQpKSkNCgl7DQoJCSRmaXhfY2F0ZWdvcmllcyA9IGFycmF5KA0KCQkJJ2NvbV9qb2J0cmFja2luZy5pdGVtcycgPT4gJ2NvbV9qb2J0cmFja2luZy5pdGVtJw0KCQkpOw0KCQkvLyB0YXJnZXRlZCB0YWJsZXMgKHRvIGZpeCBhbGwgcGxhY2VzIGNhdGVnb3JpZXMgYXJlIG1hcHBlZCBpbnRvIEpvb21sYSkNCgkJJGZpeF90YWJsZXMgPSBhcnJheSgNCgkJCSdjb250ZW50X3R5cGVzJyA9PiBhcnJheSgNCgkJCQknaWQnID0+ICd0eXBlX2lkJywNCgkJCQkna2V5JyA9PiAndHlwZV9hbGlhcycsDQoJCQkJJ3N1ZmZpeCcgPT4gJy5jYXRlZ29yeScpLA0KCQkJJ2NvbnRlbnRpdGVtX3RhZ19tYXAnID0+IGFycmF5KA0KCQkJCSdpZCcgPT4gJ3R5cGVfaWQnLA0KCQkJCSdrZXknID0+ICd0eXBlX2FsaWFzJywNCgkJCQknc3VmZml4JyA9PiAnLmNhdGVnb3J5JyksDQoJCQkndWNtX2NvbnRlbnQnID0+IGFycmF5KA0KCQkJCSdpZCcgPT4gJ2NvcmVfY29udGVudF9pZCcsDQoJCQkJJ2tleScgPT4gJ2NvcmVfdHlwZV9hbGlhcycsDQoJCQkJJ3N1ZmZpeCcgPT4gJy5jYXRlZ29yeScpLA0KCQkJJ2NhdGVnb3JpZXMnID0+IGFycmF5KA0KCQkJCSdpZCcgPT4gJ2lkJywNCgkJCQkna2V5JyA9PiAnZXh0ZW5zaW9uJywNCgkJCQknc3VmZml4JyA9PiAnJykNCgkJKTsNCg0KCQkvLyB0aGUgc2NyaXB0IHRoYXQgZG9lcyB0aGUgd29yaw0KCQlmb3JlYWNoICgkZml4X2NhdGVnb3JpZXMgYXMgJGZpeCA9PiAkY2F0ZWdvcnkpDQoJCXsNCgkJCS8vIGxvb3Agb3ZlciB0aGUgdGFyZ2V0ZWQgdGFibGVzDQoJCQlmb3JlYWNoICgkZml4X3RhYmxlcyBhcyAkX3RhYmxlID0+ICRfdXBkYXRlKQ0KCQkJew0KCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCQkvLyBnZXQgYWxsIHR5cGVfaWRzDQoJCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJF91cGRhdGVbJ2lkJ10pKTsNCgkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfXycgLiAkX3RhYmxlKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSggJGRiLT5xdW90ZU5hbWUoJF91cGRhdGVbJ2tleSddKSAuICcgPSAnIC4gJGRiLT5xdW90ZSgkZml4IC4gJF91cGRhdGVbJ3N1ZmZpeCddKSk7DQoJCQkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQkJew0KDQoJCQkJCS8vIGFsbCB0aGVzZSBtdXN0IGJlIHVwZGF0ZWQNCgkJCQkJJGlkcyA9ICRkYi0+bG9hZENvbHVtbigpOw0KCQkJCQkvLyBGaWVsZHMgdG8gdXBkYXRlLg0KCQkJCQkkZmllbGRzID0gYXJyYXkoDQoJCQkJCQkkZGItPnF1b3RlTmFtZSgkX3VwZGF0ZVsna2V5J10pIC4gJyA9ICcgLiAkZGItPnF1b3RlKCRjYXRlZ29yeSAuICRfdXBkYXRlWydzdWZmaXgnXSkNCgkJCQkJKTsNCgkJCQkJLy8gQ29uZGl0aW9ucyBmb3Igd2hpY2ggcmVjb3JkcyBzaG91bGQgYmUgdXBkYXRlZC4NCgkJCQkJJGNvbmRpdGlvbnMgPSBhcnJheSgNCgkJCQkJCSRkYi0+cXVvdGVOYW1lKCRfdXBkYXRlWydpZCddKSAuICcgSU4gKCcgLiBpbXBsb2RlKCcsICcsICRpZHMpIC4gJyknDQoJCQkJCSk7DQoJCQkJCSRxdWVyeS0+dXBkYXRlKCRkYi0+cXVvdGVOYW1lKCcjX18nIC4gJF90YWJsZSkpLT5zZXQoJGZpZWxkcyktPndoZXJlKCRjb25kaXRpb25zKTsNCgkJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCQkkcmVzdWx0ID0gJGRiLT5leGVjdXRlKCk7DQoJCQkJCS8vIG9uIHN1Y2Nlc3MNCgkJCQkJaWYgKCRyZXN1bHQpDQoJCQkJCXsNCgkJCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCI8cD5VcGRhdGVkIDxiPiNfXyRfdGFibGUgLSAiIC4gJF91cGRhdGVbJ2tleSddIC4gIjwvYj4gZnJvbSA8Yj4kZml4PC9iPiIgLiAkX3VwZGF0ZVsnc3VmZml4J10gLiAiIHRvIDxiPiRjYXRlZ29yeTwvYj4iIC4gJF91cGRhdGVbJ3N1ZmZpeCddIC4gIiE8L3A+IiwgJ05vdGljZScpOw0KCQkJCQl9DQoNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Job Tracking System', '', '', 'Job Tracking System (public)', '.git', '', '', 1, 'https://www.vdm.io/updates/jobtracking_update_server.xml', 'http://www.vdm.io', '', 'CJpVqCNFjGXI6kAZq2SeW2o81dbCpl/nKa1qKI95sxc=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 276, '', 1, 65), +(21, 1, '', '', '', 1, '', '', 1, 1, '', 1, 1, 1, '', '', '', '', '', '', 1, '', 1, '', '', '', '{}', 3, '', 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.9', 'Copyright (C) 2015. All Rights Reserved', '2016-04-12 06:15:10', 1, 'W+rX/bAf3YBY7mg27LxP1c1hUSTt/X3nrC92YrQ6N4w=', 'V2dMVofpOp4cynARFJWeWoTjXJoU80WVQIYa+tr/HbU=', '', '6ICvaCumsJ9IXoiqJ535qHF8Qt/CQwBRb54bQEdV1JA=', '', '', '', 1, '', 'Event registration component.', 'joomla@vdm.io', '', '', 'Mp77p5kOVAltncyTBfVIrsdXLV5sQWDqmsQFJ3O9Dq4=', '', 'e9b1b779-cb04-453c-b606-31c3e12e92c9', 'images/event_registry.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 3, '', '2021-03-08 03:12:03', 1, 'Registry', 'registry', '', 4, 'CQkvLyBydW4gc29tZSBob3VzZSBjbGVhbmluZw0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQkvLyBydW4gdGhlIGxvY2F0aW9uIGRhdGEgcXVldWUgKHRvIGluc3VyZSBhbGwgY3JvbiBqb2JzIHJ1biB0aW1lbHkpDQoJCQlpZiAoJGRvY3VtZW50IGluc3RhbmNlb2YgSkRvY3VtZW50SHRtbCkNCgkJCXsNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OnRoZVF1ZXVlKCRkb2N1bWVudCk7DQoJCQl9DQoJCX0NCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw0KCQkvLyBjbGVhciB0aGUgY2FydCBpdGVtcyBpZiBleHBpcmVkDQoJCXNlbGY6OmNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KTs=', 'CS8qKg0KCSogCW1ha2Ugc3VyZSBsb2NhdGlvbiBkYXRhIGlzIGxvYWRlZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZExvY2F0aW9uRGF0YSgpDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygnTG9jYXRpb25kYXRhSGVscGVyJywgRkFMU0UpKQ0KCQl7DQoJCQkkcGF0aCA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX2xvY2F0aW9uZGF0YS9oZWxwZXJzL2xvY2F0aW9uZGF0YS5waHAnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJCXsNCgkJCQkvLyBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgaGVscGVyDQoJCQkJSkxvYWRlcjo6cmVnaXN0ZXIoJ0xvY2F0aW9uZGF0YUhlbHBlcicsICRwYXRoKTsNCgkJCQkvLyBmaXN0IHNldCB0aGUgZGVmYXVsdCBjb21wb25lbnQNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OiRkZWZhdWx0Q29tcG9uZW50ID0gJ2NvbV9bW1tjb21wb25lbnRdXV0nOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogCWNhbmNlbCBFeHBpcmVkIENhcnQgSXRlbXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KQ0KCXsNCgkJLy8gYWRkIGFuIGV2ZW50IHRoYXQgd2lsbCBzZW5kIG91dCBhbGwgY29uZmlybWF0aW9uIGVtYWlscywgbm90IHlldCBzZW5kDQoJCSRkb2N1bWVudC0+YWRkU2NyaXB0RGVjbGFyYXRpb24oIg0KCQkJalF1ZXJ5KHdpbmRvdykubG9hZChmdW5jdGlvbigpIHsNCgkJCQljYW5jZWxFeHBpcmVkQ2FydEl0ZW1zKDEpLmRvbmUoZnVuY3Rpb24ocmVzdWx0KSB7DQoJCQkJCWlmKHJlc3VsdCl7DQoJCQkJCQljb25zb2xlLmxvZyhyZXN1bHQpOw0KCQkJCQl9DQoJCQkJfSk7DQoJCQl9KTsNCgkJCQ0KCQkJZnVuY3Rpb24gY2FuY2VsRXhwaXJlZENhcnRJdGVtcyh0eXBlKSB7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJhZG1pbmlzdHJhdG9yL2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguY2FuY2VsRXhwaXJlZENhcnRJdGVtcyZmb3JtYXQ9anNvbic7DQoJCQkJaWYodHlwZSA+IDApew0KCQkJCQl2YXIgcmVxdWVzdCA9ICd0b2tlbj0iLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4iJnR5cGU9Jyt0eXBlOw0KCQkJCX0NCgkJCQlyZXR1cm4galF1ZXJ5LmFqYXgoew0KCQkJCQl0eXBlOiAnUE9TVCcsDQoJCQkJCXVybDogZ2V0VXJsLA0KCQkJCQlkYXRhVHlwZTogJ2pzb25wJywNCgkJCQkJZGF0YTogcmVxdWVzdCwNCgkJCQkJanNvbnA6ICdjYWxsYmFjaycNCgkJCQl9KTsNCgkJCX0iKTsNCgl9', 'CXB1YmxpYyBzdGF0aWMgJGV2ZW50Ow0KCXB1YmxpYyBzdGF0aWMgJGV2ZW50QnVpbGRlciA9IGFycmF5KCk7DQoJcHVibGljIHN0YXRpYyAkY29uY2VwdEhUTUwgPSBhcnJheSgpOw0KCXB1YmxpYyBzdGF0aWMgJGV2ZW50T3B0aW9ucyA9IGFycmF5KCk7DQoJcHVibGljIHN0YXRpYyAkbG9jYXRpb25zID0gYXJyYXkoKTsNCglwdWJsaWMgc3RhdGljICRmaWx0ZXJJbnB1dDsNCglwdWJsaWMgc3RhdGljICRvcmdhbml6ZXIgPSBudWxsOw0KCXB1YmxpYyBzdGF0aWMgJHJlZ2lzdGVyZWQgPSBudWxsOw0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkZGlzYWJsZUJ1dHRvbnMgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJGRpc2FibGVCdXR0b25zQ2hlY2sgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJGNvbmNlcHRTd2l0Y2hPbmx5ID0gYXJyYXkoKTsNCglwcm90ZWN0ZWQgc3RhdGljICRidW5kbGVTd2l0Y2hPbmx5ID0gYXJyYXkoKTsNCglwcm90ZWN0ZWQgc3RhdGljICRjb25jZXB0cyA9IGFycmF5KCk7DQoJcHJvdGVjdGVkIHN0YXRpYyAkY29uY2VwdERhdGEgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJGNvbnRlbnREYXRhID0gYXJyYXkoKTsNCglwcm90ZWN0ZWQgc3RhdGljICRidXR0b25TY3JpcHQgPSBhcnJheSgnICcpOw0KCXByb3RlY3RlZCBzdGF0aWMgJHJldHVyblR5cGU7DQoJcHJvdGVjdGVkIHN0YXRpYyAkZmlsZXBhdGggPSAnJzsNCglwcm90ZWN0ZWQgc3RhdGljICRmaWxlbGluayA9ICcnOw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCglwcm90ZWN0ZWQgc3RhdGljICR1c2VyOw0KCXByb3RlY3RlZCBzdGF0aWMgJGxvY2tlcjsNCglwcm90ZWN0ZWQgc3RhdGljICRiYXNpY2tleTsNCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPWdldEl0ZW1EYXRhXQ0KCS8qKg0KCSogCXNldCB0aGUgc2Vzc2lvbiBkZWZhdWx0cyBpZiBub3Qgc2V0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRTZXNzaW9uRGVmYXVsdHMoKQ0KCXsNCgkJLy8gZ2V0IHVzZXIgb2JqZWN0DQoJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQkvLyBmaXJzdCBjaGVjayBpZiBhbnkgd2FzIGFscmVhZHkgc2V0DQoJCWlmICghJGN1cnJlbmN5ID0gc2VsZjo6Z2V0KCdBQ1RJVkVfQ1VSUkVOQ1knLCBudWxsKSkNCgkJew0KCQkJaWYgKCR1c2VyLT5pZCA+IDApDQoJCQl7DQoJCQkJLy8gc2V0IHRoZSBhY3RpdmUgdXNlcnMgY3VycmVuY3kNCgkJCQlzZWxmOjpzZXQoJ0FDVElWRV9DVVJSRU5DWScsIHNlbGY6OmdldFVzZXJDdXJyZW5jeSgkdXNlcikpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHNldCBwdWJsaWMgY3VycmVuY3kNCgkJCQlzZWxmOjpzZXQoJ0FDVElWRV9DVVJSRU5DWScsIHNlbGY6OmdldFB1YmxpY0N1cnJlbmN5KCkpOw0KCQkJfQ0KCQl9DQoJCS8vIHNldCBwdWJsaWMga2V5IGlmIG5lZWRlZA0KCQlpZiAoICR1c2VyLT5pZCA9PSAwKQ0KCQl7DQoJCQlpZiAoISRwdWJsaWMgPSBzZWxmOjpnZXQoJ3B1YmxpY0tlZVknLCBudWxsKSkNCgkJCXsNCgkJCQkvLyBzZXQgdGhlIGFjdGl2ZSB1c2VycyBwdWJsaWMNCgkJCQlzZWxmOjpzZXQoJ3B1YmxpY0tlZVknLCBzZWxmOjpyYW5kb21rZXkoNykpOw0KCQkJfQ0KCQl9DQoJfQ0KW0NVU1RPTUNPREU9dXNlcklzVGhyZWUrYWRtaW51c2VyLG9yZ2FuaXplcnVzZXIscmVnaXN0ZXJlZHVzZXIsb3JnYW5pemVyLHJlZ2lzdGVyZWRfdXNlcl0NCgkvKioNCgkqIAl0aGUgcHVibGljIGN1cnJlbmN5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXNlcnNDdXJyZW5jeSA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAlnZXQgdGhlIHVzZXIgY3VycmVuY3kNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVzZXJDdXJyZW5jeSgkdXNlcklkID0gbnVsbCkNCgl7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkdXNlcklkKSAmJiAkdXNlcklkIGluc3RhbmNlb2YgSlVzZXIpDQoJCXsNCgkJCSR1c2VyID0gJHVzZXJJZDsNCgkJfQ0KCQllbHNlaWYgKGlzX251bWVyaWMoJHVzZXJJZCkgJiYgJHVzZXJJZCA+IDApDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQl9DQoJCS8vIG9ubHkgc2V0IGFnYWluIGlmIG5vdCBmb3VuZA0KCQlpZiAoIWlzc2V0KHNlbGY6OiR1c2Vyc0N1cnJlbmN5WyR1c2VyLT5pZF0pKQ0KCQl7DQoJCQkkYXJyYXkgPSAoYXJyYXkpIHNlbGY6OnVzZXJJcygkdXNlciwgdHJ1ZSk7DQoJCQkvLyBzZXQgaW4gcmVsYXRpb24NCgkJCXN3aXRjaCgkYXJyYXlbJ2lzJ10pDQoJCQl7DQoJCQkJLy8gYWRtaW4gdXNlIGdsb2JhbA0KCQkJCWNhc2UgMzogDQoJCQkJc2VsZjo6JHVzZXJzQ3VycmVuY3lbJHVzZXItPmlkXSA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdjdXJyZW5jeScsICdVU0QnKTsNCgkJCQlicmVhazsNCgkJCQkvLyBvcmdhbml6ZXIgY3VycmVuY3kNCgkJCQljYXNlIDI6DQoJCQkJc2VsZjo6JHVzZXJzQ3VycmVuY3lbJHVzZXItPmlkXSA9IHNlbGY6OmdldFZhcignb3JnYW5pemVyJywgJGFycmF5WydpZCddLCAnaWQnLCAgJ2N1cnJlbmN5Jyk7DQoJCQkJYnJlYWs7DQoJCQkJLy8gcmVnaXN0ZXJlZCB1c2VyIGN1cnJlbmN5DQoJCQkJY2FzZSAxOg0KCQkJCXNlbGY6OiR1c2Vyc0N1cnJlbmN5WyR1c2VyLT5pZF0gPSBzZWxmOjpnZXRSZWdVc2VyVmFsdWUoJGFycmF5WydpZCddLCAnY3VycmVuY3lfY29kZXRocmVlJywgc2VsZjo6Z2V0UHVibGljQ3VycmVuY3koKSk7DQoJCQkJYnJlYWs7DQoJCQkJLy8gYWxsIG90aGVyIGdldHMgdGhlIHB1YmxpYw0KCQkJCWRlZmF1bHQ6DQoJCQkJcmV0dXJuIHNlbGY6OmdldFB1YmxpY0N1cnJlbmN5KCk7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiR1c2Vyc0N1cnJlbmN5WyR1c2VyLT5pZF07DQoJfQ0KDQoJLyoqDQoJKiAJdGhlIGV2ZW50IGN1cnJlbmN5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkZXZlbnRDdXJyZW5jeSA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAlnZXQgdGhlIHVzZXIgY3VycmVuY3kNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50Q3VycmVuY3koJGlkID0gbnVsbCkNCgl7DQoJCWlmIChpc19udW1lcmljKCRpZCkgJiYgJGlkID4gMCkNCgkJew0KCQkJJGV2ZW50ID0gKGludCkgJGlkOw0KCQl9DQoJCWVsc2VpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5pZCkgJiYgc2VsZjo6JGV2ZW50LT5pZCA+IDApDQoJCXsNCgkJCSRldmVudCA9IChpbnQpIHNlbGY6OiRldmVudC0+aWQ7DQoJCX0NCgkJZWxzZWlmICghJGlkICYmIGlzc2V0KHNlbGY6OiRldmVudC0+b3JnYW5pemVyKSAmJiBzZWxmOjokZXZlbnQtPm9yZ2FuaXplciA+IDApDQoJCXsNCgkJCWlmICgkY3VycmVuY3kgPSBzZWxmOjpnZXRWYXIoJ29yZ2FuaXplcicsIHNlbGY6OiRldmVudC0+b3JnYW5pemVyLCAnaWQnLCAnY3VycmVuY3knKSkNCgkJCXsNCgkJCQlyZXR1cm4gJGN1cnJlbmN5Ow0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gcmV0dXJuIGRlZmF1bHQgY3VycmVuY3kgb2YgdGhlIGN1cnJlbnQgdXNlcg0KCQkJcmV0dXJuIHNlbGY6OmdldFVzZXJDdXJyZW5jeSgpOw0KCQl9DQoJCS8vIGNoZWNrIGlmIGFscmVhZHkgc2V0DQoJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50Q3VycmVuY3lbJGV2ZW50XSkpDQoJCXsNCgkJCS8vIGdldCBldmVudCBvcmdhbml6ZXINCgkJCWlmICghJGlkICYmIGlzc2V0KHNlbGY6OiRldmVudC0+b3JnYW5pemVyKSAmJiBzZWxmOjokZXZlbnQtPm9yZ2FuaXplciA+IDApDQoJCQl7DQoJCQkJaWYgKCRjdXJyZW5jeSA9IHNlbGY6OmdldFZhcignb3JnYW5pemVyJywgc2VsZjo6JGV2ZW50LT5vcmdhbml6ZXIsICdpZCcsICdjdXJyZW5jeScpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50Q3VycmVuY3lbJGV2ZW50XSA9ICRjdXJyZW5jeTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKCRvcmdJZCA9IHNlbGY6OmdldFZhcignZXZlbnQnLCAkZXZlbnQsICdpZCcsICdvcmdhbml6ZXInKSkNCgkJCXsNCgkJCQlpZiAoJGN1cnJlbmN5ID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnSWQsICdpZCcsICdjdXJyZW5jeScpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50Q3VycmVuY3lbJGV2ZW50XSA9ICRjdXJyZW5jeTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gcmV0dXJuIGlmIGZvdW5kDQoJCWlmIChpc3NldChzZWxmOjokZXZlbnRDdXJyZW5jeVskZXZlbnRdKSkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OiRldmVudEN1cnJlbmN5WyRldmVudF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KDQoJLyoqDQoJKiAJdGhlIHB1YmxpYyBjdXJyZW5jeQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHB1YmxpY0N1cnJlbmN5ID0gJ3NldCc7DQoNCgkvKioNCgkqIAlzZXQgdGhlIHB1YmxpYy9kZWZhdWx0IGN1cnJlbmN5DQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQdWJsaWNDdXJyZW5jeSgpDQoJew0KCQlpZiAoJ3NldCcgPT09IHNlbGY6OiRwdWJsaWNDdXJyZW5jeSkNCgkJew0KCQkJLy8gZ2V0IHRoaXMgbG9jYXRpb24gZGF0YQ0KCQkJJGxvY2F0aW9uRGF0YSA9IHNlbGY6OmdldExvY2F0aW9uZGF0YSgpOw0KCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBsb2NhdGlvbiBkYXRhDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGxvY2F0aW9uRGF0YSkgJiYgaXNzZXQoJGxvY2F0aW9uRGF0YVsnQ1VSUkVOQ1lfQ09ERV9USFJFRSddKSkNCgkJCXsNCgkJCQlzZWxmOjokcHVibGljQ3VycmVuY3kgPSAkbG9jYXRpb25EYXRhWydDVVJSRU5DWV9DT0RFX1RIUkVFJ107DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJc2VsZjo6JHB1YmxpY0N1cnJlbmN5ID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2N1cnJlbmN5JywgJ1VTRCcpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBzZWxmOjokcHVibGljQ3VycmVuY3k7DQoJfQ0KDQoJLyoqDQoJKiAJVGhlIG93bmVyDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkb3duZXIgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJYXJyYXkgdG8gY2hlY2sgdXNlcg0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGNoZWNrVXNlciA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAl3YW50cyB0byBlZGl0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdmlld0FjY2VzczsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzQWNjZXNzKCRyZWNvcmRJZCwgJHVzZXJJZCA9IG51bGwsICR0byA9ICdldmVudCcsICR2aWV3QWNjZXNzID0gZmFsc2UpDQoJew0KCQkvLyBzZXQgaWYgdmlldyBhY2Nlc3MgaXMgYWxsIHRoYXQgaXMgcmVxdWlyZWQgDQoJCXNlbGY6OiR2aWV3QWNjZXNzID0gJHZpZXdBY2Nlc3M7DQoJCWlmKCEkdXNlcklkKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdXNlcikpDQoJCQl7DQoJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCXNlbGY6OiR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQkJfQ0KCQkJJHVzZXJJZCA9IHNlbGY6OiR1c2VyLT5pZDsNCgkJfQ0KCQkkYXJyYXkgPSAoYXJyYXkpIHNlbGY6OnVzZXJJcygkdXNlcklkLCB0cnVlKTsNCgkJaWYgKGlzc2V0KCRhcnJheVsnaXMnXSkgJiYgJGFycmF5WydpcyddICYmICRyZWNvcmRJZCA+IDApDQoJCXsNCgkJCXN3aXRjaCgkdG8pDQoJCQl7DQoJCQkJY2FzZSAnZXZlbnQnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzRXZlbnQoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAndmVudWUnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzVmVudWUoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ29yZ2FuaXplcic6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NPcmdhbml6ZXIoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2ludm9pY2UnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzSW52b2ljZSgkYXJyYXlbJ2lzJ10sICRyZWNvcmRJZCwgJGFycmF5WydpZCddLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdwYXltZW50X21ldGhvZCc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NQYXltZW50TWV0aG9kKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkYXJyYXlbJ2lkJ10sICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3RheF9ydWxlJzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc1RheFJ1bGUoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAnbWVzc2FnZXNfYnVpbGRlcic6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NNZXNzYWdlc0J1aWxkZXIoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAnY29uY2VwdCc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NDb25jZXB0KCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdjb250ZW50JzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc0NvbnRlbnQoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2J1bmRsZSc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NCdW5kbGUoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0V2ZW50KCR0eXBlLCAkcmVjb3JkSWQsICRvcmdJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdldmVudCcsICRyZWNvcmRJZCwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID09ICRvcmdJZCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokdmlld0FjY2VzcykNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgnZXZlbnQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmV2ZW50LicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NWZW51ZSgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ3ZlbnVlJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsndmVudWUnLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ3ZlbnVlJywgJHJlY29yZElkLCAnaWQnLCAnY3JlYXRlZF9ieScpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ3ZlbnVlJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ3ZlbnVlLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS52ZW51ZS4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzT3JnYW5pemVyKCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnb3JnYW5pemVyJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnb3JnYW5pemVyJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkcmVjb3JkSWQsICdpZCcsICdjcmVhdGVkX2J5Jyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnb3JnYW5pemVyJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ29yZ2FuaXplci5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0ub3JnYW5pemVyLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NJbnZvaWNlKCR0eXBlLCAkcmVjb3JkSWQsICRsb2NhbElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIGV2ZW50IG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2ludm9pY2UnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydpbnZvaWNlJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdpbnZvaWNlJywgJHJlY29yZElkLCAnaWQnLCAnb3JnYW5pemVyJyk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCQlkZWZhdWx0OiAvLyBzZXQgdGhlIGRlZmF1bHQgdG8NCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQlicmVhazsNCgkJfQ0KCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQlpZiAoc2VsZjo6JG93bmVyWydpbnZvaWNlJy4kcmVjb3JkSWRdID09ICRsb2NhbElkKQ0KCQl7DQoJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCXsNCgkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdpbnZvaWNlLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5pbnZvaWNlLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NQYXltZW50TWV0aG9kKCR0eXBlLCAkcmVjb3JkSWQsICRsb2NhbElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ3BheW1lbnRfbWV0aG9kJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsncGF5bWVudF9tZXRob2QnLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ3BheW1lbnRfbWV0aG9kJywgJHJlY29yZElkLCAnaWQnLCAnb3JnYW5pemVyJyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsncGF5bWVudF9tZXRob2QnLiRyZWNvcmRJZF0gPT0gJGxvY2FsSWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ3BheW1lbnRfbWV0aG9kLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5wYXltZW50X21ldGhvZC4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzVGF4UnVsZSgkdHlwZSwgJHJlY29yZElkLCAkbG9jYWxJRCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCd0YXhfcnVsZScsICRyZWNvcmRJZCwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID09ICRsb2NhbElEKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdwYXltZW50X21ldGhvZC5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0ucGF5bWVudF9tZXRob2QuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc01lc3NhZ2VzQnVpbGRlcigkdHlwZSwgJHJlY29yZElkLCAkbG9jYWxJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ21lc3NhZ2VzX2J1aWxkZXInLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ21lc3NhZ2VzX2J1aWxkZXInLCAkcmVjb3JkSWQsICdpZCcsICdvcmdhbml6ZXInKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydtZXNzYWdlc19idWlsZGVyJy4kcmVjb3JkSWRdID09ICRsb2NhbElkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdtZXNzYWdlc19idWlsZGVyLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5tZXNzYWdlc19idWlsZGVyLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NDb25jZXB0KCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnZXZlbnQnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydjb25jZXB0Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdjb25jZXB0JywgJHJlY29yZElkLCAnaWQnLCAnY3JlYXRlZF9ieScpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2NvbmNlcHQnLiRyZWNvcmRJZF0gPT0gJHVzZXJJZCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokdmlld0FjY2VzcykNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgnY29uY2VwdC5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0uY29uY2VwdC4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzQ29udGVudCgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnY29uY2VwdCcuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignY29uY2VwdCcsICRyZWNvcmRJZCwgJ2lkJywgJ2NyZWF0ZWRfYnknKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydjb25jZXB0Jy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ2NvbmNlcHQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmNvbmNlcHQuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgkJcmV0dXJuIHNlbGY6OiR1c2VyLT5hdXRob3Jpc2UoJ2NvbnRlbnQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmNvbnRlbnQuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzQnVuZGxlKCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnYnVuZGxlJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnYnVuZGxlJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdidW5kbGUnLCAkcmVjb3JkSWQsICdpZCcsICdjcmVhdGVkX2J5Jyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnYnVuZGxlJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ2J1bmRsZS5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0uYnVuZGxlLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNJdGVtcygkdGFibGUsICR1c2VySWQgPSBudWxsKQ0KCXsNCgkJaWYoJHVzZXJJZCA+IDApDQoJCXsNCgkJCSRhcnJheSA9IChhcnJheSkgc2VsZjo6dXNlcklzKCR1c2VySWQsIHRydWUpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGFycmF5ID0gKGFycmF5KSBzZWxmOjp1c2VySXMoRmFjdG9yeTo6Z2V0VXNlcigpLT5pZCwgdHJ1ZSk7DQoJCX0NCgkJLy8gcmV0dXJuIGluIHJlbGF0aW9uDQoJCXN3aXRjaCgkYXJyYXlbJ2lzJ10pDQoJCXsNCgkJCS8vIHJlZ2lzdGVyZWQgKG9ubHkgbG9hZCBpdGVtcyB0aGF0IGJlbG9uZyB0byB0aGUgcmVnaXN0ZXJlZCB1c2VyKQ0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuIHNlbGY6OmdldFZhcnMoJHRhYmxlLCAkYXJyYXlbJ2lkJ10sICdyZWdpc3RlcmVkX3VzZXInKTsNCgkJCWJyZWFrOw0KCQkJLy8gb3JnYW5pemVyIChvbmx5IGxvYWQgaXRlbXMgdGhhdCBiZWxvbmcgdG8gdGhlIG9yZ2FuaXplcikNCgkJCWNhc2UgMjoNCgkJCXJldHVybiBzZWxmOjpnZXRWYXJzKCR0YWJsZSwgJGFycmF5WydpZCddLCAnb3JnYW5pemVyJyk7DQoJCQlicmVhazsNCgkJCS8vIGFkbWluIGNhbiBhY2Nlc3MgYWxsDQoJCQljYXNlIDM6IA0KCQkJcmV0dXJuIC0xOw0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJExvY2F0aW9uZGF0YUhlbHBlciA9IGZhbHNlOyANCg0KCS8qKg0KCSogCUxvYWQgdGhlIGRhdGEgZm9yIElQIGFuZCBDdXJyZW5jeSANCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExvY2F0aW9uZGF0YSgkaXAgPSBudWxsLCAkcHJvdG9jb2wgPSBudWxsLCAka2V5ID0gbnVsbCwgJGJhc2UgPSAnVVNEJywgJG1vZGUgPSAwLCAkc3RyaW5nID0gMCwgJHZhbHVlID0gMS4wMCkNCgl7CQkNCgkJaWYgKHNlbGY6OmxvYWRMb2NhdGlvbkRhdGEoKSkNCgkJew0KCQkJcmV0dXJuIExvY2F0aW9uZGF0YUhlbHBlcjo6Z2V0TG9jYXRpb25kYXRhKCRpcCwgJHByb3RvY29sLCAka2V5LCAkYmFzZSwgJG1vZGUsICRzdHJpbmcsICR2YWx1ZSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIHJldHVybnMgRXhjaGFuZ2VSYXRlcw0KCSAqDQoJICogQHJldHVybiBzdHJpbmcNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV4Y2hhbmdlUmF0ZSgkZnJvbSwgJGZyb21WYWx1ZSwgJHRvID0gJ1VTRCcpDQoJew0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQlyZXR1cm4gTG9jYXRpb25kYXRhSGVscGVyOjpnZXRFeGNoYW5nZVJhdGUoJGZyb20sICRmcm9tVmFsdWUsICR0byk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkZGF0YQ0KCSAqIEBwYXJhbSAkdHlwZQ0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50KCRldmVudCwgJHR5cGUpDQoJew0KCQkvLyBpZiBvbmx5IGlkIGdpdmVuIGdldCB0aGUgb2JqZWN0DQoJCWlmIChpc19udW1lcmljKCRldmVudCkgJiYgJGV2ZW50ID4gMCApDQoJCXsNCgkJCSRldmVudCA9IHNlbGY6OmdldEFsbFZhbHVlcygkZXZlbnQsICdldmVudCcsIGFycmF5KCdldmVudF9kb2N1bWVudHMnLCdiYW5uZXJfaW1hZ2UnLCdwb3N0ZXJfaW1hZ2UnLCd0ZWFzZXJfaW1hZ2UnLCdldmVudF9pbWFnZXMnKSk7DQoJCX0NCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgZXZlbnQgb2JqZWN0LCBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVlZGVkIGRhdGENCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRldmVudCkpDQoJCXsNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBuZWVkZWQgZGF0ZXMNCgkJCWlmIChpc3NldCgkZXZlbnQtPmRhdGUpICYmICduZWUnICE9ICRldmVudC0+ZGF0ZSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZXZlbnQtPmRhdGUpKQ0KCQkJew0KCQkJCSRldmVudC0+ZGF0ZSA9IGpzb25fZGVjb2RlKCRldmVudC0+ZGF0ZSwgdHJ1ZSk7DQoJCQl9DQoJCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVlZGVkIGNvc3QNCgkJCWlmIChpc3NldCgkZXZlbnQtPmNvc3QpICYmICduZWUnICE9ICRldmVudC0+Y29zdCAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZXZlbnQtPmNvc3QpKQ0KCQkJew0KCQkJCSRldmVudC0+Y29zdCA9IGpzb25fZGVjb2RlKCRldmVudC0+Y29zdCwgdHJ1ZSk7DQoJCQl9DQoJCQkvLyBtYWtlIHN1cmUgaW1wb3J0YW50IGRhdGEgd2FzIHNldA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudC0+Y29zdCkgfHwgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGV2ZW50LT5kYXRlKSkNCgkJCXsNCgkJCQkvLyBzZXQgYWRqdXN0bWVudHMNCgkJCQlpZiAoaXNzZXQoJGV2ZW50LT5hZGp1c3RtZW50KSAmJiAnbmVlJyAhPSAkZXZlbnQtPmFkanVzdG1lbnQgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGV2ZW50LT5hZGp1c3RtZW50KSkNCgkJCQl7DQoJCQkJCSRldmVudC0+YWRqdXN0bWVudCA9IGpzb25fZGVjb2RlKCRldmVudC0+YWRqdXN0bWVudCwgdHJ1ZSk7DQoJCQkJfQ0KCQkJCS8vIHNldCBsaW1pdCBwZXIgZ3JvdXANCgkJCQlpZiAoaXNzZXQoJGV2ZW50LT5saW1pdHBlcmdyb3VwKSAmJiAnbmVlJyAhPSAkZXZlbnQtPmxpbWl0cGVyZ3JvdXAgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGV2ZW50LT5saW1pdHBlcmdyb3VwKSkNCgkJCQl7DQoJCQkJCSRldmVudC0+bGltaXRwZXJncm91cCA9IGpzb25fZGVjb2RlKCRldmVudC0+bGltaXRwZXJncm91cCwgdHJ1ZSk7DQoJCQkJfQ0KCQkJCS8vIGZpbmFsIGNoZWNrDQoJCQkJaWYgKAlpc3NldCgkZXZlbnQtPnR5cGUpICYmIGlzX251bWVyaWMoJGV2ZW50LT50eXBlKSAmJg0KCQkJCQlpc3NldCgkZXZlbnQtPmlkKSAmJiBpc19udW1lcmljKCRldmVudC0+aWQpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50ID0gJGV2ZW50Ow0KCQkJCQkvLyBkYXRlIG9yIGp1c3QgY29zdA0KCQkJCQlyZXR1cm4gc2VsZjo6ZXZlbnRCdWlsZGVyKCR0eXBlKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkcmV0dXJuVHlwZQ0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV2ZW50QnVpbGRlcigkcmV0dXJuVHlwZSkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fIyMjY29tcG9uZW50IyMjJyk7DQoJCX0NCgkJLy8gc2V0IHRoZSByZXR1cm4gdHlwZQ0KCQlzZWxmOjokcmV0dXJuVHlwZSA9ICRyZXR1cm5UeXBlOw0KCQkvLyBzZXR1cCBhIGZpbHRlcklucHV0DQoJCXNlbGY6OiRmaWx0ZXJJbnB1dCA9IG5ldyBKRmlsdGVySW5wdXQoKTsNCgkJLy8gc2V0IHRoZSBmaWxlIHBhdGgNCgkJc2VsZjo6JGZpbGVwYXRoID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0UGF0aCgpOw0KCQkvLyBub3cgYWRkIHRoZSB1cmwgcGF0aCB0byBzaG93IHRoZSBpbWFnZQ0KCQlzZWxmOjokZmlsZWxpbmsgPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRQYXRoKCd1cmwnKTsNCgkJLy8gR2V0IHRoZSBiYXNpYyBlbmNyeXB0aW9uLg0KCQlzZWxmOjokYmFzaWNrZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnYmFzaWMnKTsNCgkJLy8gR2V0IHRoZSBlbmNyeXB0aW9uIG9iamVjdC4NCgkJc2VsZjo6JGxvY2tlciA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKHNlbGY6OiRiYXNpY2tleSwgMTI4KTsNCgkJLy8gcmVzZXQgZ2xvYmFsDQoJCSR0aW1lU2V0ID0gZmFsc2U7DQoJCS8vIGxvYWQgY29uY2VwdCBwZXIgZGF0ZQ0KCQlpZiAoc2VsZjo6c2V0RGF0ZXMoKSkNCgkJew0KCQkJJHRpbWVTZXQgPSB0cnVlOw0KCQl9DQoJCS8vIGxvYWQgY29uY2VwdCBwZXIgY29zdA0KCQllbHNlaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkpDQoJCXsNCgkJCXNlbGY6OiRjb25jZXB0cyA9IGFycmF5X3VuaXF1ZShhcnJheV9maWx0ZXIoc2VsZjo6JGV2ZW50LT5jb3N0Wydjb25jZXB0J10pKTsNCgkJfQ0KCQkvLyBjaGVjayBidW5kbGVyDQoJCXNlbGY6OnNldEJ1bmRsZXIoKTsNCgkJaWYgKGlzc2V0KHNlbGY6OiRjb25jZXB0cykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGNvbmNlcHRzKSkNCgkJew0KCQkJLy8gYnVpbGQgY29uY2VwdHMNCgkJCWZvcmVhY2ggKHNlbGY6OiRjb25jZXB0cyBhcyAkZXZlbnRfY29uY2VwdF90aW1lID0+ICRjb25jZXB0KQ0KCQkJew0KCQkJCWlmICghJHRpbWVTZXQpDQoJCQkJew0KCQkJCQkkZXZlbnRfY29uY2VwdF90aW1lID0gc2VsZjo6JGV2ZW50LT5pZC4nXycuJGNvbmNlcHQuJ19fMCc7DQoJCQkJfQ0KCQkJCS8vIGJ1aWxkIGNvbmNlcHQgZGl2DQoJCQkJc2VsZjo6JGNvbmNlcHRIVE1MWyRldmVudF9jb25jZXB0X3RpbWVdID0gc2VsZjo6YnVpbGRDb25jZXB0KCRjb25jZXB0LCRldmVudF9jb25jZXB0X3RpbWUpOw0KCQkJfQ0KDQoJCQkvLyBsb2FkIG9ycGhhbiBwcmljZSB2YXJpYXRpb25zDQoJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5jb3N0Wydjb25jZXB0J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSkNCgkJCXsNCgkJCQlzZWxmOjpsb2FkT3JwaGFuVmFyaWF0aW9ucygpOw0KCQkJfQ0KDQoJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdGhlIERpc3BsYXkgQ29udGVudA0KCQkJCSRjb250ZW50ID0gYXJyYXkoKTsNCgkJCQkkY29udGVudFtdID0gJzxkaXYgaWQ9InByZXZpZXciIGNsYXNzPSJ3aXJlLWJvcmRlciI+PGRpdiBjbGFzcz0idWstZ3JpZCI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstd2lkdGgtMS0xIj4nOw0KDQoJCQkJLy8gc2V0IHRoZSBFdmVudCBTdGFydCBhbmQgRW5kIERhdGUNCgkJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10pKQ0KCQkJCXsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJldmVudC1zdGFydC1lbmQiPicuc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10uJzwvZGl2Pic7DQoJCQkJfQ0KCQkJCS8vIHNldCBldmVudCBuYW1lDQoJCQkJaWYgKHNlbGY6OiRldmVudC0+aWQgPiAwKQ0KCQkJCXsNCgkJCQkJJGVkaXQgPSAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKSA/IHNlbGY6OmxvYWRFZGl0QnV0dG9uKCdldmVudCcsc2VsZjo6JGV2ZW50LT5pZCkgOiAnJzsNCgkJCQkJJGVkaXRDbGFzcyA9IChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZWRpdCkpID8gJyBjbGFzcz0idWstdmlzaWJsZS1ob3Zlci1pbmxpbmUiJyA6ICcnOw0KCQkJCQlzZWxmOjokZXZlbnQtPm5hbWUgPSBzZWxmOjpsb2FkTmFtZSgnZXZlbnQnLHNlbGY6OiRldmVudC0+aWQpOw0KCQkJCQkkY29udGVudFtdID0gJzxoMicuJGVkaXRDbGFzcy4nPicuIHNlbGY6OiRldmVudC0+bmFtZSAuICRlZGl0IC4nPC9oMj4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlzZWxmOjokZXZlbnQtPm5hbWUgPSBUZXh0OjpfKCdUaGUgRXZlbnQgTmFtZScpOw0KCQkJCQkkY29udGVudFtdID0gJzxoMj48c3BhbiBpZD0iZXZlbnROYW1lIj4nLiBzZWxmOjokZXZlbnQtPm5hbWUgLic8L3NwYW4+PC9oMj4nOw0KCQkJCX0NCgkJCQkvLyBub3cgbG9hZCB0aGUgYmFubmVyDQoJCQkJaWYgKCRiYW5uZXIgPSBzZWxmOjpnZXRFdmVudEltYWdlKCdiYW5uZXJfaW1hZ2UnLCAxLCBzZWxmOjokZXZlbnQtPm5hbWUsICd1ay10aHVtYm5haWwgdWstbWFyZ2luJykpDQoJCQkJew0KCQkJCQkkY29udGVudFtdID0gJGJhbm5lcjsNCgkJCQl9DQoJCQkJLy8gc2V0IGV2ZW50IGRldGFpbHMNCgkJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5kZXRhaWxzKSAmJiAgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5kZXRhaWxzKSkNCgkJCQl7DQoJCQkJCSRjb250ZW50W10gPSAnPHA+Jy5zZWxmOjokZmlsdGVySW5wdXQtPmNsZWFuKHNlbGY6OiRldmVudC0+ZGV0YWlscykuJzwvcD4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkY29udGVudFtdID0gJzxwPicuVGV4dDo6XygnVGhlIGV2ZW50IGRldGFpbHMgY29tZSBoZXJlJykuJywgbG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvci48L3A+JzsNCgkJCQl9DQoJCQkJLy8gbG9hZCB0aGUgY29uY2VwdHMNCgkJCQkkY29udGVudFtdID0gc2VsZjo6bG9hZENvbmNlcHRMYXlvdXQoKTsNCg0KCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nKQ0KCQkJCXsNCgkJCQkJLy8gYWRkIGR1bW15IGJ1eSBidXR0b24NCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIj48ZGl2IGNsYXNzPSJ1ay13aWR0aC0xLTEiPjxkaXYgY2xhc3M9InVrLXBhbmVsIj4nOw0KCQkJCQkkY29udGVudFtdID0gJzxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tbGFyZ2UgdWstd2lkdGgtMS0xIHVrLWJ1dHRvbi1zdWNjZXNzIiB0eXBlPSJidXR0b24iIG9uY2xpY2s9ImFsZXJ0KFwnQ2FydCBub3QgYWN0aXZlIGluIGFkbWluIGFyZWFcJyk7Ij4gJzsNCgkJCQkJJGNvbnRlbnRbXSA9IFRleHQ6Ol8oJ1RvdGFsJyk7DQoJCQkJCSRjb250ZW50W10gPSAnOiA8c3BhbiBpZD0idG90YWwiPjAuMDA8L3NwYW4+IC0gJzsNCgkJCQkJJGNvbnRlbnRbXSA9IFRleHQ6Ol8oJ0J1eSBOb3cnKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8L2J1dHRvbj4nOw0KCQkJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQkJCXsNCgkJCQkJLy8gdGhlIHJlYWwgc2hvcHBpbmcgY2FydCBidXR0b24NCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIj48ZGl2IGNsYXNzPSJ1ay13aWR0aC0xLTEiPjxkaXYgY2xhc3M9InVrLXBhbmVsIj4nOw0KCQkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9ImNhcnQtYWN0aXZlLWJ1dHRvbnMgdWstYnV0dG9uLWdyb3VwIHVrLXdpZHRoLTEtMSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4nOw0KCQkJCQkkY29udGVudFtdID0gJzxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLWxhcmdlIHVrLXdpZHRoLTEtNCB1ay1idXR0b24tcHJpbWFyeSIgaHJlZj0iI1ZETS12aWV3LWNhcnQtbm93IiBkYXRhLXVrLW1vZGFsPjxpIGNsYXNzPSJ1ay1pY29uLWV5ZSI+PC9pPiA8c3BhbiBjbGFzcz0idWstaGlkZGVuLXNtYWxsIj4nOw0KCQkJCQkkY29udGVudFtdID0gVGV4dDo6XygnVmlldyBDYXJ0Jyk7DQoJCQkJCSRjb250ZW50W10gPSAnPC9zcGFuPjwvYT4nOw0KCQkJCQkkY29udGVudFtdID0gJzxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLWxhcmdlIHVrLXdpZHRoLTMtNCB1ay1idXR0b24tc3VjY2VzcyIgaHJlZj0iJy4gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oW1tbQ29tcG9uZW50XV1dSGVscGVyUm91dGU6OmdldENoZWNrb3V0Um91dGUoKSkgLiciPjxzcGFuIGNsYXNzPSJWRE0tY2FydC10b3RhbCI+PC9zcGFuPiA8c3BhbiBjbGFzcz0idWstaGlkZGVuLXNtYWxsIj4nOw0KCQkJCQkkY29udGVudFtdID0gVGV4dDo6XygnQ2hlY2sgT3V0Jyk7DQoJCQkJCSRjb250ZW50W10gPSAnPC9zcGFuPiA8aSBjbGFzcz0idWstaWNvbi1zaG9wcGluZy1jYXJ0Ij48L2k+PC9hPjwvZGl2Pic7DQoJCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0iY2FydC1pbmFjdGl2ZS1idXR0b24iPic7DQoJCQkJCSRjb250ZW50W10gPSAnPGEgY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tbGFyZ2UgdWstd2lkdGgtMS0xIHVrLWJ1dHRvbi1wcmltYXJ5IiBocmVmPSIjVkRNLXZpZXctY2FydC1ub3ciIGRhdGEtdWstbW9kYWw+PGkgY2xhc3M9InVrLWljb24tZXllIj48L2k+IDxzcGFuIGNsYXNzPSJ1ay1oaWRkZW4tc21hbGwiPic7DQoJCQkJCSRjb250ZW50W10gPSBUZXh0OjpfKCdWaWV3IEVtcHR5IENhcnQnKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8L3NwYW4+PC9hPjwvZGl2Pic7DQoJCQkJCSRjb250ZW50W10gPSAnPC9kaXY+PC9kaXY+PC9kaXY+JzsNCgkJCQl9DQoNCgkJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoNCg0KCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nKQ0KCQkJCXsNCgkJCQkJLy8gYWRkIHNvbWUgc2NyaXB0Ow0KCQkJCQkkc2NyaXB0ID0gYXJyYXkoKTsNCgkJCQkJJHNjcmlwdFtdID0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIHRvdGFsID0ge307JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBhdmFpbGFibGUgPSB7fTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIHRha2VuID0ge307IHZhciB0aWNrZXRzID0ge307JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBjYXBhY2l0eSA9ICcuc2VsZjo6JGV2ZW50LT5jYXBhY2l0eS4nOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdqUXVlcnkoIiNldmVudE5hbWUiKS50ZXh0KGpRdWVyeSgiI2pmb3JtX25hbWUiKS52YWwoKSk7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2pRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oJCkgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdqUXVlcnkoIi5zZWxlY3QtYnV0dG9uIikuY2xpY2soZnVuY3Rpb24oKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBidXR0b24gPSB0aGlzLmlkLnNwbGl0KCItIik7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBjdXJyZW50VmFsdWUgPSBqUXVlcnkoIiMiK2J1dHRvblswXSsiLW51bWJlciIpLmRhdGEoInF0eSIpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAoYnV0dG9uWzFdID09ICJwbHVzIikgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd2YXIgbmV3VmFsdWUgPSAxICsgK2N1cnJlbnRWYWx1ZTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnaWYgKHRpY2tldHMuaGFzT3duUHJvcGVydHkoYnV0dG9uWzBdKSkgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd0YWtlbltidXR0b25bMF1dID0gbmV3VmFsdWU7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciB0b3RhbFRha2VuID0gc3VtKHRha2VuKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnaWYgKGNhcGFjaXR5ICE9IDAgJiYgdG90YWxUYWtlbiA+IGNhcGFjaXR5KSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ25ld1ZhbHVlID0gbmV3VmFsdWUgLSAxOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd0YWtlbltidXR0b25bMF1dID0gbmV3VmFsdWU7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ1VJa2l0Lm5vdGlmeSgiVGhlIEV2ZW50IElzIEZ1bGwuIiwge3N0YXR1czpcJ3dhcm5pbmdcJ30pOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9fSc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAoYXZhaWxhYmxlLmhhc093blByb3BlcnR5KGJ1dHRvblswXSkgJiYgYXZhaWxhYmxlW2J1dHRvblswXV0gIT0gMCAmJiBuZXdWYWx1ZSA9PSBhdmFpbGFibGVbYnV0dG9uWzBdXSkgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdVSWtpdC5ub3RpZnkoIlRoaXMgT3B0aW9uIGlzIEZ1bGwuIiwge3N0YXR1czpcJ3dhcm5pbmdcJ30pOyBqUXVlcnkoIiMiK2J1dHRvblswXSsiLXBsdXMiKS5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30gZWxzZSBpZiAoYnV0dG9uWzFdID09ICJtaW51cyIgJiYgY3VycmVudFZhbHVlICE9IDApIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIG5ld1ZhbHVlID0gK2N1cnJlbnRWYWx1ZSAtIDE7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3Rha2VuW2J1dHRvblswXV0gPSBuZXdWYWx1ZTsgalF1ZXJ5KCIjIitidXR0b25bMF0rIi1wbHVzIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnfSBlbHNlIGlmIChidXR0b25bMV0gPT0gInNlbGVjdCIpIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIHByZXNzZWQgPSBqUXVlcnkodGhpcykuZGF0YSgidWstYnV0dG9uIik7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2lmIChwcmVzc2VkID09IDEpIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIG5ld1ZhbHVlID0gMTsgalF1ZXJ5KHRoaXMpLmRhdGEoInVrLWJ1dHRvbiIsIDIpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9IGVsc2Ugeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd2YXIgbmV3VmFsdWUgPSAwOyBqUXVlcnkodGhpcykuZGF0YSgidWstYnV0dG9uIiwgMSk7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30nOw0KCQkJCQkkc2NyaXB0W10gPSAnfSBlbHNlIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIG5ld1ZhbHVlID0gMDsnOw0KCQkJCQkkc2NyaXB0W10gPSAnfSc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZihqUXVlcnkodGhpcykuZGF0YSgib25seSIpKSB7IG9ubHlTd2l0Y2godGhpcyxuZXdWYWx1ZSk7IH0nOw0KCQkJCQkkc2NyaXB0W10gPSAndG90YWxTZXR0ZXIodGhpcyxuZXdWYWx1ZSk7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2lmIChidXR0b25bMV0gPT0gIm1pbnVzIiB8fCBidXR0b25bMV0gPT0gInBsdXMiKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2pRdWVyeSgiIyIrYnV0dG9uWzBdKyItbnVtYmVyIikuZGF0YSgicXR5IiwgbmV3VmFsdWUpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAobmV3VmFsdWUgPT0gMCkgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICduZXdWYWx1ZUhUTUwgPSAwOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9IGVsc2Ugeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICduZXdWYWx1ZUhUTUwgPSBcJzxzcGFuIGNsYXNzPSJ1ay1iYWRnZSB1ay1iYWRnZS1ub3RpZmljYXRpb24gdWstYmFkZ2Utc3VjY2VzcyI+XCcrbmV3VmFsdWUrXCc8L3NwYW4+XCc7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30nOw0KCQkJCQkkc2NyaXB0W10gPSAnalF1ZXJ5KCIjIitidXR0b25bMF0rIi1udW1iZXIiKS5odG1sKG5ld1ZhbHVlSFRNTCk7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30nOw0KCQkJCQkkc2NyaXB0W10gPSAnfSk7fSk7JzsNCgkJCQkJJHNjcmlwdFtdID0gaW1wbG9kZSgnJyxzZWxmOjokYnV0dG9uU2NyaXB0KTsNCgkJCQkJJHNjcmlwdFtdID0gJzwvc2NyaXB0Pic7DQoJCQkJCS8vIGxvYWQgdGhlIGRpc3BsYXkNCgkJCQkJcmV0dXJuIGltcGxvZGUoJycsJGNvbnRlbnQpLmltcGxvZGUoJycsJHNjcmlwdCk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQkJCXsNCgkJCQkJLy8gYWRkIHNvbWUgc2NyaXB0Ow0KCQkJCQkkc2NyaXB0ID0gYXJyYXkoKTsNCgkJCQkJJHNjcmlwdFtdID0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIGF2YWlsYWJsZSA9IHt9Oyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd2YXIgdGFrZW4gPSB7fTsgdmFyIHRpY2tldHMgPSB7fTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIGNhcGFjaXR5ID0gJy5zZWxmOjokZXZlbnQtPmNhcGFjaXR5Lic7JzsNCgkJCQkJJHNjcmlwdFtdID0gaW1wbG9kZSgnJyxzZWxmOjokYnV0dG9uU2NyaXB0KTsNCgkJCQkJJHNjcmlwdFtdID0gJzwvc2NyaXB0Pic7DQoNCgkJCQkJLy8gbG9hZCB0aGUgZGlzcGxheQ0KCQkJCQkkY29udGVudCA9IGltcGxvZGUoJycsJGNvbnRlbnQpLmltcGxvZGUoJycsJHNjcmlwdCk7DQoNCgkJCQkJLy8gZ2V0IHRoZSBkb2N1bWVudHMgZm9yIGRvd25sb2Fkcw0KCQkJCQlpZiAoJGRvd25sb2FkcyA9IHNlbGY6OmdldEV2ZW50RG93bmxvYWRzKCkpDQoJCQkJCXsNCgkJCQkJCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkZG93bmxvYWRzKSwgYXJyYXlfdmFsdWVzKCRkb3dubG9hZHMpLCAkY29udGVudCk7DQoJCQkJCQkvLyByZW1vdmUgbGlua3MNCgkJCQkJCWZvcmVhY2ggKCRkb3dubG9hZHMgYXMgJGtleSA9PiAkbGluaykNCgkJCQkJCXsNCgkJCQkJCQlpZiAoc3RycG9zKCRrZXksICdbRE9DTElOSz0nKSAhPT0gZmFsc2UpDQoJCQkJCQkJew0KCQkJCQkJCQl1bnNldCgkZG93bmxvYWRzWyRrZXldKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCQkvLyBzZXQgZXZlbnQgcG9zdGVyDQoJCQkJCSRwb3N0ZXIgPSBzZWxmOjpnZXRFdmVudEltYWdlKCdwb3N0ZXJfaW1hZ2UnKTsNCgkJCQkJLy8gc2V0IGV2ZW50IGltYWdlcw0KCQkJCQkkZXZlbnRJbWFnZXMgPSBzZWxmOjpnZXRFdmVudEltYWdlKCdldmVudF9pbWFnZXMnLCAyKTsNCgkJCQkJJGV2ZW50SW1hZ2VXaWR0aCA9IHNlbGY6OiRwYXJhbXMtPmdldCgnZXZlbnRfd2lkdGgnLCA4MDApOw0KCQkJCQkkZXZlbnRJbWFnZUhlaWdodCA9ICBzZWxmOjokcGFyYW1zLT5nZXQoJ2V2ZW50X2hlaWdodCcsIDYwMCk7DQoJCQkJCQ0KCQkJCQkvLyBub3cgc2V0IHRoZSBzZWxlY3Rpb24gb25seSBzd2l0Y2hlcyAgKCgkYnVuZGxlICE9IDAgJiYgJGJ1bmRsZSA9PSAkb3RoZXJCdW5kbGUpIHx8ICgkYnVuZGxlID09ICRvdGhlckJ1bmRsZSAmJiAkY29uY2VwdCA9PSAkb3RoZXJDb25jZXB0KSkgPC0tLSB0aGUgSmF2YVNjcmlwdCBsb2dpYw0KCQkJCQlmb3JlYWNoIChzZWxmOjokZGlzYWJsZUJ1dHRvbnNDaGVjayBhcyAkYnV0dG9uSWQgPT4gJGF0KQ0KCQkJCQl7DQoJCQkJCQlpZiAoaXNzZXQoc2VsZjo6JGNvbmNlcHRTd2l0Y2hPbmx5WyRhdFsnY29uY2VwdCddXSkpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoc2VsZjo6JGNvbmNlcHRTd2l0Y2hPbmx5WyRhdFsnY29uY2VwdCddXSBhcyAkbnIgPT4gJGJ1Y2tldCkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICgoKGludCkgJGF0WydidW5kbGUnXSA+IDAgJiYgKGludCkgJGF0WydidW5kbGUnXSA9PSAoaW50KSAkYnVja2V0WydidW5kbGUnXSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCXNlbGY6OiRkaXNhYmxlQnV0dG9uc1snIyMjJy4kYnV0dG9uSWQuJyMjIyddID0gJ2Rpc2FibGVkJzsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlmIChpc3NldChzZWxmOjokYnVuZGxlU3dpdGNoT25seVskYXRbJ2J1bmRsZSddXSkpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoc2VsZjo6JGJ1bmRsZVN3aXRjaE9ubHlbJGF0WydidW5kbGUnXV0gYXMgJG5yID0+ICRidWNrZXQpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoKGludCkgJGF0WydidW5kbGUnXSA+IDAgfHwgKGludCkgJGF0Wydjb25jZXB0J10gPT0gKGludCkgJGJ1Y2tldFsnY29uY2VwdCddKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlzZWxmOjokZGlzYWJsZUJ1dHRvbnNbJyMjIycuJGJ1dHRvbklkLicjIyMnXSA9ICdkaXNhYmxlZCc7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJLy8gdXBkYXRlIHRoZSBkaXNhYmxlZCBidXR0b25zDQoJCQkJCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cyhzZWxmOjokZGlzYWJsZUJ1dHRvbnMpLCBhcnJheV92YWx1ZXMoc2VsZjo6JGRpc2FibGVCdXR0b25zKSwgJGNvbnRlbnQpOw0KDQoJCQkJCS8vIG5vdyBsZXRzIGFkZCB0aGUgcG9zdGVyIGV2ZW50IGltYWdlcyBhbmQgdGhlIGRvd25sb2FkIGJ1dHRvbnMgaWYgZm91bmQNCgkJCQkJJHRhYnMgPSBmYWxzZTsNCgkJCQkJaWYgKCRwb3N0ZXIgfHwgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRvd25sb2FkcykpDQoJCQkJCXsNCgkJCQkJCWlmICgkcG9zdGVyICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkb3dubG9hZHMpKQ0KCQkJCQkJew0KCQkJCQkJCWlmIChjb3VudCgkZG93bmxvYWRzKSA9PSAxKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRhYk5hbWUyID0gVGV4dDo6XygnUG9zdGVyICYgRG93bmxvYWQnKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRhYk5hbWUyID0gVGV4dDo6XygnUG9zdGVyICYgRG93bmxvYWRzJyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJZWxzZWlmICgkcG9zdGVyKQ0KCQkJCQkJew0KCQkJCQkJCSR0YWJOYW1lID0gVGV4dDo6XygnUG9zdGVyJyk7DQoJCQkJCQl9DQoJCQkJCQllbHNlaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkb3dubG9hZHMpKQ0KCQkJCQkJew0KCQkJCQkJCWlmIChjb3VudCgkZG93bmxvYWRzKSA9PSAxKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRhYk5hbWUyID0gVGV4dDo6XygnRG93bmxvYWQnKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRhYk5hbWUyID0gVGV4dDo6XygnRG93bmxvYWRzJyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJJHRhYnMgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZXZlbnRJbWFnZXMpKQ0KCQkJCQl7DQoJCQkJCQlpZiAoY291bnQoJGV2ZW50SW1hZ2VzKSA9PSAxKQ0KCQkJCQkJew0KCQkJCQkJCSR0YWJOYW1lMyA9IFRleHQ6Ol8oJ0V2ZW50IEltYWdlJyk7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJJHRhYk5hbWUzID0gVGV4dDo6XygnRXZlbnQgSW1hZ2VzJyk7DQoJCQkJCQl9DQoJCQkJCQkkdGFicyA9IHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gYnVpbGQgdGFicw0KCQkJCQlpZiAoJHRhYnMpDQoJCQkJCXsNCgkJCQkJCSR0YWJDb250cm9sSUQgPSBtZDUoc2VsZjo6JGV2ZW50LT5uYW1lLnNlbGY6OiRldmVudC0+aWQpOw0KCQkJCQkJJGJvZHkgPSBhcnJheSgpOw0KCQkJCQkJJGJvZHlbXSA9ICc8dWwgY2xhc3M9InVrLXN1Ym5hdiB1ay1zdWJuYXYtcGlsbCIgZGF0YS11ay1zd2l0Y2hlcj0ie2Nvbm5lY3Q6XCcjJy4kdGFiQ29udHJvbElELidcJ30iPic7DQoJCQkJCQkkYm9keVtdID0gJzxsaT48YSBocmVmPSIiPicuIFRleHQ6Ol8oJ1JlZ2lzdGVyJykgLic8L2E+PC9saT4nOw0KCQkJCQkJaWYgKGlzc2V0KCR0YWJOYW1lMikpDQoJCQkJCQl7DQoJCQkJCQkJJGJvZHlbXSA9ICc8bGk+PGEgaHJlZj0iIj4nLiAkdGFiTmFtZTIgLic8L2E+PC9saT4nOw0KCQkJCQkJfQ0KCQkJCQkJaWYgKGlzc2V0KCR0YWJOYW1lMykpDQoJCQkJCQl7DQoJCQkJCQkJJGJvZHlbXSA9ICc8bGk+PGEgaHJlZj0iIj4nLiAkdGFiTmFtZTMgLic8L2E+PC9saT4nOw0KCQkJCQkJfQ0KCQkJCQkJJGJvZHlbXSA9ICc8L3VsPic7DQoNCgkJCQkJCSRib2R5W10gPSAnPHVsIGlkPSInLiR0YWJDb250cm9sSUQuJyIgY2xhc3M9InVrLXN3aXRjaGVyIj4nOw0KCQkJCQkJJGJvZHlbXSA9ICc8bGk+JyAuICRjb250ZW50IC4gJzwvbGk+JzsNCgkJCQkJCWlmIChpc3NldCgkdGFiTmFtZTIpKQ0KCQkJCQkJew0KCQkJCQkJCSRib2R5W10gPSAnPGxpPic7DQoJCQkJCQkJaWYgKCRwb3N0ZXIgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRvd25sb2FkcykpDQoJCQkJCQkJew0KCQkJCQkJCQkkYm9keVtdID0gJzxkaXYgY2xhc3M9InVrLWdyaWQiPic7DQoJCQkJCQkJCSRib2R5W10gPSAnPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLTQtNSI+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1wYW5lbCI+JyAuICRwb3N0ZXIgLiAnPC9kaXY+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8L2Rpdj4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzxkaXYgY2xhc3M9InVrLXdpZHRoLW1lZGl1bS0xLTUiPic7DQoJCQkJCQkJCSRib2R5W10gPSAnPGRpdiBjbGFzcz0idWstcGFuZWwiPicgLiBpbXBsb2RlKCcnLCAkZG93bmxvYWRzKSAuICc8L2Rpdj4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzwvZGl2Pic7DQoJCQkJCQkJCSRib2R5W10gPSAnPC9kaXY+JzsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmICgkcG9zdGVyKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGJvZHlbXSA9ICRwb3N0ZXI7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRvd25sb2FkcykpDQoJCQkJCQkJew0KCQkJCQkJCQkkYm9keVtdID0gaW1wbG9kZSgnJywgJGRvd25sb2Fkcyk7DQoJCQkJCQkJfQ0KCQkJCQkJCSRib2R5W10gPSAnPC9saT4nOw0KCQkJCQkJfQ0KCQkJCQkJaWYgKGlzc2V0KCR0YWJOYW1lMykpDQoJCQkJCQl7DQoJCQkJCQkJJGJvZHlbXSA9ICc8bGk+JzsNCgkJCQkJCQkkYm9keVtdID0gJzxkaXYgY2xhc3M9InVrLWdyaWQgdWstZ3JpZC13aWR0aC1tZWRpdW0tMS00IiBkYXRhLXVrLWdyaWQtbWFyZ2luPic7DQoJCQkJCQkJZm9yZWFjaCAoJGV2ZW50SW1hZ2VzIGFzICR2YWwpDQoJCQkJCQkJew0KCQkJCQkJCQkkYm9keVtdID0gJzxkaXY+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8YSBocmVmPSInIC4gJHZhbFsndXJsJ10gLiAnIiBkYXRhLXVrLWxpZ2h0Ym94PSJ7Z3JvdXA6XCdncm91cC0nIC4gJHRhYkNvbnRyb2xJRCAuICdcJ30iIHRpdGxlPSInIC4gJHZhbFsnbmFtZSddIC4gJyI+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8aW1nIHNyYz0iJyAuICR2YWxbJ3VybCddIC4gJyIgYWx0PSIiIHdpZHRoPSInIC4gJGV2ZW50SW1hZ2VXaWR0aCAuICciIGhlaWdodD0iJyAuICRldmVudEltYWdlSGVpZ2h0IC4gJyI+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8L2E+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8L2Rpdj4nOw0KCQkJCQkJCX0NCgkJCQkJCQkkYm9keVtdID0gJzwvZGl2Pic7DQoJCQkJCQkJJGJvZHlbXSA9ICc8L2xpPic7DQoJCQkJCQl9DQoJCQkJCQkkYm9keVtdID0gJzwvdWw+JzsNCgkJCQkJCS8vIHJldHVybiBib2R5DQoJCQkJCQlyZXR1cm4gaW1wbG9kZSgnJywkYm9keSk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuICRjb250ZW50Ow0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ29wdGlvbnMnICYmICRvcHRpb25zID0gc2VsZjo6Z2V0RXZlbnRPcHRpb25zKCkpDQoJCQl7DQoJCQkJcmV0dXJuICRvcHRpb25zOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcmV0dXJuIHN0cmluZyBpbWFnZSBsaW5rDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRFdmVudEltYWdlKCR0YXJnZXQsICR0eXBlID0gMSwgJG5hbWUgPSBudWxsLCAkY2xhc3MgPSAndWstbWFyZ2luJykNCgl7DQoJCS8vIGdldCBpbWFnZSBpZiBub3QgYXZhaWxhYmxlDQoJCWlmICgoIWlzc2V0KHNlbGY6OiRldmVudC0+JHRhcmdldCkgfHwgIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+JHRhcmdldCkpICYmIHNlbGY6OiRldmVudC0+aWQgPiAwKQ0KCQl7DQoJCQlzZWxmOjokZXZlbnQtPiR0YXJnZXQgPSBzZWxmOjpkZWNyeXB0U3RyaW5nKHNlbGY6OmdldFZhcignZXZlbnQnLCBzZWxmOjokZXZlbnQtPmlkLCAnaWQnLCAkdGFyZ2V0KSk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCBpbWFnZSBpcyBqc29uDQoJCWlmICgkdHlwZSA9PSAyICYmIHNlbGY6OiRldmVudC0+JHRhcmdldCAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPiR0YXJnZXQpKQ0KCQl7DQoJCQkkc2V0RmlsZU5hbWUgPSBmYWxzZTsNCgkJCWlmICghJG5hbWUpDQoJCQl7DQoJCQkJJHNldEZpbGVOYW1lID0gdHJ1ZTsNCgkJCX0NCgkJCS8vIGJ1aWxkIGFuIGFycmF5IG9mIGltYWdlcw0KCQkJJHRtcCA9IGpzb25fZGVjb2RlKHNlbGY6OiRldmVudC0+JHRhcmdldCwgdHJ1ZSk7DQoJCQlpZiAoIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0bXApKQ0KCQkJew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCSRidWNrZXQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJHRtcCBhcyAkZmlsZU5hbWUpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdGhlIGFycmF5DQoJCQkJaWYgKHN0cnBvcygkZmlsZU5hbWUsICdfJykgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGV4dGVudGlvbiA9IGV4cGxvZGUoJ18nLCAkZmlsZU5hbWUpOw0KCQkJCQkkYWN0dWFsTmFtZSA9IHNlbGY6OiRldmVudC0+bmFtZTsNCgkJCQkJaWYgKCRzZXRGaWxlTmFtZSAmJiBzdHJwb3MoJGZpbGVOYW1lLCAnVkRNJykgIT09IGZhbHNlKQ0KCQkJCQl7DQoJCQkJCQkkZmlsZU5hbWVBcnJheSA9IGV4cGxvZGUoJ1ZETScsICRmaWxlTmFtZSk7DQoJCQkJCQlpZiAoaXNzZXQoJGZpbGVOYW1lQXJyYXlbMV0pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRmaWxlTmFtZUFycmF5WzFdKSkNCgkJCQkJCXsNCgkJCQkJCQkkYWN0dWFsTmFtZSA9ICRmaWxlTmFtZUFycmF5WzFdOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWlmIChpc3NldCgkZXh0ZW50aW9uWzJdKSkNCgkJCQkJew0KCQkJCQkJaWYgKCRzZXRGaWxlTmFtZSkNCgkJCQkJCXsNCgkJCQkJCQkkbmFtZSA9ICRhY3R1YWxOYW1lOw0KCQkJCQkJfQ0KCQkJCQkJLy8gc2V0IGJhc2ljIGJ1Y2tldCBkZXRhaWxzDQoJCQkJCQkkdG1wQnVja2V0ID0gYXJyYXkoKTsNCgkJCQkJCSR0bXBCdWNrZXRbJ2xpbmsnXSA9ICc8aW1nIGNsYXNzPSInLiRjbGFzcy4nIiBzcmM9Iicuc2VsZjo6JGZpbGVsaW5rLiRmaWxlTmFtZS4nLicuJGV4dGVudGlvblsyXS4nIiBhbHQ9IicuICRuYW1lIC4nIj4nOw0KCQkJCQkJJHRtcEJ1Y2tldFsndXJsJ10gPSBzZWxmOjokZmlsZWxpbmsuJGZpbGVOYW1lLicuJy4kZXh0ZW50aW9uWzJdOw0KCQkJCQkJJHRtcEJ1Y2tldFsnbmFtZSddID0gICRuYW1lOw0KCQkJCQkJLy8gYWRkIHRvIGJ1Y2tldA0KCQkJCQkJJGJ1Y2tldFtdID0gJHRtcEJ1Y2tldDsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVja2V0KSkNCgkJCXsNCgkJCQlyZXR1cm4gJGJ1Y2tldDsNCgkJCX0NCgkJfQ0KCQkvLyBjaGVjayB0aGF0IGltYWdlIGlzIG9ubHkgYSBzdHJpbmcNCgkJZWxzZWlmICgkdHlwZSA9PSAxICYmIGlzc2V0KHNlbGY6OiRldmVudC0+JHRhcmdldCkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT4kdGFyZ2V0KSkNCgkJew0KCQkJLy8gcmV0dXJuIG9uZSBpbWFnZSBsaW5rDQoJCQlpZiAoc3RycG9zKHNlbGY6OiRldmVudC0+JHRhcmdldCwgJ18nKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJJGV4dGVudGlvbiA9IGV4cGxvZGUoJ18nLCBzZWxmOjokZXZlbnQtPiR0YXJnZXQpOw0KCQkJCSRhY3R1YWxOYW1lID0gc2VsZjo6JGV2ZW50LT5uYW1lOw0KCQkJCWlmIChzdHJwb3Moc2VsZjo6JGV2ZW50LT4kdGFyZ2V0LCAnVkRNJykgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGZpbGVOYW1lQXJyYXkgPSBleHBsb2RlKCdWRE0nLCBzZWxmOjokZXZlbnQtPiR0YXJnZXQpOw0KCQkJCQlpZiAoaXNzZXQoJGZpbGVOYW1lQXJyYXlbMV0pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRmaWxlTmFtZUFycmF5WzFdKSkNCgkJCQkJew0KCQkJCQkJJGFjdHVhbE5hbWUgPSAkZmlsZU5hbWVBcnJheVsxXTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoaXNzZXQoJGV4dGVudGlvblsyXSkpDQoJCQkJew0KCQkJCQlpZiAoISRuYW1lKQ0KCQkJCQl7DQoJCQkJCQkkbmFtZSA9ICRhY3R1YWxOYW1lOw0KCQkJCQl9DQoJCQkJCXJldHVybiAnPGltZyBjbGFzcz0iJy4kY2xhc3MuJyIgc3JjPSInLnNlbGY6OiRmaWxlbGluay5zZWxmOjokZXZlbnQtPiR0YXJnZXQuJy4nLiRleHRlbnRpb25bMl0uJyIgYWx0PSInLiAkbmFtZSAuJyI+JzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEByZXR1cm4gYXJyYXkgb2YgbGlua3MNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50RG93bmxvYWRzKCkNCgl7DQoJCWlmIChpc3NldChzZWxmOjokZXZlbnQtPmV2ZW50X2RvY3VtZW50cykpDQoJCXsNCgkJCS8vIGZpcnN0IG1ha2Ugc3VyZSBpdCBpcyBKc29uIHZhbHVlcw0KCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+ZXZlbnRfZG9jdW1lbnRzKSkNCgkJCXsNCgkJCQlzZWxmOjokZXZlbnQtPmV2ZW50X2RvY3VtZW50cyA9IGpzb25fZGVjb2RlKHNlbGY6OiRldmVudC0+ZXZlbnRfZG9jdW1lbnRzLCB0cnVlKTsNCgkJCX0NCgkJCS8vIG5vdyBjaGVjayBpZiBpdCBpcyBhbiBhcnJheQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+ZXZlbnRfZG9jdW1lbnRzKSkNCgkJCXsNCgkJCQkkc2Vzc2lvblRva2VuID0gSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpOw0KCQkJCSRkb21haW4gPSBVcmk6OnJvb3QoKTsNCgkJCQkkZG93bmxvYWRzID0gYXJyYXkoKTsNCgkJCQlmb3JlYWNoIChzZWxmOjokZXZlbnQtPmV2ZW50X2RvY3VtZW50cyBhcyAkZmlsZU5hbWUpDQoJCQkJew0KCQkJCQkvLyBtYWtlIHN1cmUgdGhpcyBhIGNvcnJlY3QgZmlsZSBuYW1lDQoJCQkJCWlmIChzdHJwb3MoJGZpbGVOYW1lLCAnXycpICE9PSBmYWxzZSAmJiBzdHJwb3MoJGZpbGVOYW1lLCAnVkRNJykgIT09IGZhbHNlKQ0KCQkJCQl7DQoJCQkJCQkkZmlsZUFycmF5ID0gZXhwbG9kZSgnXycsICRmaWxlTmFtZSk7DQoJCQkJCQkkbmFtZUFycmF5ID0gZXhwbG9kZSgnVkRNJywgJGZpbGVOYW1lKTsNCgkJCQkJCS8vIG1vcmUgY2hlY2tzDQoJCQkJCQlpZiAoaXNzZXQoJG5hbWVBcnJheVsxXSkgJiYgaXNzZXQoJGZpbGVBcnJheVsyXSkpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKHNlbGY6OiRiYXNpY2tleSkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIEdldCB0aGUgZW5jcnlwdGlvbiBvYmplY3QuDQoJCQkJCQkJCSRsb2NhbEZpbGUgPSBzZWxmOjpiYXNlNjRfdXJsZW5jb2RlKHNlbGY6OiRsb2NrZXItPmVuY3J5cHRTdHJpbmcoJGZpbGVOYW1lKSk7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIGNhbiBub3QgZ2V0IHRoZSBlbmNyeXB0aW9uIG9iamVjdCBzbyBvbmx5IGJhc2U2NCBlbmNvZGUNCgkJCQkJCQkJJGxvY2FsRmlsZSA9IHNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGZpbGVOYW1lLCB0cnVlKTsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gYnVpbGQgbGluayANCgkJCQkJCQkkbGluayA9ICRkb21haW4gLiAnaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9ZG93bmxvYWQuZG9jdW1lbnQmZmlsZT0nIC4gJGxvY2FsRmlsZSAuICcmdG9rZW49JyAuICRzZXNzaW9uVG9rZW47DQoJCQkJCQkJLy8gYnVpbGQgdGhlIGZpbGUgbmFtZQ0KCQkJCQkJCSRmaWxlTmFtZSA9ICRuYW1lQXJyYXlbMV0gLiAnLicgLiAkZmlsZUFycmF5WzJdOw0KCQkJCQkJCSRkb3dubG9hZHNbJ1tET0NMSU5LPScuJGZpbGVOYW1lLiddJ10gPSAnPGEgaHJlZj0iJyAuICRsaW5rIC4gJyIgdHl0bGU9IiAnIC4gVGV4dDo6XygnRG93bmxvYWQnKSAuICciPicgLiAkZmlsZU5hbWUgLiAnPC9hPic7DQoJCQkJCQkJJGRvd25sb2Fkc1snW0RPQ0JVVFRPTj0nLiRmaWxlTmFtZS4nXSddID0gJzxhIGhyZWY9IicgLiAkbGluayAuICciIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXN1Y2Nlc3MgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTEiPjxpIGNsYXNzPSJ1ay1pY29uLWRvd25sb2FkIj48L2k+ICcgLiBUZXh0OjpfKCdEb3dubG9hZCcpIC4gJyAnIC4gJGZpbGVOYW1lIC4gJzwvYT4nOw0KCQkJCQkJfSANCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRvd25sb2FkcykpDQoJCQkJew0KCQkJCQlyZXR1cm4gJGRvd25sb2FkczsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkdGFibGUNCgkgKiBAcGFyYW0gJHZhbHVlDQoJICogQHJldHVybiBib29sfG1peGVkDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBsb2FkRWRpdEJ1dHRvbigkdGFibGUsICRpZCkNCgl7CQkNCgkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdXNlcikpDQoJCXsNCgkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCXNlbGY6OiR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQl9DQoJCS8vIG9ubHkgbG9hZCB0byBhZG1pbiBhbmQgb3JnYW5pemVyIHdobyBvd24gdGhpcyBpdGVtDQoJCWlmIChzZWxmOjpoYXNBY2Nlc3MoJGlkLCBzZWxmOjokdXNlci0+aWQsICR0YWJsZSkpDQoJCXsNCgkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nKQ0KCQkJew0KCQkJCSRyZWYgPSAoaXNzZXQoc2VsZjo6JGV2ZW50LT5pZCkgJiYgc2VsZjo6JGV2ZW50LT5pZCA+IDApID8gIiZyZWY9ZXZlbnQmcmVmaWQ9Ii5zZWxmOjokZXZlbnQtPmlkIDogJyc7DQoJCQkJJGVkaXQgPSAiaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnZpZXc9Ii4kdGFibGUuIiZ0YXNrPSIuJHRhYmxlLiIuZWRpdCZpZD0iLiRpZC4kcmVmOw0KCQkJCXJldHVybiAnIDxhIG9uY2xpY2s9IlVJa2l0Lm1vZGFsLmNvbmZpcm0oXCcnLlRleHQ6Ol8oJ0FsbCB1bnNhdmVkIHdvcmsgd2lsbCBiZSBsb3N0LCBhcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29udGludWU/JykuJ1wnLCBmdW5jdGlvbigpeyB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwnJy4kZWRpdC4nXCcgfSkiICBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGNsYXNzPSJ1ay1pY29uLXBlbmNpbCB1ay1oaWRkZW4iPjwvYT4nOw0KCQkJfQ0KCQkJZWxzZWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQl7DQoJCQkJJHJlZiA9IChpc3NldChzZWxmOjokZXZlbnQtPmlkKSAmJiBzZWxmOjokZXZlbnQtPmlkID4gMCkgPyAiJnJlZj1yZWdpc3RyeSZyZWZpZD0iLnNlbGY6OiRldmVudC0+aWQgOiAnJzsNCgkJCQkkZWRpdCA9ICJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdmlldz0iLiR0YWJsZS4iJnRhc2s9Ii4kdGFibGUuIi5lZGl0JmlkPSIuJGlkLiRyZWY7DQoJCQkJcmV0dXJuICcgPGEgaHJlZj0iJy4kZWRpdC4nIiBjbGFzcz0idWstaWNvbi1wZW5jaWwgdWstaGlkZGVuIj48L2E+JzsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICR0YWJsZQ0KCSAqIEBwYXJhbSAkdmFsdWUNCgkgKiBAcmV0dXJuIGJvb2x8bWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWROYW1lKCR0YWJsZSwkdmFsdWUpDQoJew0KCQlpZiAoJ2V2ZW50JyA9PT0gJHRhYmxlICYmIGlzc2V0KHNlbGY6OiRldmVudC0+bmFtZSkpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokZXZlbnQtPm5hbWU7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OmdldFZhcigkdGFibGUsKGludCkgJHZhbHVlLCdpZCcsJ25hbWUnKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWRPcnBoYW5WYXJpYXRpb25zKCkNCgl7DQoJCSRjb250ZW50ID0gYXJyYXkoKTsNCgkJLy8gaXNvbGF0ZSB0aGUgb3JwaGFuIHZhcmlhdGlvbnMNCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkpDQoJCXsNCgkJCSRhbm90aGVyQ29uY2VwdCA9IGFycmF5KCk7DQoJCQkkdmFyaWF0aW9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoIChzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSBhcyAka2V5ID0+ICRjb25jZXB0KQ0KCQkJew0KCQkJCWlmICghaW5fYXJyYXkoJGNvbmNlcHQsc2VsZjo6JGNvbmNlcHRzKSkNCgkJCQl7DQoJCQkJCWlmIChpc19udW1lcmljKCRjb25jZXB0KSkNCgkJCQkJew0KCQkJCQkJLy8gYW5vdGhlciBjb25jZXB0DQoJCQkJCQkkYW5vdGhlckNvbmNlcHRbJGNvbmNlcHRdID0gJGNvbmNlcHQ7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkvLyB0b3RhbCBvcnBoYW4NCgkJCQkJCSR2YXJpYXRpb25zW3NlbGY6OiRldmVudC0+Y29zdFsndmFyaWF0aW9uJ11bJGtleV1dID0gJGtleTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIGZpcnN0IGxvYWQgdGhlIG90aGVyIGNvbnNlcHRzICh0aGF0IGhhdmUgbm8gZGF0ZSAtIHRhcmdldCB3aG9sZSBldmVudCkNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYW5vdGhlckNvbmNlcHQpKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRhbm90aGVyQ29uY2VwdCBhcyAkY29uY2VwdCkNCgkJCQl7DQoJCQkJCS8vIGFub3RoZXIgY29uY2VwdA0KCQkJCQlzZWxmOjokY29uY2VwdEhUTUxbc2VsZjo6JGV2ZW50LT5pZC4nXycuJGNvbmNlcHQuJ19fMCddID0gc2VsZjo6YnVpbGRDb25jZXB0KCRjb25jZXB0LHNlbGY6OiRldmVudC0+aWQuJ18nLiRjb25jZXB0LidfXzAnKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBub3cgbG9hZCB0aGUgb3JwaGFuIHZhcmlhdGlvbnMgKHRoYXQgaGF2ZSBubyBkYXRlIG9yIGNvbmNlcHQgLSB0YXJnZXQgd2hvbGUgZXZlbnQpDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZhcmlhdGlvbnMpKQ0KCQkJew0KCQkJCSRwcmljZSA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHZhcmlhdGlvbnMgYXMgJHZhcmlhdGlvbiA9PiAka2V5KQ0KCQkJCXsNCgkJCQkJLy8gYW5vdGhlciB2YXJpYXRpb24gYnV0dG9uDQoJCQkJCWlmIChjb3VudCgkcHJpY2UpID4gMiAmJiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpKQ0KCQkJCQl7DQoJCQkJCQkkcHJpY2VbXSA9ICc8YnIgLz4nOw0KCQkJCQl9DQoJCQkJCWlmICgkYnV0dG9uID0gc2VsZjo6c2V0QnV5QnV0dG9ucygka2V5KSkNCgkJCQkJew0KCQkJCQkJJHByaWNlW10gPSAkYnV0dG9uOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJCQl7DQoJCQkJCSRjb250ZW50ID0gYXJyYXkoKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIj48ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMy01Ij48L2Rpdj48ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMi01Ij4nOw0KCQkJCQkkY29udGVudFtdID0gaW1wbG9kZSgnJywkcHJpY2UpOw0KCQkJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2Pic7DQoNCgkJCQkJLy8gcmV0dXJuIHRoZSBvcnBoYW4gc3R1ZmYgdG8gYSBiZWxvbmcgKFRPRE8gLSB0aGlzIGlzIG5vdCBpZGVhbCkNCgkJCQkJc2VsZjo6JGNvbmNlcHRIVE1MW3NlbGY6OiRldmVudC0+aWQuJ185OTk5OTk5OTlfXzAnXSA9IGltcGxvZGUoJycsJGNvbnRlbnQpOw0KCQkJCX0NCgkJCQllbHNlaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudE9wdGlvbnNbc2VsZjo6JGV2ZW50LT5pZC4nXzk5OTk5OTk5OV9fMCddID0gJHByaWNlOw0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50T3B0aW9uc1tzZWxmOjokZXZlbnQtPmlkLidfOTk5OTk5OTk5X18wJ10pKQ0KCQkJCQl7DQoJCQkJCQlmb3JlYWNoIChzZWxmOjokZXZlbnRPcHRpb25zW3NlbGY6OiRldmVudC0+aWQuJ185OTk5OTk5OTlfXzAnXSBhcyAkbnIgPT4gJiRjb3N0aW5nKQ0KCQkJCQkJew0KCQkJCQkJCSRjb3N0aW5nWyduYW1lJ10gPSBzZWxmOjpsb2FkTmFtZSgnZXZlbnQnLHNlbGY6OiRldmVudC0+aWQpIC4gJyAoJyAuJGNvc3RpbmdbJ25hbWUnXSAuJyknOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRjb25jZXB0cw0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBsb2FkQ29uY2VwdExheW91dCgpDQoJew0KCQkkY29udGVudCA9IGFycmF5KCk7DQoJCSRjb25jZXB0cyA9IHNlbGY6OmdldENvbmNlcHRzSFRNTCgpOw0KCQkvLyBjaGVjayBsYXlvdXQgb3B0aW9uDQoJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlciddKSB8fCAhU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlciddKSkNCgkJew0KCQkJLy8gbG9hZCBkZWZhdWx0IGxheW91dA0KCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGRhdGEtdWstZ3JpZC1tYXJnaW49IiIgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstbWFyZ2luLXNtYWxsIHVrLXBhbmVsLWhvdmVyIj4nOw0KCQkJJGNvbnRlbnRbXSA9IGltcGxvZGUoJzwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstbWFyZ2luLXNtYWxsIHVrLXBhbmVsLWhvdmVyIj4nLCRjb25jZXB0cyk7DQoJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoJCX0NCgkJZWxzZWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRCdWlsZGVyWydidW5kbGVyJ10pKQ0KCQl7DQoJCQkvLyBsb2FkIGluIGJ1bmRsZXMgbGF5b3V0DQoJCQlmb3JlYWNoIChzZWxmOjokZXZlbnRCdWlsZGVyWydidW5kbGVyJ10gYXMgJGJ1bmRsZSA9PiAkYXJyYXkpDQoJCQl7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGRhdGEtdWstZ3JpZC1tYXJnaW49IiIgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstbWFyZ2luLXNtYWxsIHVrLXBhbmVsLWhvdmVyIj4nOw0KCQkJCSRlZGl0ID0gc2VsZjo6bG9hZEVkaXRCdXR0b24oJ2J1bmRsZScsICRidW5kbGUpOw0KCQkJCSRlZGl0Q2xhc3MgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGVkaXQpKSA/ICcgdWstdmlzaWJsZS1ob3Zlci1pbmxpbmUnIDogJyc7DQoJCQkJJGNvbnRlbnRbXSA9ICc8aDMgY2xhc3M9InVrLXBhbmVsLXRpdGxlJy4kZWRpdENsYXNzLiciPicuIHNlbGY6OmxvYWROYW1lKCdidW5kbGUnLCRidW5kbGUpIC4gJGVkaXQgLic8L2gzPic7DQoJCQkJJGRldGFpbHMgPSBzZWxmOjpnZXRWYXIoJ2J1bmRsZScsKGludCkgJGJ1bmRsZSwnaWQnLCdkZXNjcmlwdGlvbicpOw0KCQkJCS8vIGxvYWQgYnVuZGxlIGRldGFpbHMNCgkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRldGFpbHMpKQ0KCQkJCXsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2PicuJGRldGFpbHMuJzwvZGl2Pic7DQoJCQkJfQ0KCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0id2lyZS1ib3JkZXIiPjxkaXYgY2xhc3M9InVrLWdyaWQiPic7DQoJCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGFycmF5IGFzICRldmVudF9jb25jZXB0X3RpbWUpDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJCQkJew0KCQkJCQkJJGJ1Y2tldFtdID0gJGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdOw0KCQkJCQkJdW5zZXQoJGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+Jy5pbXBsb2RlKCc8L2Rpdj48ZGl2IGNsYXNzPSJ1ay13aWR0aC0xLTEiPjxocj4nLCRidWNrZXQpLic8L2Rpdj4nOw0KCQkJCSRjb250ZW50W10gPSAnPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+JzsNCgkJCX0NCgkJCS8vIGNoZWNrIGlmIHRoZXJlIGlzIG1vcmUgY29uY2VwdHMgbGVmdA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb25jZXB0cykpDQoJCQl7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGRhdGEtdWstZ3JpZC1tYXJnaW49IiIgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstcGFuZWwtc3BhY2UiPic7DQoJCQkJJGNvbnRlbnRbXSA9IGltcGxvZGUoJzwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstcGFuZWwtc3BhY2UiPicsJGNvbmNlcHRzKTsNCgkJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGltcGxvZGUoJycsJGNvbnRlbnQpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QnVuZGxlcigpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5kYXRlWydidW5kbGUnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5kYXRlWydidW5kbGUnXSkpDQoJCXsNCgkJCSRidW5kbGVyID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKHNlbGY6OiRldmVudC0+ZGF0ZVsnYnVuZGxlJ10gYXMgJGtleSA9PiAkYnVuZGxlKQ0KCQkJew0KCQkJCSRjb25jZXB0ID0gc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J11bJGtleV07DQoJCQkJaWYgKGlzX251bWVyaWMoJGJ1bmRsZSkpDQoJCQkJew0KCQkJCQlpZiAoJGtleV90aW1lID0gc2VsZjo6Z2V0RXZlbnRDb25jZXB0VGltZSgka2V5KSkNCgkJCQkJew0KCQkJCQkJaWYgKCFpc3NldChzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ11bJGtleV90aW1lXVsnc3RhcnQnXSkpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsndGltZXN0YW1wcyddWyRrZXlfdGltZV1bJ3N0YXJ0J10gPSAwOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGtleV90aW1lID0gMDsNCgkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXVswXVsnc3RhcnQnXSA9IDA7DQoJCQkJCX0NCg0KCQkJCQkkYnVuZGxlcltdID0gYXJyYXkoJ2J1bmRsZScgPT4gKGludCkgJGJ1bmRsZSwgJ2NvbmNlcHQnID0+IChpbnQpICRjb25jZXB0LCAnc3RhcnQnID0+IChpbnQpIHNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXVska2V5X3RpbWVdWydzdGFydCddKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayBpZiBhbnkgYnVuZGxlcyBoYXMgYmVlbiBsb2FkZWQNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVuZGxlcikpDQoJCQl7DQoJCQkJLy8gc29ydCB0aGUgYnVuZGxlcw0KCQkJCXVzb3J0KCRidW5kbGVyLCBmdW5jdGlvbigkYSwgJGIpIHsNCgkJCQkJcmV0dXJuICRhWydzdGFydCddIC0gJGJbJ3N0YXJ0J107DQoJCQkJfSk7DQoJCQkJLy8gcGFjayB0aGUgYnVuZGxlcw0KCQkJCWZvcmVhY2ggKCRidW5kbGVyIGFzICRhcnJheSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2J1bmRsZXInXVskYXJyYXlbJ2J1bmRsZSddXVtzZWxmOjokZXZlbnQtPmlkLidfJy4kYXJyYXlbJ2NvbmNlcHQnXS4nX18nLiRhcnJheVsnc3RhcnQnXV0gPSBzZWxmOjokZXZlbnQtPmlkLidfJy4kYXJyYXlbJ2NvbmNlcHQnXS4nX18nLiRhcnJheVsnc3RhcnQnXTsNCgkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlJ11bc2VsZjo6JGV2ZW50LT5pZC4nXycuJGFycmF5Wydjb25jZXB0J10uJ19fJy4kYXJyYXlbJ3N0YXJ0J11dID0gJGFycmF5WydidW5kbGUnXTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGNvbmNlcHQNCgkgKiBAcGFyYW0gJGV2ZW50X2NvbmNlcHRfdGltZQ0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkQ29uY2VwdCgmJGNvbmNlcHQsICRldmVudF9jb25jZXB0X3RpbWUpDQoJew0KCQkkY29udGVudCA9IGFycmF5KCk7DQoJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJew0KCQkJaWYgKGlzc2V0KHNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJGV2ZW50X2NvbmNlcHRfdGltZV1bJ3N0YXJ0LWVuZCddKSkNCgkJCXsNCgkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9ImNvbmNlcHQtc3RhcnQtZW5kIj4nLnNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJGV2ZW50X2NvbmNlcHRfdGltZV1bJ3N0YXJ0LWVuZCddLic8L2Rpdj4nOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgdGhpcyBjb25jZXB0IGlzIGFscmVhZHkgbG9hZGVkDQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0pKQ0KCQkJew0KCQkJCXNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0gPSBzZWxmOjpnZXRBbGxWYWx1ZXMoJGNvbmNlcHQsICdjb25jZXB0JywgYXJyYXkoJ2NvbmNlcHRfaW1hZ2UnKSk7DQoJCQl9DQoJCQkvLyBvbmx5IGNvbnRpbnVlIGlmIHdlIGhhdmUgdmFsdWVzDQoJCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0pKQ0KCQkJew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCSRlZGl0ID0gc2VsZjo6bG9hZEVkaXRCdXR0b24oJ2NvbmNlcHQnLCRjb25jZXB0KTsNCgkJCSRlZGl0Q2xhc3MgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGVkaXQpKSA/ICcgdWstdmlzaWJsZS1ob3Zlci1pbmxpbmUnIDogJyc7DQoJCQkkY29udGVudFtdID0gJzxoMyBjbGFzcz0idWstcGFuZWwtdGl0bGUnLiRlZGl0Q2xhc3MuJyI+Jy5zZWxmOjokY29uY2VwdERhdGFbJGNvbmNlcHRdLT5uYW1lIC4gJGVkaXQgLic8L2gzPic7DQoJCQkvLyBhZGQgY29uY2VwdCBpbWFnZQ0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0tPmNvbmNlcHRfaW1hZ2UpICYmIHN0cnBvcyhzZWxmOjokY29uY2VwdERhdGFbJGNvbmNlcHRdLT5jb25jZXB0X2ltYWdlLCAnXycpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+Y29uY2VwdF9pbWFnZSk7DQoJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCXsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8aW1nIGNsYXNzPSJ1ay10aHVtYm5haWwiIHNyYz0iJy5zZWxmOjokZmlsZWxpbmsuc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+Y29uY2VwdF9pbWFnZS4nLicuJGV4dGVudGlvblsyXS4nIiBhbHQ9ImNvbmNlcHQgaW1hZ2UiPic7DQoJCQkJfQ0KCQkJfQ0KCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIj4nOw0KDQoJCQkvLyB3b3Jrb3V0IHdpZHRocw0KCQkJJGNvbmNlcHREZXRhaWxzID0gZmFsc2U7DQoJCQkkY29uY2VwdENvbnRlbnQgPSBmYWxzZTsNCgkJCSRjb25jZXB0Q29zdGluZyA9IGZhbHNlOw0KCQkJJHNldFNwYWNlciA9IGZhbHNlOw0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0tPmRldGFpbHMpKQ0KCQkJew0KCQkJCSRjb25jZXB0RGV0YWlscyA9IHRydWU7DQoJCQl9DQoJCQlpZiAoc2VsZjo6c2V0Q29uY2VwdENvbnRlbnQoJGV2ZW50X2NvbmNlcHRfdGltZSkpDQoJCQl7DQoJCQkJJGNvbmNlcHRDb250ZW50ID0gdHJ1ZTsNCgkJCX0NCgkJCWlmIChzZWxmOjpzZXRDb25jZXB0Q29zdGluZygkY29uY2VwdCwkZXZlbnRfY29uY2VwdF90aW1lKSkNCgkJCXsNCgkJCQkkY29uY2VwdENvc3RpbmcgPSB0cnVlOw0KCQkJfQ0KCQkJaWYgKCRjb25jZXB0RGV0YWlscyAmJiAkY29uY2VwdENvbnRlbnQgJiYgJGNvbmNlcHRDb3N0aW5nKQ0KCQkJew0KCQkJCS8vIHRocmVlIGlzIHRydWUNCgkJCQkkd2lkdGhzRGV0YWlscyA9IDE7DQoJCQkJJHdpZHRoc0NvbnRlbnQgPSAyOw0KCQkJfQ0KCQkJZWxzZWlmICgkY29uY2VwdERldGFpbHMgeG9yICRjb25jZXB0Q29udGVudCB4b3IgJGNvbmNlcHRDb3N0aW5nKQ0KCQkJew0KCQkJCS8vIG9uZSBpcyB0cnVlDQoJCQkJJHdpZHRoc0RldGFpbHMgPSA1Ow0KCQkJCSR3aWR0aHNDb250ZW50ID0gNTsNCgkJCQkvLyBsb2FkIGJsYW5rIHNwYWNlcg0KCQkJCSRzZXRTcGFjZXIgPSB0cnVlOw0KCQkJfQ0KCQkJZWxzZWlmICgkY29uY2VwdERldGFpbHMgfHwgJGNvbmNlcHRDb250ZW50IHx8ICRjb25jZXB0Q29zdGluZykNCgkJCXsNCgkJCQkvLyB0d28gaXMgdHJ1ZQ0KCQkJCWlmICgkY29uY2VwdENvc3RpbmcpDQoJCQkJew0KCQkJCQkkd2lkdGhzRGV0YWlscyA9IDM7DQoJCQkJCSR3aWR0aHNDb250ZW50ID0gMzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHdpZHRoc0RldGFpbHMgPSAyOw0KCQkJCQkkd2lkdGhzQ29udGVudCA9IDM7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gbG9hZCBjb25jZXB0IGRldGFpbHMNCgkJCWlmICgkY29uY2VwdERldGFpbHMgJiYgaXNzZXQoc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XSkgJiYgaXNzZXQoc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+ZGV0YWlscykpDQoJCQl7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tJy4kd2lkdGhzRGV0YWlscy4nLTUiPic7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2Picuc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+ZGV0YWlscy4nPC9kaXY+JzsNCgkJCQkkY29udGVudFtdID0gJzwvZGl2Pic7DQoJCQl9DQoJCQkvLyBzZXQgc29tZSBjb250ZW50DQoJCQlpZiAoJGNvbmNlcHRDb250ZW50ICYmIGlzc2V0KHNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXSkgJiYgaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRCdWlsZGVyWydjb250ZW50J11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJew0KCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLScuJHdpZHRoc0NvbnRlbnQuJy01Ij4nOw0KCQkJCSRjb250ZW50W10gPSBpbXBsb2RlKCcnLHNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXVskZXZlbnRfY29uY2VwdF90aW1lXSk7DQoJCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KCQkJfQ0KCQkJLy8gc2V0IHNvbWUgY29udGVudA0KCQkJaWYgKCRjb25jZXB0Q29zdGluZyAmJiBpc3NldChzZWxmOjokZXZlbnRPcHRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRPcHRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJCXsNCgkJCQlpZiAoJHNldFNwYWNlcikNCgkJCQl7DQoJCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLTMtNSI+JzsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KCQkJCX0NCgkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9InVrLXdpZHRoLW1lZGl1bS0yLTUiPic7DQoJCQkJJGNvbnRlbnRbXSA9IGltcGxvZGUoJycsc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSk7DQoJCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KCQkJfQ0KCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KDQoJCQlyZXR1cm4gaW1wbG9kZSgnJywkY29udGVudCk7DQoJCX0NCgkJZWxzZWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnb3B0aW9ucycpDQoJCXsNCgkJCWlmIChzZWxmOjpzZXRDb25jZXB0Q29zdGluZygkY29uY2VwdCwkZXZlbnRfY29uY2VwdF90aW1lKSkNCgkJCXsNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCQkJew0KCQkJCQlmb3JlYWNoIChzZWxmOjokZXZlbnRPcHRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdIGFzICRuciA9PiAmJGNvc3RpbmcpDQoJCQkJCXsNCgkJCQkJCSRjb3N0aW5nWyduYW1lJ10gPSBzZWxmOjpsb2FkTmFtZSgnZXZlbnQnLHNlbGY6OiRldmVudC0+aWQpIC4gJyAoJyAuc2VsZjo6bG9hZE5hbWUoJ2NvbmNlcHQnLCRjb25jZXB0KSAuICcgLSAnIC4gJGNvc3RpbmdbJ25hbWUnXSAuJyknOw0KCQkJCQkJaWYgKGlzc2V0KHNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJGV2ZW50X2NvbmNlcHRfdGltZV1bJ3N0YXJ0LWVuZCddKSkNCgkJCQkJCXsNCgkJCQkJCQkkY29zdGluZ1snZGF0ZSddID0gc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXVskZXZlbnRfY29uY2VwdF90aW1lXVsnc3RhcnQtZW5kJ107DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkZXZlbnRfY29uY2VwdF90aW1lDQoJICogQHJldHVybiBib29sDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRDb25jZXB0Q29udGVudCgmJGV2ZW50X2NvbmNlcHRfdGltZSkNCgl7DQoJCWlmIChpc3NldChzZWxmOjokbG9jYXRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJew0KCQkJJGtleSA9IHNlbGY6OmdldExvY2F0aW9uKCRldmVudF9jb25jZXB0X3RpbWUpOw0KCQkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+ZGF0ZVsnY29udGVudCddWyRrZXldKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmRhdGVbJ2NvbnRlbnQnXVska2V5XSkpDQoJCQl7DQoJCQkJaWYgKCFpc3NldChzZWxmOjokZXZlbnRCdWlsZGVyWydjb250ZW50J11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdID0gYXJyYXkoKTsNCgkJCQl9DQoJCQkJZm9yZWFjaCAoc2VsZjo6JGV2ZW50LT5kYXRlWydjb250ZW50J11bJGtleV0gYXMgJGNvbnRlbnQpDQoJCQkJew0KCQkJCQkvLyBjaGVjayBpZiB0aGlzIGNvbnRlbnQgaXMgYWxyZWFkeSBsb2FkZWQNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdKSkNCgkJCQkJew0KCQkJCQkJLy8gbG9hZCB0aGUgZGF0YQ0KCQkJCQkJc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XSA9IHNlbGY6OmdldEFsbFZhbHVlcygkY29udGVudCwgJ2NvbnRlbnQnLCBhcnJheSgnY29udGVudF9pbWFnZScpKTsNCgkJCQkJfQ0KCQkJCQkvLyBvbmx5IGxvYWQgdGhlIGNvbnRlbnQgaWYgd2UgaGF2ZSB2YWx1ZXMNCgkJCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdKSkNCgkJCQkJew0KCQkJCQkJY29udGludWU7DQoJCQkJCX0NCgkJCQkJLy8gbm93IGxvYWQgdGhlIGJhbm5lcg0KCQkJCQkkYmFubmVyID0gZmFsc2U7DQoJCQkJCWlmIChpc3NldChzZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5jb250ZW50X2ltYWdlKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5jb250ZW50X2ltYWdlKSAmJiBzdHJwb3Moc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+Y29udGVudF9pbWFnZSwgJ18nKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCSRleHRlbnRpb24gPSBleHBsb2RlKCdfJywgc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+Y29udGVudF9pbWFnZSk7DQoJCQkJCQlpZiAoaXNzZXQoJGV4dGVudGlvblsyXSkpDQoJCQkJCQl7DQoJCQkJCQkJJGJhbm5lciA9ICc8aW1nIGNsYXNzPSJ1ay10aHVtYm5haWwgdWstbWFyZ2luIiBzcmM9Iicuc2VsZjo6JGZpbGVsaW5rLnNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPmNvbnRlbnRfaW1hZ2UuJy4nLiRleHRlbnRpb25bMl0uJyIgYWx0PSInLnNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPm5hbWUuJyI+JzsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkkZWRpdCA9IHNlbGY6OmxvYWRFZGl0QnV0dG9uKCdjb250ZW50JywkY29udGVudCk7DQoJCQkJCSRlZGl0Q2xhc3MgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGVkaXQpKSA/ICcgdWstdmlzaWJsZS1ob3Zlci1pbmxpbmUnIDogJyc7DQoJCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5kZXRhaWxzKSB8fCAkYmFubmVyKQ0KCQkJCQl7DQoJCQkJCQkkcmFuZG9tID0gc2VsZjo6cmFuZG9ta2V5KDUpOw0KCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSAnPGRpdiBjbGFzcz0idWstbWFyZ2luJy4kZWRpdENsYXNzLiciPjxhIGhyZWY9IiMiIGRhdGEtdWstdG9nZ2xlPSJ7dGFyZ2V0OlwnI2NvbicuJHJhbmRvbS4nXCd9Ij4nLnNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPm5hbWUuJzwvYT4nIC4gJGVkaXQgLic8L2Rpdj4nOw0KCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSAnPGRpdiBpZD0iY29uJy4kcmFuZG9tLiciIGNsYXNzPSJ1ay1oaWRkZW4iPic7DQoJCQkJCQlpZiAoJGJhbm5lcikNCgkJCQkJCXsNCgkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydjb250ZW50J11bJGV2ZW50X2NvbmNlcHRfdGltZV1bXSA9ICRiYW5uZXI7DQoJCQkJCQl9DQoJCQkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+ZGV0YWlscykgfHwgJGJhbm5lcikNCgkJCQkJCXsNCgkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydjb250ZW50J11bJGV2ZW50X2NvbmNlcHRfdGltZV1bXSA9IHNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPmRldGFpbHM7DQoJCQkJCQl9DQoJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydjb250ZW50J11bJGV2ZW50X2NvbmNlcHRfdGltZV1bXSA9ICc8L2Rpdj4nOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSAnPGRpdiBjbGFzcz0idWstbWFyZ2luJy4kZWRpdENsYXNzLiciPicuc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+bmFtZSAuICRlZGl0IC4nPC9kaXY+JzsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBmb3VuZA0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGNvbmNlcHQNCgkgKiBAcGFyYW0gJGV2ZW50X2NvbmNlcHRfdGltZQ0KCSAqIEByZXR1cm4gYm9vbA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0Q29uY2VwdENvc3RpbmcoJiRjb25jZXB0LCYkZXZlbnRfY29uY2VwdF90aW1lKQ0KCXsNCgkJJGZvdW5kID0gZmFsc2U7DQoJCS8vIGNoZWNrIGlmIHRoaXMgY29uY2VwdCBoYXMgYSB2YXJpYXRpb24gcmVsYXRpb24NCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkgJiYgaW5fYXJyYXkoJGNvbmNlcHQsIHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSkNCgkJew0KCQkJJGV4dHJhcyA9IGFycmF5KCk7DQoJCQkkYnV0dG9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoIChzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSBhcyAka2V5ID0+ICRjaGVja2VyKQ0KCQkJew0KCQkJCWlmICgkY29uY2VwdCA9PSAkY2hlY2tlciAmJiBpc3NldChzZWxmOjokZXZlbnQtPmNvc3RbJ3ByaWNlJ11bJGtleV0pICYmIGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsndmFyaWF0aW9uJ11bJGtleV0pICYmICFzZWxmOjokZXZlbnQtPmNvc3RbJ2V4dHJhJ11bJGtleV0pDQoJCQkJew0KCQkJCQlpZiAoY291bnQoJGJ1dHRvbnMpID4gMiAmJiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpKQ0KCQkJCQl7DQoJCQkJCQkkYnV0dG9uc1tdID0gJzxiciAvPic7DQoJCQkJCX0NCgkJCQkJaWYgKCRidXR0b24gPSBzZWxmOjpzZXRCdXlCdXR0b25zKCRrZXksICRjb25jZXB0LCAkZXZlbnRfY29uY2VwdF90aW1lKSkNCgkJCQkJew0KCQkJCQkJJGJ1dHRvbnNbXSA9ICRidXR0b247DQoJCQkJCX0NCgkJCQl9DQoJCQkJZWxzZWlmICgkY29uY2VwdCA9PSAkY2hlY2tlciAmJiBpc3NldChzZWxmOjokZXZlbnQtPmNvc3RbJ3ByaWNlJ11bJGtleV0pICYmIGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsndmFyaWF0aW9uJ11bJGtleV0pICYmIHNlbGY6OiRldmVudC0+Y29zdFsnZXh0cmEnXVska2V5XSkNCgkJCQl7DQoJCQkJCWlmIChjb3VudCgkZXh0cmFzKSA+IDIgJiYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicgfHwgc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKSkNCgkJCQkJew0KCQkJCQkJJGV4dHJhc1tdID0gJzxiciAvPic7DQoJCQkJCX0NCgkJCQkJaWYgKCRidXR0b24gPSBzZWxmOjpzZXRCdXlCdXR0b25zKCRrZXksICRjb25jZXB0LCAkZXZlbnRfY29uY2VwdF90aW1lKSkNCgkJCQkJew0KCQkJCQkJJGV4dHJhc1tdID0gJGJ1dHRvbjsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnV0dG9ucykpDQoJCQl7DQoJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSA9IGFycmF5KCk7DQoJCQkJaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicgfHwgc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXVtdID0gaW1wbG9kZSgnJywkYnV0dG9ucyk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ29wdGlvbnMnKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSA9ICRidXR0b25zOw0KCQkJCX0NCgkJCQkkZm91bmQgPSB0cnVlOw0KCQkJfQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRleHRyYXMpKQ0KCQkJew0KCQkJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCQkJew0KCQkJCQlzZWxmOjokZXZlbnRPcHRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdID0gYXJyYXkoKTsNCgkJCQkJaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicgfHwgc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQkJCQl7DQoJCQkJCQlzZWxmOjokZXZlbnRPcHRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSBpbXBsb2RlKCcnLCRleHRyYXMpOw0KCQkJCQl9DQoJCQkJCWVsc2VpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ29wdGlvbnMnKQ0KCQkJCQl7DQoJCQkJCQlzZWxmOjokZXZlbnRPcHRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdID0gJGV4dHJhczsNCgkJCQkJfQ0KDQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXVtdID0gJzxocj4nOw0KCQkJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXVtdID0gaW1wbG9kZSgnJywkZXh0cmFzKTsNCgkJCQkJfQ0KCQkJCQllbHNlaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSA9IGFycmF5X21lcmdlKHNlbGY6OiRldmVudE9wdGlvbnNbJGV2ZW50X2NvbmNlcHRfdGltZV0sICRleHRyYXMpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSRmb3VuZCA9IHRydWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRmb3VuZDsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGtleQ0KCSAqIEBwYXJhbSBpbnQgJGNvbmNlcHQNCgkgKiBAcGFyYW0gc3RyaW5nICRldmVudF9jb25jZXB0X3RpbWUNCgkgKiBAcmV0dXJuIGFycmF5fGJvb2x8c3RyaW5nDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRCdXlCdXR0b25zKCRrZXksICRjb25jZXB0ID0gMCwgJGV2ZW50X2NvbmNlcHRfdGltZSA9ICcwX18wJykNCgl7DQoJCS8vIDEgIDwtIGluZGl2aWR1YWwgYW5kIGdyb3VwDQoJCS8vIDIgIDwtIG9ubHkgaW5kaXZpZHVhbA0KCQkvLyAzIDwtIG9ubHkgZ3JvdXANCgkJLy8gNCA8LSBjdXN0b20gcmVnDQoJCS8vIDUgPC0gY2xvc2UgcmVnDQoJCWlmIChpc3NldChzZWxmOjokZXZlbnQtPmlkKSkNCgkJew0KCQkJLy8gc2V0IHRoZSBwcmljZQ0KCQkJaWYgKHNlbGY6OiRldmVudC0+dHlwZSAhPSA1ICYmICgkY29uY2VwdFByaWNlID0gc2VsZjo6Z2V0Q29uY2VwdFByaWNlKCRrZXkpKSkNCgkJCXsNCgkJCQkkdmFyaWF0aW9uID0gKGludCkgc2VsZjo6JGV2ZW50LT5jb3N0Wyd2YXJpYXRpb24nXVska2V5XTsNCgkJCQkkcXR5ID0gKGludCkgc2VsZjo6JGV2ZW50LT5jb3N0WydxdHknXVska2V5XTsNCgkJCQkkb25seSA9IChpbnQpIHNlbGY6OiRldmVudC0+Y29zdFsnb25seSddWyRrZXldOw0KCQkJCSRleHRyYSA9IChpbnQpIHNlbGY6OiRldmVudC0+Y29zdFsnZXh0cmEnXVska2V5XTsNCgkJCQkkdGF4ZWQgPSAoaW50KSBzZWxmOjokZXZlbnQtPmNvc3RbJ3RheGVkJ11bJGtleV07DQoJCQkJLy8gc3RhcnQgYnVpbGRpbmcgdGhlIGJ1dHRvbg0KCQkJCSRidXR0b24gPSBhcnJheSgpOw0KCQkJCWlmIChzZWxmOjokZXZlbnQtPnR5cGUgPT0gNCkNCgkJCQl7DQoJCQkJCSRidXR0b25bXSA9ICc8ZGl2ICBjbGFzcz0idWstd2lkdGgtMS0xIHVrLXRleHQtYm9sZCB1ay10ZXh0LXN1Y2Nlc3MgdWstdGV4dC1sYXJnZSI+JzsNCgkJCQkJJGJ1dHRvbltdID0gc2VsZjo6bG9hZE5hbWUoJ3ZhcmlhdGlvbicsJHZhcmlhdGlvbik7DQoJCQkJCSRidXR0b25bXSA9ICcgICcgLiRjb25jZXB0UHJpY2VbJ0VYQ0hBTkdFX1JBVEVfVE9fTU9ORVknXTsNCgkJCQkJJGJ1dHRvbltdID0gJzwvZGl2Pic7DQoJCQkJCSRidXR0b25bXSA9ICc8YSBocmVmPSIjQ1VTVE9NX0xJTksiIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTEiIHRhcmdldD0iX2JsYW5rIj4nOw0KCQkJCQkkYnV0dG9uW10gPSBUZXh0OjpfKCdSZWdpc3RlcicpOw0KCQkJCQkkYnV0dG9uW10gPSAnPC9hPic7DQoNCgkJCQkJJGJ1eUlkID0gbnVsbDsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGJ1bmRsZSA9IDA7DQoJCQkJCSR0aW1lID0gZXhwbG9kZSgnX18nLCRldmVudF9jb25jZXB0X3RpbWUpOw0KCQkJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlJ11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJCQl7DQoJCQkJCQkkYnVuZGxlID0gc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlJ11bJGV2ZW50X2NvbmNlcHRfdGltZV07DQoJCQkJCX0NCgkJCQkJLy8gc3dpdGNoIElEDQoJCQkJCSRzd2l0Y2hJRCA9IHNlbGY6OiRldmVudC0+aWQgLiAnXycgLiAoaW50KSAkYnVuZGxlIC4gJ18nIC4oaW50KSAkdGltZVsxXSAuICdfJyAuKGludCkgJGNvbmNlcHQgLiAnXycgLiAoaW50KSAkdmFyaWF0aW9uOw0KCQkJCQkvLyBjaGVja2luZyBJRA0KCQkJCQkkY2hlY2tpbmdJRCA9IHNlbGY6OiRldmVudC0+b3JnYW5pemVyIC4gJ18nIC4gJHN3aXRjaElEOw0KCQkJCQkvLyBjaGVja2luZyBLRVkNCgkJCQkJJElES0VZID0gbWQ1KCRjaGVja2luZ0lEKTsNCgkJCQkJLy8gc2V0IGJ1eSBJRA0KCQkJCQkkYnV5SWQgPSAkSURLRVkgLiAnX18nIC4gJGNvbmNlcHRQcmljZVsnRVhDSEFOR0VfUkFURV9UTyddIC4gJ19fJyAuICRjb25jZXB0UHJpY2VbJ0VYQ0hBTkdFX1JBVEVfSUQnXTsNCgkJCQkJLy8gZ2V0IHF0eSBhdmFpbGFibGUNCgkJCQkJJGFjdHVhbFFUWSA9IHNlbGY6OmdldFF0eUF2YWlsYWJsZSgkcXR5LCAndmFyaWF0aW9uJywgJGNoZWNraW5nSUQpOw0KCQkJCQkvLyBnZXQgcXR5IHRoaXMgdXNlciBoYXMgc2VsZWN0ZWQgDQoJCQkJCSRzZWxlY3RlZFFUWSA9IHNlbGY6OmFjdGl2ZUNhcnRRdHkoJGNoZWNraW5nSUQpOw0KCQkJCQkvLyBzZXQgdmFyaWF0aW9uIG5hbWUNCgkJCQkJJHZhcmlhdGlvbk5hbWUgPSBzZWxmOjpsb2FkTmFtZSgndmFyaWF0aW9uJywkdmFyaWF0aW9uKTsNCgkJCQkJLy8gc2V0IGJ1dHRvbiBieSBJRA0KCQkJCQkkYnV0dG9uSWQgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRidXlJZCwgJ2NBbWVsJyk7DQoJCQkJCS8vIHdlIHJlbW92ZSBkaXNhYmxlciBpZiBub3QgbmVlZGVkDQoJCQkJCXNlbGY6OiRkaXNhYmxlQnV0dG9uc1snIyMjJy4kYnV0dG9uSWQuJyMjIyddID0gJyc7DQoJCQkJCWlmICggc2VsZjo6JHJldHVyblR5cGUgIT09ICdvcHRpb25zJykNCgkJCQkJew0KCQkJCQkJLy8gc2V0IHNvbWUgSmF2YVNjcmlwdCB2YWx1ZXMNCgkJCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nKQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRidXR0b25TY3JpcHRbXSA9ICdhdmFpbGFibGVbIicuJGJ1dHRvbklkLiciXSA9ICcuIChpbnQpICRxdHkuJzsnOw0KCQkJCQkJfQ0KCQkJCQkJLy8gdGlja2V0IGJlaGF2aW9yIA0KCQkJCQkJaWYgKCEkZXh0cmEpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGJ1dHRvblNjcmlwdFtdID0gJ3RpY2tldHNbIicuJGJ1dHRvbklkLiciXSA9IDE7JzsNCgkJCQkJCX0NCgkJCQkJCS8vIHNldCB0aGUgb25seSBzd2l0Y2gNCgkJCQkJCSRvbmx5U3dpdGNoID0gJyc7DQoJCQkJCQlpZiAoMSA9PSAkb25seSAmJiAhJGV4dHJhKQ0KCQkJCQkJew0KCQkJCQkJCSRvbmx5U3dpdGNoID0gJ2RhdGEtb25seT0iMSInOw0KCQkJCQkJCS8vIG1ha2Ugc3VyZSBzZWxlY3RlZCBvbmx5IHZhbHVlcyBhcmUgc2V0IGFnYWluDQoJCQkJCQkJaWYgKCRzZWxlY3RlZFFUWSA+IDApDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBsb2FkIHBlciBjb25jZXB0DQoJCQkJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNvbmNlcHRTd2l0Y2hPbmx5WyRjb25jZXB0XSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCXNlbGY6OiRjb25jZXB0U3dpdGNoT25seVskY29uY2VwdF0gPSBhcnJheSgpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIHRoaXMgaXMgdGhlIGFjdGl2ZSBzZWxlY3Rpb24NCgkJCQkJCQkJc2VsZjo6JGNvbmNlcHRTd2l0Y2hPbmx5WyRjb25jZXB0XVtdID0gYXJyYXkoJ2NvbmNlcHQnID0+IChpbnQpICRjb25jZXB0LCAnYnVuZGxlJyA9PiAoaW50KSAkYnVuZGxlKTsNCgkJCQkJCQkJLy8gbG9hZCBwZXIgYnVuZGxlDQoJCQkJCQkJCWlmICghaXNzZXQoc2VsZjo6JGJ1bmRsZVN3aXRjaE9ubHlbJGJ1bmRsZV0pKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlzZWxmOjokYnVuZGxlU3dpdGNoT25seVskYnVuZGxlXSA9IGFycmF5KCk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJLy8gdGhpcyBpcyB0aGUgYWN0aXZlIHNlbGVjdGlvbg0KCQkJCQkJCQlzZWxmOjokYnVuZGxlU3dpdGNoT25seVskYnVuZGxlXVtdID0gYXJyYXkoJ2NvbmNlcHQnID0+IChpbnQpICRjb25jZXB0LCAnYnVuZGxlJyA9PiAoaW50KSAkYnVuZGxlKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJc2VsZjo6JGRpc2FibGVCdXR0b25zQ2hlY2tbJGJ1dHRvbklkXSA9IGFycmF5KCdjb25jZXB0JyA9PiAoaW50KSAkY29uY2VwdCwgJ2J1bmRsZScgPT4gKGludCkgJGJ1bmRsZSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJJGJ1dHRvbltdID0gJzxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSB1ay10ZXh0LWJvbGQgdWstdGV4dC1zdWNjZXNzIHVrLXRleHQtbGFyZ2UiPic7DQoJCQkJCQkkYnV0dG9uW10gPSAkdmFyaWF0aW9uTmFtZTsNCgkJCQkJCSRidXR0b25bXSA9ICc8YnIgY2xhc3M9InVrLXZpc2libGUtc21hbGwiLz4gIDxzcGFuIGNsYXNzPSInLiRidXR0b25JZC4nLXByaWNlIj4nIC4gJGNvbmNlcHRQcmljZVsnRVhDSEFOR0VfUkFURV9UT19NT05FWSddIC4nPC9zcGFuPic7DQoJCQkJCQkkYnV0dG9uW10gPSAnPC9kaXY+JzsNCg0KCQkJCQkJLy8gY2hlY2sgaWYgdGhlcmUgaXMgc3RpbGwgcGxhY2Ugb3BlbiBvbiB0aGlzIHZhcmlhdGlvbg0KCQkJCQkJaWYgKCRxdHkgIT0gMCAmJiAkYWN0dWFsUVRZIDw9IDAgJiYgJHNlbGVjdGVkUVRZIDw9IDAgJiYgc2VsZjo6JHJldHVyblR5cGUgIT09ICdhZG1pbicpDQoJCQkJCQl7DQoJCQkJCQkJLy8gc3RhcnQgYnVpbGRpbmcgdGhlIGJ1dHRvbg0KCQkJCQkJCSRidXR0b24gPSBhcnJheSgpOw0KCQkJCQkJCSRidXR0b25bXSA9ICc8ZGl2IGNsYXNzPSJ1ay13aWR0aC0xLTEgdWstdGV4dC1ib2xkIHVrLXRleHQtbXV0ZWQgdWstdGV4dC1sYXJnZSI+JzsNCgkJCQkJCQkkYnV0dG9uW10gPSAkdmFyaWF0aW9uTmFtZTsNCgkJCQkJCQkkYnV0dG9uW10gPSAnPGJyIGNsYXNzPSJ1ay12aXNpYmxlLXNtYWxsIi8+ICcgLiAkY29uY2VwdFByaWNlWydFWENIQU5HRV9SQVRFX1RPX01PTkVZJ10gLicgPHNtYWxsPignIC4gVGV4dDo6XygnVGhpcyBPcHRpb24gaXMgRnVsbC4nKSAuICcpPC9zbWFsbD4nOw0KCQkJCQkJCSRidXR0b25bXSA9ICc8L2Rpdj4nOw0KCQkJCQkJCSRidXR0b25bXSA9ICc8YnV0dG9uIGNsYXNzPSJ1ay1idXR0b24gdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTEiIHR5cGU9ImJ1dHRvbiIgZGlzYWJsZWQ+ICc7DQoJCQkJCQkJJGJ1dHRvbltdID0gVGV4dDo6XygnQ2xvc2VkJyk7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQl9DQoJCQkJCQllbHNlaWYgKHNlbGY6OiRldmVudC0+dHlwZSA9PSAyKQ0KCQkJCQkJew0KCQkJCQkJCWlmICgkc2VsZWN0ZWRRVFkgPiAwKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGJ1dHRvbltdID0gJzxidXR0b24gIGlkPSInLiRidXR0b25JZC4nLXNlbGVjdCIgY2xhc3M9InNlbGVjdC1idXR0b24gdWstYnV0dG9uIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20gdWstd2lkdGgtMS0xIHVrLWJ1dHRvbi1zdWNjZXNzIiB0eXBlPSJidXR0b24iIGRhdGEtYnV5PSInLiRidXlJZC4nIiBkYXRhLXN3aXRjaD0iJy4kc3dpdGNoSUQuJyIgJy4kb25seVN3aXRjaC4nIGRhdGEtdWstYnV0dG9uPSIwIj4gJzsNCgkJCQkJCQkJJGJ1dHRvbltdID0gVGV4dDo6XygnU2VsZWN0Jyk7DQoJCQkJCQkJCSRidXR0b25bXSA9ICc8L2J1dHRvbj4nOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlDQoJCQkJCQkJew0KCQkJCQkJCQkkYnV0dG9uW10gPSAnPGJ1dHRvbiAgaWQ9IicuJGJ1dHRvbklkLictc2VsZWN0IiBjbGFzcz0ic2VsZWN0LWJ1dHRvbiB1ay1idXR0b24gdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTEgdWstYnV0dG9uLXN1Y2Nlc3MiIHR5cGU9ImJ1dHRvbiIgZGF0YS1idXk9IicuJGJ1eUlkLiciIGRhdGEtc3dpdGNoPSInLiRzd2l0Y2hJRC4nIiAnLiRvbmx5U3dpdGNoLicgZGF0YS11ay1idXR0b249IjAiPiAnOw0KCQkJCQkJCQkkYnV0dG9uW10gPSBUZXh0OjpfKCdTZWxlY3QnKTsNCgkJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCS8vIGFkZCB0byBjYXJ0IGJ1dHRvbg0KCQkJCQkJCSRidXR0b25bXSA9ICc8ZGl2IGNsYXNzPSJ1ay1idXR0b24tZ3JvdXAgdWstd2lkdGgtMS0xIj4nOw0KCQkJCQkJCWlmICgkcXR5ICE9IDAgJiYgJGFjdHVhbFFUWSA8PSAwICYmICRzZWxlY3RlZFFUWSA+IDApDQoJCQkJCQkJew0KCQkJCQkJCQkkYnV0dG9uW10gPSAnPGJ1dHRvbiBpZD0iJy4kYnV0dG9uSWQuJy1wbHVzIiBjbGFzcz0ic2VsZWN0LWJ1dHRvbiB1ay1idXR0b24gdWstYnV0dG9uLXNtYWxsIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20gdWstd2lkdGgtMS0zIHVrLWJ1dHRvbi1zdWNjZXNzIiB0eXBlPSJidXR0b24iIGRhdGEtYnV5PSInLiRidXlJZC4nIiBkYXRhLXN3aXRjaD0iJy4kc3dpdGNoSUQuJyIgJy4kb25seVN3aXRjaC4nIGRpc2FibGVkPic7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCSRidXR0b25bXSA9ICc8YnV0dG9uIGlkPSInLiRidXR0b25JZC4nLXBsdXMiIGNsYXNzPSJzZWxlY3QtYnV0dG9uIHVrLWJ1dHRvbiB1ay1idXR0b24tc21hbGwgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTMgdWstYnV0dG9uLXN1Y2Nlc3MiIHR5cGU9ImJ1dHRvbiIgZGF0YS1idXk9IicuJGJ1eUlkLiciIGRhdGEtc3dpdGNoPSInLiRzd2l0Y2hJRC4nIiAnLiRvbmx5U3dpdGNoLicgIyMjJy4kYnV0dG9uSWQuJyMjIz4nOw0KCQkJCQkJCX0NCgkJCQkJCQkkYnV0dG9uW10gPSAnPGkgY2xhc3M9InVrLWljb24tcGx1cyI+PC9pPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzxidXR0b24gaWQ9IicuJGJ1dHRvbklkLictbWludXMiIGNsYXNzPSJzZWxlY3QtYnV0dG9uIHVrLWJ1dHRvbiB1ay1idXR0b24tc21hbGwgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTMgdWstYnV0dG9uLXN1Y2Nlc3MiIHR5cGU9ImJ1dHRvbiIgZGF0YS1idXk9IicuJGJ1eUlkLiciIGRhdGEtc3dpdGNoPSInLiRzd2l0Y2hJRC4nIiAnLiRvbmx5U3dpdGNoLicgIyMjJy4kYnV0dG9uSWQuJyMjIz4nOw0KCQkJCQkJCSRidXR0b25bXSA9ICc8aSBjbGFzcz0idWstaWNvbi1taW51cyI+PC9pPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tc21hbGwgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTMiIHR5cGU9ImJ1dHRvbiIgZGlzYWJsZWQ+JzsNCgkJCQkJCQlpZiAoJHNlbGVjdGVkUVRZID4gMCkNCgkJCQkJCQl7DQoJCQkJCQkJCSRidXR0b25bXSA9ICc8c3BhbiBpZD0iJy4kYnV0dG9uSWQuJy1udW1iZXIiIGRhdGEtcXR5PSInLiRzZWxlY3RlZFFUWS4nIj48c3BhbiBjbGFzcz0idWstYmFkZ2UgdWstYmFkZ2Utbm90aWZpY2F0aW9uIHVrLWJhZGdlLXN1Y2Nlc3MiPicuJHNlbGVjdGVkUVRZLic8L3NwYW4+PC9zcGFuPic7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCQkkYnV0dG9uW10gPSAnPHNwYW4gaWQ9IicuJGJ1dHRvbklkLictbnVtYmVyIiBkYXRhLXF0eT0iMCI+MDwvc3Bhbj4nOwkJCQkJCQ0KCQkJCQkJCX0NCgkJCQkJCQkkYnV0dG9uW10gPSAnPC9idXR0b24+JzsNCgkJCQkJCQkkYnV0dG9uW10gPSAnPC9kaXY+JzsNCgkJCQkJCX0NCgkJCQkJCQ0KCQkJCQkJLy8gY2hlY2sgaWYgdGhlcmUgaGFzIGJlZW4gYSBjaGFuZ2UgaW4gcHJpY2UNCgkJCQkJCSRzdG9yZWRQcmljZSA9IHNlbGY6OmdldEV2ZW50RGV0YWlscygkSURLRVksICdwcmljZScsICdpZCcsIGZhbHNlKTsNCgkJCQkJCWlmICgkc3RvcmVkUHJpY2UgIT09ICRjb25jZXB0UHJpY2VbJ0VYQ0hBTkdFX1JBVEVfVE8nXSkNCgkJCQkJCXsNCgkJCQkJCQkvLyB1cGRhdGUgdGhlIHByaWNlIGlmIHRoZXJlIHdhcyBhIGNoYW5nZQ0KCQkJCQkJCXNlbGY6OnVwZGF0ZUV2ZW50RGV0YWlsKCRJREtFWSwgYXJyYXkoDQoJCQkJCQkJCSdpZCcgPT4gJElES0VZLA0KCQkJCQkJCQknYnV5X2lkJyA9PiAkYnV5SWQsDQoJCQkJCQkJCSdjaGVja19pZCcgPT4gJGNoZWNraW5nSUQsDQoJCQkJCQkJCSdzd2l0Y2hfaWQnID0+ICRzd2l0Y2hJRCwNCgkJCQkJCQkJJ3ByaWNlJyA9PiAkY29uY2VwdFByaWNlWydFWENIQU5HRV9SQVRFX0ZST00nXSwNCgkJCQkJCQkJJ25hbWUnID0+ICR2YXJpYXRpb25OYW1lLA0KCQkJCQkJCQkncXR5JyA9PiAkcXR5LA0KCQkJCQkJCQknb25seScgPT4gJG9ubHksDQoJCQkJCQkJCSdleHRyYScgPT4gJGV4dHJhLA0KCQkJCQkJCQkndGF4ZWQnID0+ICR0YXhlZCwNCgkJCQkJCQkJJ3ByaWNlT2JqZWN0JyA9PiAkY29uY2VwdFByaWNlKSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gb25seSByZXR1cm4gYnV0dG9uIGlmIGFkbWluIG9yIHNpdGUgcmV0dXJuIHR5cGUNCgkJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQkJew0KCQkJCQlyZXR1cm4gIGltcGxvZGUoJycsJGJ1dHRvbik7DQoJCQkJfQ0KCQkJCS8vIGlmIG9wdGlvbnMgdGhlbiByZXR1cm4gYXJyYXkgb2YgcmVzdWx0cw0KCQkJCWVsc2VpZiAoJGJ1eUlkICYmIHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJCQl7DQoJCQkJCXJldHVybiBhcnJheSgNCgkJCQkJCSdpZCcgPT4gJElES0VZLA0KCQkJCQkJJ2J1eV9pZCcgPT4gJGJ1eUlkLA0KCQkJCQkJJ2NoZWNrX2lkJyA9PiAkY2hlY2tpbmdJRCwNCgkJCQkJCSdzd2l0Y2hfaWQnID0+ICRzd2l0Y2hJRCwNCgkJCQkJCSdwcmljZScgPT4gJGNvbmNlcHRQcmljZVsnRVhDSEFOR0VfUkFURV9UTyddLA0KCQkJCQkJJ25hbWUnID0+ICR2YXJpYXRpb25OYW1lLA0KCQkJCQkJJ3F0eScgPT4gJHF0eSwNCgkJCQkJCSdvbmx5JyA9PiAkb25seSwNCgkJCQkJCSdleHRyYScgPT4gJGV4dHJhLA0KCQkJCQkJJ3RheGVkJyA9PiAkdGF4ZWQsDQoJCQkJCQkncHJpY2VPYmplY3QnID0+ICRjb25jZXB0UHJpY2UpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFdmVudERldGFpbHMoJGtleSwgJHdoYXQgPSAncHJpY2UnLCAkdHlwZSA9ICduYW1lJywgJHJldHJ5ID0gdHJ1ZSwgJHByaWNlQ29udmVydGlvbiA9IHRydWUpDQoJew0KCQlpZiAoJ25hbWUnID09ICR0eXBlKQ0KCQl7DQoJCQkka2V5ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgka2V5KTsNCgkJfQ0KCQkvLyBnZXQgdGhlIGV2ZW50IGRldGFpbHMNCgkJJGV2ZW50RGV0YWlscyA9IHNlbGY6OmdldCgnZXZlbnREZXRhaWxzVkRNJywgbnVsbCk7DQoJCWlmICgkZXZlbnREZXRhaWxzICYmIGlzc2V0KCRldmVudERldGFpbHNbJHR5cGVdWyRrZXldKSAmJiBpc3NldCgkZXZlbnREZXRhaWxzWyR0eXBlXVska2V5XVskd2hhdF0pKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6ZXZlbnREZXRhaWxQcmVwKCRldmVudERldGFpbHNbJHR5cGVdWyRrZXldLCAkd2hhdCwgJHByaWNlQ29udmVydGlvbik7DQoJCX0NCgkJLy8gaWYgbm90IHNldCByZXRyeSwgYnkgc2V0dGluZyBpdA0KCQlpZiAoJHJldHJ5KQ0KCQl7DQoJCQlzZWxmOjpzZXRFdmVudE9wdGlvbnMoKTsNCgkJCXJldHVybiBzZWxmOjpnZXRFdmVudERldGFpbHMoJGtleSwgJHdoYXQsICR0eXBlLCBmYWxzZSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZXZlbnREZXRhaWxQcmVwKCYkdmFsdWVzLCAmJHdoYXQsICRwcmljZUNvbnZlcnRpb24pDQoJew0KCQlpZiAoJ3ByaWNlJyA9PT0gJHdoYXQgJiYgJHByaWNlQ29udmVydGlvbikNCgkJew0KCQkJLy8gdXNlZCBmb3IgdGhlIGludm9pY2UgdmlldyBtYWlubHkNCgkJCSRqaW5wdXQgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5pbnB1dDsNCgkJCSRkYXRhID0gJGppbnB1dC0+Z2V0QXJyYXkoYXJyYXkoDQoJCQkJJ29yZ2FuaXplcl9jdXJyZW5jeScgPT4gJ3dvcmQnLA0KCQkJCSdyZWdpc3RlcmVkX3VzZXJfY3VycmVuY3knID0+ICd3b3JkJywNCgkJCQknZXhjaGFuZ2VfcmF0ZScgPT4gJ2Zsb2F0Jw0KCQkJKSk7DQoJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ29yZ2FuaXplcl9jdXJyZW5jeSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZGF0YVsncmVnaXN0ZXJlZF91c2VyX2N1cnJlbmN5J10pKQ0KCQkJew0KCQkJCSRjaGVjayA9ICRkYXRhWydvcmdhbml6ZXJfY3VycmVuY3knXS4kZGF0YVsncmVnaXN0ZXJlZF91c2VyX2N1cnJlbmN5J107DQoJCQkJJG9yZ2FuaXplcl9jdXJyZW5jeSA9ICdOT05FJzsNCgkJCQlpZiAoaXNzZXQoJHZhbHVlc1sncHJpY2VPYmplY3QnXVsnRVhDSEFOR0VfUkFURV9OQU1FJ10pICYmICRjaGVjayA9PT0gJHZhbHVlc1sncHJpY2VPYmplY3QnXVsnRVhDSEFOR0VfUkFURV9OQU1FJ10pDQoJCQkJew0KCQkJCQlyZXR1cm4gJHZhbHVlc1skd2hhdF07DQoJCQkJfQ0KCQkJCS8vIGlmIGV4Y2hhbmdlIHJhdGUgaXMgbm90IHNldA0KCQkJCWlmIChpc3NldCgkdmFsdWVzWydwcmljZU9iamVjdCddWydFWENIQU5HRV9SQVRFX0lEJ10pKQ0KCQkJCXsNCgkJCQkJJG9yZ2FuaXplcl9jdXJyZW5jeSA9IHNlbGY6OmdldEZyb21DdXJyZW5jeSgkdmFsdWVzWydwcmljZU9iamVjdCddWydFWENIQU5HRV9SQVRFX0lEJ10pOw0KCQkJCX0NCgkJCQlpZiAoJGRhdGFbJ2V4Y2hhbmdlX3JhdGUnXSA9PSAwICYmICRvcmdhbml6ZXJfY3VycmVuY3kgPT09ICRkYXRhWydvcmdhbml6ZXJfY3VycmVuY3knXSkNCgkJCQl7DQoJCQkJCSRyZXN1bHQgPSBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJGRhdGFbJ29yZ2FuaXplcl9jdXJyZW5jeSddLCAkdmFsdWVzWyR3aGF0XSwgJGRhdGFbJ3JlZ2lzdGVyZWRfdXNlcl9jdXJyZW5jeSddKTsNCgkJCQkJLy8gbm93IHVwZGF0ZSB0aGUgZGF0YQ0KCQkJCQlyZXR1cm4gJHJlc3VsdFsnRVhDSEFOR0VfUkFURV9UTyddOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlyZXR1cm4gYmNtdWwoJHZhbHVlc1skd2hhdF0sICRkYXRhWydleGNoYW5nZV9yYXRlJ10sIDIpOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGZvciBvdGhlciB2aWV3cw0KCQkJZWxzZWlmIChpc3NldCgkdmFsdWVzWydwcmljZU9iamVjdCddWydFWENIQU5HRV9SQVRFX0lEJ10pKQ0KCQkJew0KCQkJCSRvcmdhbml6ZXJfY3VycmVuY3kgPSBzZWxmOjpnZXRGcm9tQ3VycmVuY3koJHZhbHVlc1sncHJpY2VPYmplY3QnXVsnRVhDSEFOR0VfUkFURV9JRCddKTsNCgkJCQkkYWN0aXZlX2N1cnJlbmN5ID0gIHNlbGY6OmdldFVzZXJDdXJyZW5jeSgpOw0KCQkJCSRyZXN1bHQgPSBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJG9yZ2FuaXplcl9jdXJyZW5jeSwgJHZhbHVlc1skd2hhdF0sICRhY3RpdmVfY3VycmVuY3kpOw0KCQkJCS8vIG5vdyB1cGRhdGUgdGhlIGRhdGENCgkJCQlyZXR1cm4gJHJlc3VsdFsnRVhDSEFOR0VfUkFURV9UTyddOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkdmFsdWVzWyR3aGF0XTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEZyb21DdXJyZW5jeSgkZXhjaGFuZ2VfSUQpDQoJew0KCQkkZnJvbUFycmF5ID0gYXJyYXlfbWFwKCdzdHJ0b3VwcGVyJywgKGFycmF5KSBleHBsb2RlKCctJywgJGV4Y2hhbmdlX0lEKSk7DQoJCXJldHVybiAkZnJvbUFycmF5WzBdOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0RXZlbnRPcHRpb25zKCkNCgl7DQoJCSRldmVudHMgPSBzZWxmOjpnZXRWYXJzKCdldmVudCcsIDEsICdwdWJsaXNoZWQnKTsNCgkJLy8gb25seSBjb250aW51ZSBpZiB3ZSBoYXZlIGFuIGFycmF5DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZXZlbnRzKSkNCgkJew0KCQkJJGJ1Y2tldCA9IGFycmF5KCk7ICRidWNrZXRbJ25hbWUnXSA9IGFycmF5KCk7ICAkYnVja2V0WydpZCddID0gYXJyYXkoKTsNCgkJCWZvcmVhY2goJGV2ZW50cyBhcyAkaXRlbSkNCgkJCXsNCgkJCQlpZiAoJGV2ZW50T3B0aW9ucyA9IHNlbGY6OmdldEV2ZW50KCRpdGVtLCAnb3B0aW9ucycpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCgkZXZlbnRPcHRpb25zIGFzICRldmVudCkNCgkJCQkJew0KCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudCkpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoJGV2ZW50IGFzICRvcHRpb24pDQoJCQkJCQkJew0KCQkJCQkJCQkkb3B0aW9uWydfbmFtZSddID0gKGlzc2V0KCRvcHRpb25bJ2RhdGUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJG9wdGlvblsnZGF0ZSddKSkgPyAgJG9wdGlvblsnbmFtZSddLiAnIH4gJyAuICRvcHRpb25bJ2RhdGUnXSA6ICAkb3B0aW9uWyduYW1lJ107DQoJCQkJCQkJCSRzZWxlY3QgPSBKRmlsdGVyT3V0cHV0OjpjbGVhblRleHQoJG9wdGlvblsnX25hbWUnXSk7DQoJCQkJCQkJCS8vIHN0b3JlIGluIHNlc3Npb24NCgkJCQkJCQkJJGtleSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlbGVjdCk7DQoJCQkJCQkJCSRvcHRpb25bJ3NlbGVjdCddID0gICRzZWxlY3Q7DQoJCQkJCQkJCSRidWNrZXRbJ25hbWUnXVska2V5XSA9ICRvcHRpb247DQoJCQkJCQkJCSRidWNrZXRbJ2lkJ11bJG9wdGlvblsnaWQnXV0gPSAkb3B0aW9uOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVja2V0WydpZCddKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXQoJ2V2ZW50RGV0YWlsc1ZETScsICRidWNrZXQpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVFdmVudERldGFpbCgka2V5LCAkdmFsdWVzKQ0KCXsNCgkJLy8gZ2V0IHRoZSBldmVudCBEZXRhaWxzIGZyb20gbWVtb3J5DQoJCSRldmVudERldGFpbHMgPSBzZWxmOjpnZXQoJ2V2ZW50RGV0YWlsc1ZETScsIG51bGwpOw0KCQkvLyBtYWtlIHN1cmUgdGhlIGlkIGlzIGZvdW5kDQoJCWlmICgkZXZlbnREZXRhaWxzICYmIGlzc2V0KCRldmVudERldGFpbHNbJ2lkJ11bJGtleV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudERldGFpbHNbJ2lkJ11bJGtleV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2YWx1ZXMpKQ0KCQl7DQoJCQkkc2VsZWN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkZXZlbnREZXRhaWxzWydpZCddWyRrZXldWydzZWxlY3QnXSk7DQoJCQlmb3JlYWNoICgkdmFsdWVzIGFzICRmaWVsZCA9PiAkdmFsdWUpDQoJCQl7DQoJCQkJLy8gdXBkYXRlIHRoZSBmaWVsZCBpbiBJRA0KCQkJCSRldmVudERldGFpbHNbJ2lkJ11bJGtleV1bJGZpZWxkXSA9ICR2YWx1ZTsNCgkJCQkvLyB1cGRhdGUgdGhlIGZpZWxkIGluIHNlbGVjdGlvbg0KCQkJCSRldmVudERldGFpbHNbJ25hbWUnXVskc2VsZWN0XVskZmllbGRdID0gJHZhbHVlOw0KCQkJfQ0KCQkJLy8gc3RvcmUgYmFjayB0byBtZW1vcnkNCgkJCXNlbGY6OnNldCgnZXZlbnREZXRhaWxzVkRNJywgJGV2ZW50RGV0YWlscyk7DQoJCX0NCgl9DQoNCgkvKioNCgkqICBHZXQgYWxsIGl0ZW1zIGluIENhcnQNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2FydCgkc3RhdHVzID0gMSwgJGJvdGggPSB0cnVlKQ0KCXsNCgkJLy8gYWx3YXlzIGNoZWNrIGZvciBwdWJsaWMga2V5DQoJCSRwdWJsaWMgPSBzZWxmOjpnZXQoJ3B1YmxpY0tlZVknLCBudWxsKTsNCgkJLy8gZ2V0IHVzZXIgb2JqZWN0DQoJCSR1c2VySXMgPSBzZWxmOjp1c2VySXMobnVsbCwgdHJ1ZSk7DQoJCS8vIG5vdyBjaGVjayB0aGUgaWQgYWdhaW5zdCB0aGUgcmVnaXN0ZXJlZCB2YWx1ZXMNCgkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLmtleScpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3JlZ2lzdGVyJywgJ2EnKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2V2ZW50JywgJ2UnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuZXZlbnQnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2UuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2Euc3RhdHVzID0gJyAuIChpbnQpICRzdGF0dXMpOw0KCQkkcXVlcnktPm9yZGVyKCdlLm5hbWUgQVNDJyk7DQoJCWlmICgkdXNlcklzWydpcyddID09IDEgJiYgJHVzZXJJc1snaWQnXSA+IDApDQoJCXsNCgkJCWlmICgkcHVibGljICYmICRib3RoID09PSB0cnVlKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykgLiAnIE9SIGEucmVnaXN0ZXJlZF91c2VyID0gJy4gKGludCkgJHVzZXJJc1snaWQnXSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYS5yZWdpc3RlcmVkX3VzZXIgPSAnLiAoaW50KSAkdXNlcklzWydpZCddKTsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCRwdWJsaWMpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCS8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNhcnQgaXRlbXMNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCSRyZWdpc3RyYXRpb25zID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJZm9yZWFjaCAoJHJlZ2lzdHJhdGlvbnMgYXMgJHJlZykNCgkJCXsNCgkJCQkvLyBvcmdhbml6ZXJfZXZlbnRfYnVuZGxlX3RpbWVfY29uY2VwdF92YXJpYXRpb24NCgkJCQkkZ2V0ID0gZXhwbG9kZSgnXycsICRyZWctPmtleSk7DQoJCQkJJGlkID0gbWQ1KCRyZWctPmtleSk7DQoJCQkJLy8gbG9hZCB0aGUgdmFsdWVzDQoJCQkJaWYgKCFpc3NldCgkYnVja2V0WyRnZXRbMF1dKSkNCgkJCQl7DQoJCQkJCSRidWNrZXRbJGdldFswXV0gPSBhcnJheSgpOw0KCQkJCX0NCgkJCQkvLyBjb3VudCB0aGUgbnVtYmVyIG9mIHJlZ2lzdHJhdGlvbnMgZm9yIHRoaXMgdmFyaWF0aW9uIGFuZCBzZXQgaXRzIG5lZWRlZCB2YWx1ZXMNCgkJCQlpZiAoIWlzc2V0KCRidWNrZXRbJGdldFswXV1bJGlkXSkpDQoJCQkJew0KCQkJCQkkYnVja2V0WyRnZXRbMF1dWyRpZF0gPSBhcnJheSgpOw0KCQkJCQkkYnVja2V0WyRnZXRbMF1dWyRpZF1bJ3F0eSddID0gMTsNCgkJCQkJJGJ1Y2tldFskZ2V0WzBdXVskaWRdWydldmVudCddID0gKGludCkgJGdldFsxXTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGJ1Y2tldFskZ2V0WzBdXVskaWRdWydxdHknXSsrOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkYnVja2V0Ow0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqICBDaGVjayBpZiB0aGUgcXR5IGlzIHN0aWxsIGF2YWlsYWJsZQ0KCSovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhY3RpdmVDYXJ0UXR5KCRrZXlJRCkNCgl7DQoJCS8vIGFsd2F5cyBjaGVjayBmb3IgcHVibGljIGtleQ0KCQkkcHVibGljID0gc2VsZjo6Z2V0KCdwdWJsaWNLZWVZJywgbnVsbCk7DQoJCS8vIGdldCB1c2VyIG9iamVjdA0KCQkkdXNlcklzID0gc2VsZjo6dXNlcklzKG51bGwsIHRydWUpOw0KCQkvLyBub3cgY2hlY2sgdGhlIGlkIGFnYWluc3QgdGhlIHJlZ2lzdGVyZWQgdmFsdWVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgnYS5pZCcpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcmVnaXN0ZXInLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5rZXkgPSAnIC4gJGRiLT5xdW90ZSgka2V5SUQpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5zdGF0dXMgPSAxJyk7DQoJCWlmICgkdXNlcklzWydpcyddID09IDEgJiYgJHVzZXJJc1snaWQnXSA+IDApDQoJCXsNCgkJCWlmICgkcHVibGljKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykgLiAnIE9SIGEucmVnaXN0ZXJlZF91c2VyID0gJy4gKGludCkgJHVzZXJJc1snaWQnXSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYS5yZWdpc3RlcmVkX3VzZXIgPSAnLiAoaW50KSAkdXNlcklzWydpZCddKTsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCRwdWJsaWMpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcmV0dXJuIDA7DQoJCX0NCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJLy8gcmV0dXJuIHRoZSBudW1iZXIgb2YgY2FydCBpdGVtcw0KCQlyZXR1cm4gKGludCkgJGRiLT5nZXROdW1Sb3dzKCk7DQoJfQ0KDQoJLyoqDQoJKiAgQ2hlY2sgaWYgdGhlIHF0eSBpcyBzdGlsbCBhdmFpbGFibGUNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UXR5QXZhaWxhYmxlKCRxdHksICR0eXBlLCAka2V5SUQpDQoJew0KCQlpZiAoKCd2YXJpYXRpb24nID09PSAkdHlwZSB8fCAnZXZlbnQnID09PSAkdHlwZSkgJiYgKChpc19udW1lcmljKCRxdHkpICYmICRxdHkgPiAwKSB8fCAndGFrZW4nID09PSAkcXR5KSkNCgkJew0KCQkJLy8gbm93IGNoZWNrIHRoZSBpZCBhZ2FpbnN0IHRoZSByZWdpc3RlcmVkIHZhbHVlcw0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9yZWdpc3RlcicsICdhJykpOw0KCQkJaWYgKCd2YXJpYXRpb24nID09PSAkdHlwZSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCdhLmtleSA9ICcgLiAkZGItPnF1b3RlKCRrZXlJRCkpOw0KCQkJfQ0KCQkJZWxzZWlmICgnZXZlbnQnID09PSAkdHlwZSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCdhLmV2ZW50ID0gJyAuIChpbnQpICRrZXlJRCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcmV0dXJuICRxdHk7DQoJCQl9DQoJCQkkcXVlcnktPndoZXJlKCdhLnN0YXR1cyA+PSAxJyk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCSRyZWdpc3RlcmVkID0gJGRiLT5nZXROdW1Sb3dzKCk7DQoJCQlpZiAoJ3Rha2VuJyA9PT0gJHF0eSkNCgkJCXsNCgkJCQlyZXR1cm4gJHJlZ2lzdGVyZWQ7DQoJCQl9DQoJCQlpZiAoJHJlZ2lzdGVyZWQgPj0gJHF0eSkNCgkJCXsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCXJldHVybiBiY3N1YigkcXR5LCAkcmVnaXN0ZXJlZCk7DQoJCX0NCgkJcmV0dXJuICRxdHk7DQoJfQ0KDQoJLyoqDQoJKiBAIHJldHVybiBmbG9hdCBvbiBzdWNjZXNzDQoJKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldENvbmNlcHRQcmljZSgka2V5KQ0KCXsNCgkJLy8gZmlyc3Qgd2UgZ2V0IHRoZSByYXcgc2V0IHByaWNlIChpbiBvcmdhbml6ZXJzIGN1cnJlbmN5KQ0KCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5jb3N0WydwcmljZSddWyRrZXldKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ3ByaWNlJ11bJGtleV0pKQ0KCQl7DQoJCQkkb3JnUmF3ID0gc2VsZjo6JGZpbHRlcklucHV0LT5jbGVhbihzZWxmOjokZXZlbnQtPmNvc3RbJ3ByaWNlJ11bJGtleV0pOw0KCQkJaWYgKCFTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkb3JnUmF3KSkNCgkJCXsNCgkJCQkkb3JnUmF3ID0gIjAuMDAiOw0KCQkJfQ0KCQkJLy8gZ2V0IG9yZ2FuaXplciBjdXJyZW5jeQ0KCQkJaWYgKCRvcmdDdXJyZW5jeSA9IHNlbGY6OmdldEV2ZW50Q3VycmVuY3koKSkNCgkJCXsNCgkJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBhY3RpdmUgcGFydHkgY3VycmVuY3kNCgkJCQkJJGFjdGl2ZUN1cnJlbmN5ID0gc2VsZjo6Z2V0KCdBQ1RJVkVfQ1VSUkVOQ1knKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGFjdGl2ZUN1cnJlbmN5ID0gJG9yZ0N1cnJlbmN5Ow0KCQkJCX0NCgkJCQkvLyBzZXQgYWN0aXZlIHByaWNlIG9iamVjdA0KCQkJCXJldHVybiBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJG9yZ0N1cnJlbmN5LCAkb3JnUmF3LCAkYWN0aXZlQ3VycmVuY3kpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcmV0dXJuIG1peGVkDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRDb25jZXB0c0hUTUwoKQ0KCXsNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0SFRNTCkpDQoJCXsNCgkJCSR0aGlzRXZlbnQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoc2VsZjo6JGNvbmNlcHRIVE1MIGFzICRldmVudF9jb25jZXB0X190aW1lID0+ICRIVE1MKQ0KCQkJew0KCQkJCSRsb29raW5nID0gZXhwbG9kZSgnXycsJGV2ZW50X2NvbmNlcHRfX3RpbWUpOw0KCQkJCWlmIChzZWxmOjokZXZlbnQtPmlkID09ICRsb29raW5nWzBdKQ0KCQkJCXsNCgkJCQkJJHRoaXNFdmVudFskZXZlbnRfY29uY2VwdF9fdGltZV0gPSAkSFRNTDsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXNFdmVudCkpDQoJCQl7DQoJCQkJcmV0dXJuICR0aGlzRXZlbnQ7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEByZXR1cm4gbWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50T3B0aW9ucygpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50T3B0aW9ucykpDQoJCXsNCgkJCSR0aGlzRXZlbnQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoc2VsZjo6JGV2ZW50T3B0aW9ucyBhcyAkZXZlbnRfY29uY2VwdF9fdGltZSA9PiAkb3B0aW9ucykNCgkJCXsNCgkJCQkkbG9va2luZyA9IGV4cGxvZGUoJ18nLCRldmVudF9jb25jZXB0X190aW1lKTsNCgkJCQlpZiAoc2VsZjo6JGV2ZW50LT5pZCA9PSAkbG9va2luZ1swXSkNCgkJCQl7DQoJCQkJCSR0aGlzRXZlbnRbJGV2ZW50X2NvbmNlcHRfX3RpbWVdID0gJG9wdGlvbnM7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0aGlzRXZlbnQpKQ0KCQkJew0KCQkJCXJldHVybiAkdGhpc0V2ZW50Ow0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGV2ZW50X2NvbmNlcHRfdGltZQ0KCSAqIEByZXR1cm4gbWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldENvbnNlcHRJZCgkZXZlbnRfY29uY2VwdF90aW1lKQ0KCXsNCgkJaWYgKGlzc2V0KHNlbGY6OiRjb25jZXB0c1skZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokY29uY2VwdHNbJGV2ZW50X2NvbmNlcHRfdGltZV07DQoJCX0NCgkJcmV0dXJuICRldmVudF9jb25jZXB0X3RpbWU7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRldmVudF9jb25jZXB0X3RpbWUNCgkgKiBAcmV0dXJuIGludHxtaXhlZA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0TG9jYXRpb24oJGV2ZW50X2NvbmNlcHRfdGltZSkNCgl7DQoJCWlmIChpc3NldChzZWxmOjokbG9jYXRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OiRsb2NhdGlvbnNbJGV2ZW50X2NvbmNlcHRfdGltZV07DQoJCX0NCgkJcmV0dXJuIDk5OTk7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRsb2NhdGlvbg0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50Q29uY2VwdFRpbWUoJGxvY2F0aW9uKQ0KCXsNCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+ZGF0ZVsnc3RhcnQnXVskbG9jYXRpb25dKSAmJiBpc3NldChzZWxmOjokZXZlbnQtPmRhdGVbJ2NvbmNlcHQnXVskbG9jYXRpb25dKSkNCgkJew0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+ZGF0ZVsnc3RhcnQnXVskbG9jYXRpb25dKSkNCgkJCXsNCgkJCQkkdGltZXN0YW1wID0gc3RydG90aW1lKHNlbGY6OiRldmVudC0+ZGF0ZVsnc3RhcnQnXVskbG9jYXRpb25dKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGltZXN0YW1wID0gMDsNCgkJCX0NCgkJCXJldHVybiBzZWxmOjokZXZlbnQtPmlkLidfJy5zZWxmOjokZXZlbnQtPmRhdGVbJ2NvbmNlcHQnXVskbG9jYXRpb25dLidfXycuJHRpbWVzdGFtcDsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXREYXRlcygpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+ZGF0ZVsnY29uY2VwdCddKSkNCgkJew0KCQkJJHR5cGVzID0gYXJyYXkoJ3N0YXJ0JywgJ2VuZCcpOw0KCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQnXSA9IHN0cnRvdGltZSgnMjMwMC0wMC0wMCcpOw0KCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnZW5kJ10gPSBzdHJ0b3RpbWUoJzAwMDAtMDAtMDAnKTsNCgkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXSA9IGFycmF5KCk7DQoJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydkYXRlcyddID0gYXJyYXkoKTsNCgkJCWZvcmVhY2goICR0eXBlcyBhcyAkdHlwZSkNCgkJCXsNCgkJCQlmb3JlYWNoIChzZWxmOjokZXZlbnQtPmRhdGVbJHR5cGVdIGFzICRuciA9PiAkZGF0ZSkNCgkJCQl7DQoJCQkJCSRkYXRlID0gc2VsZjo6JGZpbHRlcklucHV0LT5jbGVhbigkZGF0ZSk7DQoJCQkJCS8vIGdldCB0aGUga2V5DQoJCQkJCSRrZXkgPSBzZWxmOjpnZXRFdmVudENvbmNlcHRUaW1lKCRucik7DQoJCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZGF0ZSkpDQoJCQkJCXsNCgkJCQkJCSR0aW1lc3RhbXAgPSBzdHJ0b3RpbWUoJGRhdGUpOw0KCQkJCQkJaWYgKCgnc3RhcnQnID09ICR0eXBlKSAmJiBzZWxmOjokZXZlbnRCdWlsZGVyWyR0eXBlXSA+ICR0aW1lc3RhbXApDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclskdHlwZV0gPSAkdGltZXN0YW1wOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZWlmICgoJ2VuZCcgPT0gJHR5cGUpICYmIHNlbGY6OiRldmVudEJ1aWxkZXJbJHR5cGVdIDwgJHRpbWVzdGFtcCkNCgkJCQkJCXsNCgkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWyR0eXBlXSA9ICR0aW1lc3RhbXA7DQoJCQkJCQl9DQoJCQkJCQkvLyBzZXQgdGltZSBzdGFtcA0KCQkJCQkJaWYgKCFpc3NldChzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ11bJGtleV0pKQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXVska2V5XSA9IGFycmF5KCk7DQoJCQkJCQl9DQoJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ11bJGtleV1bJHR5cGVdID0gJHRpbWVzdGFtcDsNCgkJCQkJfQ0KCQkJCQkvLyBzZXQgZ2xvYmFsIGNvbmNlcHQga2V5cw0KCQkJCQlpZiAoJ3N0YXJ0JyA9PSAkdHlwZSkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGNvbmNlcHRzWyRrZXldID0gc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J11bJG5yXTsNCgkJCQkJCXNlbGY6OiRsb2NhdGlvbnNbJGtleV0gPSAkbnI7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB0aW1lIGFyZSBzZXQNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ10pKQ0KCQkJew0KCQkJCS8vIG5vdyBsb29wIHRoZSB0aW1lIHN0YW1wcw0KCQkJCWZvcmVhY2ggKHNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXSBhcyAkb24gPT4gJGRhdGVzKQ0KCQkJCXsNCgkJCQkJaWYgKGlzc2V0KCRkYXRlc1snc3RhcnQnXSkgJiYgaXNzZXQoJGRhdGVzWydlbmQnXSkpDQoJCQkJCXsNCgkJCQkJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXVskb25dKSkNCgkJCQkJCXsNCgkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydkYXRlcyddWyRvbl0gPSBhcnJheSgpOw0KCQkJCQkJfQ0KCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXVskb25dWydzdGFydCddID0gc2VsZjo6ZmFuY3lEYXRlKCRkYXRlc1snc3RhcnQnXSk7DQoJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydkYXRlcyddWyRvbl1bJ2VuZCddID0gc2VsZjo6ZmFuY3lEYXRlKCRkYXRlc1snZW5kJ10pOw0KCQkJCQkJaWYgKGRhdGUoJ1ltZCcsICRkYXRlc1snc3RhcnQnXSkgPT0gZGF0ZSgnWW1kJywgJGRhdGVzWydlbmQnXSkpDQoJCQkJCQl7DQoJCQkJCQkJLy8gc2FtZSBkYXkNCgkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydkYXRlcyddWyRvbl1bJ3N0YXJ0LWVuZCddID0gIAlzZWxmOjpmYW5jeVRpbWUoJGRhdGVzWydzdGFydCddKQ0KCQkJCQkJCQkuJyAnLlRleHQ6Ol8oJ3RvJykuJyAnLiBzZWxmOjpmYW5jeVRpbWUoJGRhdGVzWydlbmQnXSkNCgkJCQkJCQkJLicgJy5UZXh0OjpfKCdvbiB0aGUnKS4nICcuIHNlbGY6OmZhbmN5RGF0ZSgkZGF0ZXNbJ2VuZCddKTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkvLyBhbm90aGVyIGRheQ0KCQkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJG9uXVsnc3RhcnQtZW5kJ10gPSAgCXNlbGY6OmZhbmN5RGF0ZVRpbWUoJGRhdGVzWydzdGFydCddKQ0KCQkJCQkJCQkuJyAnLlRleHQ6Ol8oJ3RvJykuJyAnLiBzZWxmOjpmYW5jeURhdGVUaW1lKCRkYXRlc1snZW5kJ10pOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIHNldCB0aGUgZXZlbnQgc3RhcnQgYW5kIGVuZCBkYXRlDQoJCQkJaWYgKGRhdGUoJ1ltZCcsIHNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0J10pID09IGRhdGUoJ1ltZCcsIHNlbGY6OiRldmVudEJ1aWxkZXJbJ2VuZCddKSkNCgkJCQl7DQoJCQkJCS8vIG9uZSBkYXkgZXZlbnQNCgkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10gPSBzZWxmOjpmYW5jeURhdGUoc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQnXSk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoZGF0ZSgnWW0nLCBzZWxmOjokZXZlbnRCdWlsZGVyWydzdGFydCddKSA9PSBkYXRlKCdZbScsIHNlbGY6OiRldmVudEJ1aWxkZXJbJ2VuZCddKSkNCgkJCQl7DQoJCQkJCS8vICBtdWx0aSBkYXkgZXZlbnQgaW4gc2FtZSBtb250aA0KCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydzdGFydC1lbmQnXSA9ICBkYXRlKCdqUycsIHNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0J10pLicgLSAnLiBzZWxmOjpmYW5jeURhdGUoc2VsZjo6JGV2ZW50QnVpbGRlclsnZW5kJ10pOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkvLyBtdWx0aSBkYXkgZXZlbnQNCgkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10gPSBzZWxmOjpmYW5jeURhdGUoc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQnXSkuJyAtICcuIHNlbGY6OmZhbmN5RGF0ZShzZWxmOjokZXZlbnRCdWlsZGVyWydlbmQnXSk7DQoJCQkJfQ0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGlkDQoJICogQHBhcmFtICR0eXBlDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRBbGxWYWx1ZXMoJGlkLCAkdHlwZSwgJGVuY3J5cHRlZE5hbWVzID0gYXJyYXkoKSkNCgl7DQoJCS8vIG5vdyBsb2FkIGFsbCBjdXN0b20gdmFsdWVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgnYS4qJykpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0eXBlLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5pZCA9ICcgLiAoaW50KSAkaWQpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA+PSAxJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJHJlc3VsdCA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRlbmNyeXB0ZWROYW1lcykpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGVuY3J5cHRlZE5hbWVzIGFzICRlbmNyeXB0ZWQpDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJHJlc3VsdC0+JGVuY3J5cHRlZCkgJiYgIWVtcHR5KCRyZXN1bHQtPiRlbmNyeXB0ZWQpKQ0KCQkJCQl7DQoJCQkJCQkkcmVzdWx0LT4kZW5jcnlwdGVkID0gc2VsZjo6ZGVjcnlwdFN0cmluZygkcmVzdWx0LT4kZW5jcnlwdGVkKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkcmVzdWx0Ow0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGRlY3J5cHRTdHJpbmcoJHZhbHVlKQ0KCXsNCgkJaWYgKHNlbGY6OiRiYXNpY2tleSAmJiAhaXNfbnVtZXJpYygkdmFsdWUpICYmICR2YWx1ZSA9PT0gYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCR2YWx1ZSwgdHJ1ZSkpKQ0KCQl7DQoJCQkvLyBkZWNyeXB0ICB2YWx1ZQ0KCQkJJHZhbHVlPSBydHJpbShzZWxmOjokbG9ja2VyLT5kZWNyeXB0U3RyaW5nKCR2YWx1ZSksICJcMCIpOw0KCQl9DQoJCXJldHVybiAkdmFsdWU7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRpZHMNCgkgKiBAcGFyYW0gJHR5cGUNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5hbWVzKCRpZHMsICR0eXBlKQ0KCXsNCgkJLy8gc2V0dXAgdGhlIGdldCBhcnJheQ0KCQkkZ2V0ID0gYXJyYXkoJ2EuaWQnKTsNCgkJc3dpdGNoKCR0eXBlKQ0KCQl7DQoJCQljYXNlICd2ZW51ZSc6DQoJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJJGdldFtdID0gJ2EubmFtZSc7DQoJCQkJJHRhYmxlID0gJyNfX1tbW2NvbXBvbmVudF1dXV92ZW51ZSc7DQoJCQlicmVhazsNCgkJCWNhc2UgJ2NhdGlkJzoNCgkJCQkvLyBzZXQgcmVsYXRlZCB2YWx1ZXMNCgkJCQkkZ2V0W10gPSAnYS50aXRsZSc7DQoJCQkJJHRhYmxlID0gJyNfX2NhdGVnb3JpZXMnOw0KCQkJYnJlYWs7DQoJCQljYXNlICdvcmdhbml6ZXInOg0KCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCSRnZXRbXSA9ICdhLmNvbXBhbnluYW1lJzsNCgkJCQkkZ2V0W10gPSAnYS51c2VyJzsNCgkJCQkkdGFibGUgPSAnI19fW1tbY29tcG9uZW50XV1dX29yZ2FuaXplcic7DQoJCQlicmVhazsJCQkJDQoJCX0NCgkJaWYgKCFpc3NldCgkdGFibGUpIHx8ICFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCgkJLy8gY2hlY2sgdGhlIGFycmF5IG9mIGlkcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGlkcykpDQoJCXsNCgkJCWZvcmVhY2ggKCRpZHMgYXMgJGlkKQ0KCQkJeyANCgkJCQlpZiAoIShpc19udW1lcmljKCRpZCkpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIG51bGw7DQoJCQkJfSANCgkJCX0NCgkJfQ0KCQkvLyBub3cgbG9hZCBhbGwgY3VzdG9tIHZhbHVlcw0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJGdldCkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJHRhYmxlLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5pZCBJTiAoJyAuIGltcGxvZGUoJywgJywgJGlkcykgLiAnKScpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkaXRlbXMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkNCgkJCXsNCgkJCQlzd2l0Y2goJHR5cGUpDQoJCQkJew0KCQkJCQljYXNlICd2ZW51ZSc6DQoJCQkJCQkvLyBzZXQgcmVsYXRlZCB2YWx1ZXMNCgkJCQkJCSRidWNrZXRbJGl0ZW0tPmlkXSA9ICRpdGVtLT5uYW1lOw0KCQkJCQlicmVhazsNCgkJCQkJY2FzZSAnY2F0aWQnOg0KCQkJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJCQkkYnVja2V0WyRpdGVtLT5pZF0gPSAkaXRlbS0+dGl0bGU7DQoJCQkJCWJyZWFrOw0KCQkJCQljYXNlICdvcmdhbml6ZXInOg0KCQkJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPmNvbXBhbnluYW1lKSkNCgkJCQkJCXsNCgkJCQkJCQkkbmFtZSA9ICRpdGVtLT5jb21wYW55bmFtZTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkkbmFtZSA9IEZhY3Rvcnk6OmdldFVzZXIoJGl0ZW0tPnVzZXIpLT5uYW1lOw0KCQkJCQkJfQ0KCQkJCQkJJGJ1Y2tldFskaXRlbS0+aWRdID0gJG5hbWU7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkYnVja2V0Ow0KCQl9DQoJCXJldHVybiBudWxsOw0KCX0NCltDVVNUT01DT0RFPWltYWdlSGVscGVyc10gDQpbQ1VTVE9NQ09ERT1iYXNlU2l4dHlGb3VyVVJMXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCglwcm90ZWN0ZWQgc3RhdGljICRwbGFjZUhvbGRlcnM7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQbGFjZUhvbGRlcnMoJHR5cGUsICRpZCA9IG51bGwsICRyZWdpc3RlcmVkID0gbnVsbCwgJGNvbmZpZyA9IGFycmF5KCkpDQoJew0KCQlpZiAoJ2ludm9pY2UnID09PSAkdHlwZSkNCgkJew0KCQkJLy8gc2V0IHRvIGdsb2JhbCBpZiBub3QgZ2l2ZW4NCgkJCWlmICghJGlkICYmIHNlbGY6OiRvcmdhbml6ZXIpDQoJCQl7DQoJCQkJJGlkID0gc2VsZjo6JG9yZ2FuaXplcjsNCgkJCX0NCgkJCS8vIHNldCB0byBnbG9iYWwgaWYgbm90IGdpdmVuDQoJCQlpZiAoISRyZWdpc3RlcmVkICYmIHNlbGY6OiRyZWdpc3RlcmVkKQ0KCQkJew0KCQkJCSRyZWdpc3RlcmVkID0gc2VsZjo6JHJlZ2lzdGVyZWQ7DQoJCQl9DQoJCQlpZiAoJG9yZ2FuaXplciAmJiAkcmVnaXN0ZXJlZCkNCgkJCXsNCgkJCQkvLyBnZXQgbmVlZGVkIGRldGFpbHMNCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZC4nXycuJHJlZ2lzdGVyZWRdKSkNCgkJCQl7DQoJCQkJCSRkZXRhaWxzID0gYXJyYXkoKTsNCgkJCQkJJGRldGFpbHNbXSA9IHNlbGY6OmdldE9yZ2FuaXplckRldGFpbHMoKGludCkgJGlkKTsNCgkJCQkJJGRldGFpbHNbXSA9IHNlbGY6OmdldFJlZ2lzdGVyZWREZXRhaWxzKChpbnQpICRyZWdpc3RlcmVkKTsNCgkJCQkJc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkLidfJy4kcmVnaXN0ZXJlZF0gPSBzZWxmOjptZXJnZUFycmF5cygkZGV0YWlscyk7DQoJCQkJfQ0KCQkJCS8vIGFkZCB0aGUgY29uZmlnIGFycmF5IGlmIG5lZWRlZA0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29uZmlnKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZC4nXycuJHJlZ2lzdGVyZWRdID0gc2VsZjo6bWVyZ2VBcnJheXMoYXJyYXkoc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkLidfJy4kcmVnaXN0ZXJlZF0sICRjb25maWcpKTsNCgkJCQl9DQoJCQkJcmV0dXJuIHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZC4nXycuJHJlZ2lzdGVyZWRdOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2VpZiAoISRpZCAmJiAoJ29yZ2FuaXplcicgPT09ICR0eXBlIHx8ICd2ZW51ZScgPT09ICR0eXBlKSkNCgkJew0KCQkJcmV0dXJuIGFycmF5X3ZhbHVlcyhzZWxmOjpnZXRTZWxlY3Rpb24oJHR5cGUsICdbJy4kdHlwZS4nXycsICddJykpOw0KCQl9DQoJCWVsc2VpZiAoJ3ZlbnVlJyA9PT0gJHR5cGUgJiYgJGlkID4gMCkNCgkJew0KCQkJDQoJCX0NCgkJZWxzZWlmICgnb3JnYW5pemVyJyA9PT0gJHR5cGUgJiYgJGlkID4gMCkNCgkJew0KCQkJLy8gZ2V0IG5lZWRlZCBkZXRhaWxzDQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZF0pKQ0KCQkJew0KCQkJCS8vIGxvYWQgdGhlIG9yZ2FuaXplcg0KCQkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZF0gPSBzZWxmOjpnZXRPcmdhbml6ZXJEZXRhaWxzKChpbnQpICRpZCk7DQoJCQl9DQoNCgkJCS8vIGFkZCB0aGUgY29uZmlnIGFycmF5IGlmIG5lZWRlZA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb25maWcpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZF0gPSBzZWxmOjptZXJnZUFycmF5cyhhcnJheShzZWxmOjokcGxhY2VIb2xkZXJzWyR0eXBlLidfJy4kaWRdLCAkY29uZmlnKSk7DQoJCQl9DQoNCgkJCS8vIGlmIGxvYWRlZCByZXR1cm4NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGxhY2VIb2xkZXJzWyR0eXBlLidfJy4kaWRdKSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkXTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBSZXR1cm4gYXJyYXkgb2Ygc2VsZWN0aW9ucw0KCSogDQoJKiBAcmV0dXJuICAgIGFycmF5IGlmIHR5cGUgbWF0Y2gNCgkqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0eXBlLCAkZiwgJGIpDQoJew0KCQlpZiAoJ29yZ2FuaXplcicgPT09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsCQ0KCQkJCSdhLnVzZXInID0+ICRmLid1c2VyX2lkJy4kYiwNCgkJCQknYS5tb2JpbGVfcGhvbmUnID0+ICRmLidtb2JpbGVfcGhvbmUnLiRiLA0KCQkJCSdhLmNvbXBhbnluYW1lJyA9PiAkZi4nY29tcGFueW5hbWUnLiRiLA0KCQkJCSdhLnB1YmxpY251bWJlcicgPT4gJGYuJ3B1YmxpY251bWJlcicuJGIsDQoJCQkJJ2EuY3VycmVuY3knID0+ICRmLidjdXJyZW5jeScuJGIsDQoJCQkJJ2Euc3RyZWV0JyA9PiAkZi4nc3RyZWV0Jy4kYiwNCgkJCQknYS5wb3N0YWwnID0+ICRmLidwb3N0YWwnLiRiLA0KCQkJCSdhLmNpdHknID0+ICRmLidjaXR5Jy4kYiwNCgkJCQknYS5yZWdpb24nID0+ICRmLidyZWdpb24nLiRiLA0KCQkJCSdhLmNvdW50cnknID0+ICRmLidjb3VudHJ5Jy4kYiwNCgkJCQknYS5wb3N0YWxjb2RlJyA9PiAkZi4ncG9zdGFsY29kZScuJGIsDQoJCQkJJ2Eud2Vic2l0ZScgPT4gJGYuJ3dlYnNpdGUnLiRiLA0KCQkJCSdhJyA9PiAkZi4nd2Vic2l0ZV9saW5rJy4kYiwNCgkJCQknYS5sb2dvX2ltYWdlJyA9PiAkZi4nbG9nbycuJGIsDQoJCQkJJ2InID0+ICRmLidsb2dvX3VybCcuJGIsDQoJCQkJJ2EucHJlZml4JyA9PiAkZi4ncHJlZml4Jy4kYiwNCgkJCQknYS50YXhfY29tcG91bmQnID0+ICRmLid0YXhfY29tcG91bmQnLiRiLA0KCQkJCSdhLnRheGVkJyA9PiAkZi4ndGF4ZWQnLiRiLA0KCQkJCSdhLnRheF90eXBlJyA9PiAkZi4ndGF4X3R5cGUnLiRiLA0KCQkJCSdhLmRvY19mb290ZXInID0+ICRmLidkb2NfZm9vdGVyJy4kYiwNCgkJCQknYS5kb2NfaGVhZGVyJyA9PiAkZi4nZG9jX2hlYWRlcicuJGIsDQoJCQkJJ2IubmFtZScgPT4gJGYuJ25hbWUnLiRiLA0KCQkJCSdjJyA9PiAkZi4nX25hbWUnLiRiLA0KCQkJCSdiLnVzZXJuYW1lJyA9PiAkZi4ndXNlcm5hbWUnLiRiLA0KCQkJCSdiLmVtYWlsJyA9PiAkZi4nZW1haWwnLiRiLA0KCQkJCSdjLm5hbWUnID0+ICRmLidyZWdpb25fbmFtZScuJGIsDQoJCQkJJ2QubmFtZScgPT4gJGYuJ2NvdW50cnlfbmFtZScuJGINCgkJCSk7DQoJCX0NCgkJaWYgKCd2ZW51ZScgPT09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsCQ0KCQkJCSdhLnVzZXInID0+ICRmLid1c2VyX2lkJy4kYiwNCgkJCQknYS5tb2JpbGVfcGhvbmUnID0+ICRmLidtb2JpbGVfcGhvbmUnLiRiLA0KCQkJCSdhLmNvbXBhbnluYW1lJyA9PiAkZi4nY29tcGFueW5hbWUnLiRiLA0KCQkJCSdhLnB1YmxpY251bWJlcicgPT4gJGYuJ3B1YmxpY251bWJlcicuJGIsDQoJCQkJJ2EuY3VycmVuY3knID0+ICRmLidjdXJyZW5jeScuJGIsDQoJCQkJJ2Euc3RyZWV0JyA9PiAkZi4nc3RyZWV0Jy4kYiwNCgkJCQknYS5wb3N0YWwnID0+ICRmLidwb3N0YWwnLiRiLA0KCQkJCSdhLmNpdHknID0+ICRmLidjaXR5Jy4kYiwNCgkJCQknYS5yZWdpb24nID0+ICRmLidyZWdpb24nLiRiLA0KCQkJCSdhLmNvdW50cnknID0+ICRmLidjb3VudHJ5Jy4kYiwNCgkJCQknYS5wb3N0YWxjb2RlJyA9PiAkZi4ncG9zdGFsY29kZScuJGIsDQoJCQkJJ2Eud2Vic2l0ZScgPT4gJGYuJ3dlYnNpdGUnLiRiLA0KCQkJCSdhLnByZWZpeCcgPT4gJGYuJ3ByZWZpeCcuJGIsDQoJCQkJJ2EudGF4X2NvbXBvdW5kJyA9PiAkZi4ndGF4X2NvbXBvdW5kJy4kYiwNCgkJCQknYS50YXhlZCcgPT4gJGYuJ3RheGVkJy4kYiwNCgkJCQknYS50YXhfdHlwZScgPT4gJGYuJ3RheF90eXBlJy4kYiwNCgkJCQknYS5kb2NfZm9vdGVyJyA9PiAkZi4nZG9jX2Zvb3RlcicuJGIsDQoJCQkJJ2EuZG9jX2hlYWRlcicgPT4gJGYuJ2RvY19oZWFkZXInLiRiLA0KCQkJCSdiLm5hbWUnID0+ICRmLiduYW1lJy4kYiwNCgkJCQknYi51c2VybmFtZScgPT4gJGYuJ3VzZXJuYW1lJy4kYiwNCgkJCQknYi5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYiwNCgkJCQknYy5uYW1lJyA9PiAkZi4ncmVnaW9uX25hbWUnLiRiDQoJCQkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyAkaXRlbU9yZ2FuaXplciA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEl0ZW1Pcmdhbml6ZXIoJiRpdGVtLCAkdHlwZSwgJGtleSA9ICdpZCcsICRkZWZhdWx0ID0gbnVsbCkNCgl7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkaXRlbSkgJiYgaXNzZXQoJGl0ZW0tPiRrZXkpICYmIChpbnQpICRpdGVtLT4ka2V5ID4gMCkNCgkJew0KCQkJLy8gY2hlY2sgaWYgYWxyZWFkeSBzZXQNCgkJCWlmICghaXNzZXQoc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRJdGVtT3JnYW5pemVyKCRpdGVtLCAkdHlwZSwgJGtleSk7DQoJCQl9DQoJCQlpZiAoaXNzZXQoc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldKSAmJiBzZWxmOjokaXRlbU9yZ2FuaXplclskdHlwZS4kaXRlbS0+JGtleV0pDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiRpdGVtT3JnYW5pemVyWyR0eXBlLiRpdGVtLT4ka2V5XTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGRlZmF1bHQ7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0SXRlbU9yZ2FuaXplcigmJGl0ZW0sICR0eXBlLCAka2V5KQ0KCXsNCgkJLy8gZ2V0IG9yZ2FuaXplciBpZCBmb3IgdmFyaW91cyB0eXBlcyBvZiBpdGVtcw0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgJ3RyYW5zYWN0aW9uJzoNCgkJCQlpZiAoaXNzZXQoJGl0ZW0tPmludm9pY2UpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldID0gc2VsZjo6Z2V0VmFyKCdpbnZvaWNlJywgJGl0ZW0tPmludm9pY2UsICdpZCcsICdvcmdhbml6ZXInKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJG9yZ2FuaXplckRldGFpbHMgPSBhcnJheSgpOw0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRPcmdhbml6ZXJWYWx1ZSgkaWQsICRmaWVsZCwgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJaWYgKCRpZCA+IDAgKQ0KCQl7DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldE9yZ2FuaXplckRldGFpbHMoJGlkKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZmllbGQgaWYgc2V0DQoJCQkkZmllbGQgPSAnW29yZ2FuaXplcl8nLiRmaWVsZC4nXSc7DQoJCQlpZiAoaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXSkgJiYgaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZmllbGRdKSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZmllbGRdOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkZGVmYXVsdDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE9yZ2FuaXplckRldGFpbHMoJGlkKQ0KCXsNCgkJaWYgKCRpZCA+IDApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXSkpDQoJCQl7DQoJCQkJc2VsZjo6c2V0T3JnYW5pemVyRGV0YWlscygkaWQpOw0KCQkJfQ0KCQkJcmV0dXJuIHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0T3JnYW5pemVyRGV0YWlscygkaWQsICRtZXRob2QgPSAncGxhY2Vob2xkZXInKQ0KCXsNCgkJJGYgPSAnJzsNCgkJJGIgPSAnJzsNCgkJaWYgKCdwbGFjZWhvbGRlcicgPT09ICRtZXRob2QpDQoJCXsNCgkJCSRmID0gJ1tvcmdhbml6ZXJfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkkc2VsZWN0aW9uID0gc2VsZjo6Z2V0U2VsZWN0aW9uKCdvcmdhbml6ZXInLCAkZiwgJGIpOw0KCQkvLyByZW1vdmUgc29tZSB0aGF0IGFyZSBzZXQgZHluYW1pY2FsbHkNCgkJdW5zZXQoJHNlbGVjdGlvblsnYSddKTsNCgkJdW5zZXQoJHNlbGVjdGlvblsnYiddKTsNCgkJdW5zZXQoJHNlbGVjdGlvblsnYyddKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXlfa2V5cygkc2VsZWN0aW9uKSwgYXJyYXlfdmFsdWVzKCRzZWxlY3Rpb24pKSk7DQoNCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX29yZ2FuaXplciB0YWJsZQkJCQkNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fb3JnYW5pemVyJywgJ2EnKSk7CQkJCQ0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX3VzZXJzJywgJ2InKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EudXNlcicpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnYi5pZCcpIC4gJyknKTsNCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcmVnaW9uJywgJ2MnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EucmVnaW9uJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdjLmlkJykgLiAnKScpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5JywgJ2QnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuY291bnRyeScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnZC5pZCcpIC4gJyknKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcuIChpbnQpICRpZCk7DQoJCS8vIGxvYWQgdGhlIHF1ZXJ5DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXSA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCQkvLyBsb2FkIHRoZSBuYW1lDQoJCQlpZiAoaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nY29tcGFueW5hbWUnLiRiXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nY29tcGFueW5hbWUnLiRiXSkpDQoJCQl7DQoJCQkJJG5hbWUgPSBzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLidjb21wYW55bmFtZScuJGJdOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRuYW1lID0gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nbmFtZScuJGJdOw0KCQkJfQ0KCQkJc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nX25hbWUnLiRiXSA9ICRuYW1lOw0KCQkJLy8gc2V0IHdlYnNpdGUgbGluaw0KCQkJJGxpbmsgPSAnJzsNCgkJCWlmIChpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLid3ZWJzaXRlJy4kYl0pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ3dlYnNpdGUnLiRiXSkpIA0KCQkJew0KCQkJCS8vIHNldCBsaW5rDQoJCQkJaWYgKHN0cnBvcyhzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLid3ZWJzaXRlJy4kYl0sICdodHRwOi8vJykgIT09IGZhbHNlIHx8IHN0cnBvcyhzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLid3ZWJzaXRlJy4kYl0sICdodHRwczovLycpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRsaW5rID0gJzxhIGhyZWY9Iicuc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nd2Vic2l0ZScuJGJdLiciPicgLiAkbmFtZSAuICc8L2E+JzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGxpbmsgPSAnPGEgaHJlZj0iaHR0cDovLycuc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nd2Vic2l0ZScuJGJdLiciPicgLiAkbmFtZSAuICc8L2E+JzsNCgkJCQl9DQoJCQl9DQoJCQlzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLid3ZWJzaXRlX2xpbmsnLiRiXSA9ICRsaW5rOw0KDQoJCQkvLyBzZXQgbG9nbyBpbWFnZQ0KCQkJJGxvZ29Gb3VuZCA9ICcnOw0KCQkJJGxvZ29VcmwgPSAnJzsNCgkJCWlmIChpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLidsb2dvJy4kYl0pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ2xvZ28nLiRiXSkpIA0KCQkJew0KCQkJCS8vIEdldCB0aGUgYmFzaWMgZW5jcnlwdGlvbi4NCgkJCQlzZWxmOjokYmFzaWNrZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnYmFzaWMnKTsNCgkJCQkkbG9nbyA9IHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ2xvZ28nLiRiXTsNCgkJCQlpZiAoc2VsZjo6JGJhc2lja2V5KQ0KCQkJCXsNCgkJCQkJLy8gR2V0IHRoZSBlbmNyeXB0aW9uIG9iamVjdC4NCgkJCQkJc2VsZjo6JGxvY2tlciA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKHNlbGY6OiRiYXNpY2tleSwgMTI4KTsNCgkJCQkJJGxvZ28gPSBzZWxmOjpkZWNyeXB0U3RyaW5nKCRsb2dvKTsNCgkJCQl9DQoJCQkJaWYgKHN0cnBvcygkbG9nbywgJ18nKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsICRsb2dvKTsNCgkJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCQl7DQoJCQkJCQkkbG9nb1VybCA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldFBhdGgoJ3VybCcpLiRsb2dvLicuJy4kZXh0ZW50aW9uWzJdOw0KCQkJCQkJJGxvZ29Gb3VuZCA9ICc8aW1nIGNsYXNzPSJ1ay10aHVtYm5haWwiIHNyYz0iJy4kbG9nb1VybC4nIiBhbHQ9IicuJG5hbWUuJyI+JzsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIG5vdyBhZGQgdGhlIGxvZ28NCgkJCXNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ2xvZ28nLiRiXSA9ICRsb2dvRm91bmQ7DQoJCQlzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLidsb2dvX3VybCcuJGJdID0gJGxvZ29Vcmw7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdID0gZmFsc2U7DQoJCX0NCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRyZWdVc2VycyA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlZ1VzZXJWYWx1ZSgkaWQsICRmaWVsZCwgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJaWYgKCRpZCA+IDAgKQ0KCQl7DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRSZWdVc2VyVmFsdWUoJGlkKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZmllbGQgaWYgc2V0DQoJCQkkZmllbGQgPSAnW3JlZ2lzdGVyZWRfJy4kZmllbGQuJ10nOw0KCQkJaWYgKGlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdKSAmJiBpc3NldChzZWxmOjokcmVnVXNlcnNbJGlkXVskZmllbGRdKSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGZpZWxkXTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGRlZmF1bHQ7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSZWdpc3RlcmVkRGV0YWlscygkaWQpDQoJew0KCQlpZiAoJGlkID4gMCkNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokcmVnVXNlcnNbJGlkXSkpDQoJCQl7DQoJCQkJc2VsZjo6c2V0UmVnVXNlclZhbHVlKCRpZCk7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JHJlZ1VzZXJzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFJlZ1VzZXJWYWx1ZSgkaWQsICRtZXRob2QgPSAncGxhY2Vob2xkZXInKQ0KCXsNCgkJJGYgPSAnJzsNCgkJJGIgPSAnJzsNCgkJaWYgKCdwbGFjZWhvbGRlcicgPT09ICRtZXRob2QpDQoJCXsNCgkJCSRmID0gJ1tyZWdpc3RlcmVkXyc7DQoJCQkkYiA9ICddJzsNCgkJfQ0KCQkvLyBmaXJzdCBnZXQgdGhlIHVzZXINCgkJJHVzZXJJZCA9IHNlbGY6OmdldFZhcigncmVnaXN0ZXJlZF91c2VyJywgJGlkLCAnaWQnLCAndXNlcicpOw0KCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCS8vIG5vdyBsb2FkIGFsbCBjdXN0b20gdmFsdWVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCWFycmF5KCdhLm5hbWUnLCdhLnZhbHVlJyksDQoJCQlhcnJheSgnbmFtZScsJ3ZhbHVlJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19yZWdpc3RyeV9jdXN0b21fdmFsdWUnLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5yZWdpc3RlcmVkX3VzZXIgPSAnIC4gKGludCkgJGlkKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5wdWJsaXNoZWQgPj0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCSRjdXN0b21WYWx1ZXMgPSAkZGItPmxvYWRBc3NvY0xpc3QoJ25hbWUnLCAndmFsdWUnKTsNCgkJCS8vIHBvc3NpYmxlIGtleXMNCgkJCSRzZWFyY2ggPSBhcnJheSgNCgkJCQknY291bnRyeScgDQoJCQkJCT0+IGFycmF5KCdjb3VudHJ5JywgJ2NvdW50cnlfb25lJywgJ2NvdW50cnlfMScsICdjb3VudHJ5MScsICdjb3VudHJ5b25lJywgJ2NvdW50cnlfJyksIA0KCQkJCSdjdXJyZW5jeScgDQoJCQkJCT0+IGFycmF5KCdjdXJyZW5jeScsICdjdXJyZW5jeV9vbmUnLCAnY3VycmVuY3lfMScsICdjdXJyZW5jeTEnLCAnY3VycmVuY3lvbmUnLCAnY3VycmVuY3lfJyksIA0KCQkJCSdyZWdpb24nIA0KCQkJCQk9PiBhcnJheSgncmVnaW9uJywgJ3JlZ2lvbl9vbmUnLCAncmVnaW9uXzEnLCAncmVnaW9uMScsICdyZWdpb25vbmUnLCAncmVnaW9uXycpDQoJCQkJKTsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRjdXN0b21WYWx1ZXMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQl7DQoJCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJGtleS4kYl0gPSAkdmFsdWU7DQoJCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR2YWx1ZSkgJiYgIWlzX251bWVyaWMoJHZhbHVlKSkNCgkJCQl7DQoJCQkJCSRmb3VuZCA9IGZhbHNlOw0KCQkJCQkkbmV3VmFsdWUgPSAnJzsNCgkJCQkJZm9yZWFjaCAoJHNlYXJjaCBhcyAkY29kZSA9PiAka2V5cykNCgkJCQkJew0KCQkJCQkJaWYgKCEkZm91bmQpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCgka2V5cyBhcyAka2VfeSkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICghJGZvdW5kICYmICRrZV95ID09PSBzdHJ0b2xvd2VyKCRrZXkpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlpZiAoJG5ld1ZhbHVlID0gc2VsZjo6Z2V0VmFyKCRjb2RlLCAkdmFsdWUsICduYW1lJywgJ2lkJykpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJLy8gaW5zdXJlIHdlIHVzZSB0aGUgY29ycmVjdCBrZXkNCgkJCQkJCQkJCQkka2V5ID0gJGNvZGU7DQoJCQkJCQkJCQkJLy8gc3RvcCBzZWFyY2ggZm9yIHRoaXMgZmllbGQNCgkJCQkJCQkJCQkkZm91bmQgPSB0cnVlOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIGFkZCBhbHNvIGlmIGZvdW5kDQoJCQkJCWlmICgkZm91bmQpDQoJCQkJCXsNCgkJCQkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLiRrZXkuJGJdID0gKGludCkgJG5ld1ZhbHVlOw0KCQkJCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJGtleS4nX25hbWUnLiRiXSA9ICR2YWx1ZTsNCgkJCQkJCWlmICgnY291bnRyeScgPT09ICRrZXkgfHwgJ2N1cnJlbmN5JyA9PT0gJGtleSkNCgkJCQkJCXsNCgkJCQkJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVskZi4ka2V5LidfY29kZXRocmVlJy4kYl0gPSBzZWxmOjpnZXRWYXIoJGtleSwgKGludCkgJG5ld1ZhbHVlLCAnaWQnLCAnY29kZXRocmVlJyk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gaWYgbm8gY3VycmVuY3kgd2FzIGZvdW5kIGJ1dCBjb3VudHJ5LCB0aGVuIHNldCB0aGUgY3VycmVuY3kgdG8gdGhhdCBvZiB0aGUgY291bnRyeQ0KCQlpZiAoIWlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLidjdXJyZW5jeV9uYW1lJy4kYl0pICYmIGlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLidjb3VudHJ5X25hbWUnLiRiXSkpDQoJCXsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLidjdXJyZW5jeV9jb2RldGhyZWUnLiRiXSA9IHNlbGY6OmdldFZhcignY291bnRyeScsIHNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLidjb3VudHJ5Jy4kYl0sICdpZCcsICdjdXJyZW5jeScpOw0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2N1cnJlbmN5Jy4kYl0gPSBzZWxmOjpnZXRWYXIoJ2N1cnJlbmN5Jywgc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2N1cnJlbmN5X2NvZGV0aHJlZScuJGJdLCAnY29kZXRocmVlJywgJ2lkJyk7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVskZi4nY3VycmVuY3lfbmFtZScuJGJdID0gc2VsZjo6Z2V0VmFyKCdjdXJyZW5jeScsIHNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLidjdXJyZW5jeScuJGJdLCAnaWQnLCAnbmFtZScpOw0KCQl9DQoJCS8vIG5vdyBsb2FkIGFsbCB0aGUgdXNlciB2YWx1ZXMNCgkJaWYgKCR1c2VySWQgPiAwKQ0KCQl7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfaWRdJ10gPSAkaWQ7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfdXNlcl9pZF0nXSA9ICR1c2VySWQ7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfbmFtZV0nXSA9ICR1c2VyLT5uYW1lOw0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJ1tyZWdpc3RlcmVkX3VzZXJuYW1lXSddID0gJHVzZXItPnVzZXJuYW1lOw0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJ1tyZWdpc3RlcmVkX2VtYWlsXSddID0gJHVzZXItPmVtYWlsOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF0gPSBmYWxzZTsNCgkJfQ0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljICR0YXhMb2NhdGlvbiA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRheExvY2F0aW9uKCR0eXBlLCAkaWQsICR2aWV3KQ0KCXsNCgkJaWYgKCRpZCA+IDAgfHwgJ2NhcnQnID09PSAkdmlldykNCgkJew0KCQkJJGtleSA9ICR0eXBlLiR2aWV3LiRpZDsNCgkJCWlmICghaXNzZXQoc2VsZjo6JHRheExvY2F0aW9uWyRrZXldKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRUYXhMb2NhdGlvbigkdHlwZSwgJGlkLCAkdmlldywgJGtleSk7DQoJCQl9DQoJCQlpZiAoaXNzZXQoc2VsZjo6JHRheExvY2F0aW9uWyRrZXldKSAmJiBzZWxmOjokdGF4TG9jYXRpb25bJGtleV0gPiAwKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokdGF4TG9jYXRpb25bJGtleV07DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0VGF4TG9jYXRpb24oJGZpZWxkLCAkaWQsICR2aWV3LCAka2V5KQ0KCXsNCgkJc3dpdGNoICgkdmlldykNCgkJew0KCQkJY2FzZSAnaW52b2ljZSc6DQoJCQkJLy8gZ2V0IHRoZSBjbGllbnQgaWQgZnJvbSBqb2IgaWQNCgkJCQkkcmVnaXN0ZXJlZF91c2VyID0gc2VsZjo6Z2V0VmFyKCR2aWV3LCAkaWQsICdpZCcsICdyZWdpc3RlcmVkX3VzZXInKTsNCgkJCQkvLyByZXR1cm4gbG9jYXRpb24gaWQgZnJvbSBjbGllbnQgdGFibGUNCgkJCQlpZiAoJHJlZ2lzdGVyZWRfdXNlciA+IDApDQoJCQkJew0KCQkJCQlzZWxmOjokdGF4TG9jYXRpb25bJGtleV0gPSBzZWxmOjpnZXRSZWdVc2VyVmFsdWUoJHJlZ2lzdGVyZWRfdXNlciwgJGZpZWxkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJCWNhc2UgJ2NhcnQnOg0KCQkJY2FzZSAnZXZlbnQnOg0KCQkJCS8vIGZpcnN0IGZpbmQgb3V0IHdobyB0aGlzIGlzDQoJCQkJJHVzZXJJcyA9IHNlbGY6OnVzZXJJcyhudWxsLCB0cnVlKTsNCgkJCQlpZiAoJHVzZXJJc1snaXMnXSA9PSAzIHx8ICR1c2VySXNbJ2lzJ10gPT0gMikNCgkJCQl7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQllbHNlaWYgKCR1c2VySXNbJ2lzJ10gPT0gMSAmJiAkdXNlcklzWydpZCddID4gMCkNCgkJCQl7DQoJCQkJCXNlbGY6OiR0YXhMb2NhdGlvblska2V5XSA9IHNlbGY6OmdldFJlZ1VzZXJWYWx1ZSgkdXNlcklzWydpZCddLCAkZmllbGQpOw0KCQkJCX0NCgkJCQllbHNlaWYgKCdjb3VudHJ5JyA9PT0gJGZpZWxkKQ0KCQkJCXsNCgkJCQkJLy8gcHVibGljIHVzZXIgc28gd2UgZmlyc3QgZ2V0IGNvdW50cnkNCgkJCQkJaWYgKCRjb3VudHJ5VGhyZWUgPSBzZWxmOjpnZXRMb2NhdGlvbmRhdGEobnVsbCwgbnVsbCwgbnVsbCwgJ1VTRCcsIDEwLCAxKSkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JHRheExvY2F0aW9uWyRrZXldID0gc2VsZjo6Z2V0VmFyKCdjb3VudHJ5JywgJGNvdW50cnlUaHJlZSwgJ2NvZGV0aHJlZScsICdpZCcpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRheCgmJHRheGVkLCAmJHRvdGFsLCAkaWQsICR2aWV3KQ0KCXsNCgkJJHNldFRheCA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKS0+Z2V0KCd0YXhlZCcsIDApOw0KCQlpZiAoJHNldFRheCA9PSAxICYmIDEgPT0gc2VsZjo6Z2V0T3JnYW5pemVyVmFsdWUoc2VsZjo6JG9yZ2FuaXplciwgJ3RheGVkJywgMCkpDQoJCXsNCgkJCS8vIHNldCB0aGUgdGF4IHRvIHRoaXMgYXJyYXkNCgkJCSR0YXggPSBhcnJheSgpOw0KCQkJJHRheEFkZFRvdGFsID0gYXJyYXkoKTsNCgkJCSRkZWR1Y3QgPSBhcnJheSgpOw0KCQkJLy8gZ2V0IHRoZSBjb3VudHJ5IG9mIHRoZSBjbGllbnQNCgkJCSRjb3VudHJ5ID0gc2VsZjo6Z2V0VGF4TG9jYXRpb24oJ2NvdW50cnknLCAkaWQsICR2aWV3KTsNCgkJCS8vIGdldCB0aGUgcmVnaW9uIG9mIHRoZSBjbGllbnQNCgkJCSRyZWdpb24gPSBzZWxmOjpnZXRUYXhMb2NhdGlvbigncmVnaW9uJywgJGlkLCAkdmlldyk7DQoJCQkvLyBub3cgZ2V0IHRheCBsZXZlbCAxIG9mIHRoaXMgQ291bnRyeSBhbmQgb3IgUmVnaW9uDQoJCQkkdGF4TGV2ZWwxID0gc2VsZjo6Z2V0VGF4UnVsZSgxLCRjb3VudHJ5LCRyZWdpb24pOw0KCQkJLy8gbm93IGdldCB0YXggbGV2ZWwgMiBvZiB0aGlzIENvdW50cnkgYW5kIG9yIFJlZ2lvbg0KCQkJJHRheExldmVsMiA9IHNlbGY6OmdldFRheFJ1bGUoMiwkY291bnRyeSwkcmVnaW9uKTsNCgkJCS8vIHRheCB0eXBlcw0KCQkJJHRheF90eXBlID0gc2VsZjo6Z2V0T3JnYW5pemVyVmFsdWUoc2VsZjo6JG9yZ2FuaXplciwgJ3RheF90eXBlJywgMik7DQoJCQkvLyB0YXggY29tcG91bmQNCgkJCSR0YXhfY29tcG91bmQgPSBzZWxmOjpnZXRPcmdhbml6ZXJWYWx1ZShzZWxmOjokb3JnYW5pemVyLCAndGF4X2NvbXBvdW5kJywgbnVsbCk7DQoJCQkvLyBiYXNlZCBvbiB0YXggdHlwZQ0KCQkJaWYgKDIgPT0gJHRheF90eXBlKQ0KCQkJew0KCQkJCS8vIHRheCBleGNsdWRlZA0KCQkJCWlmICgkdGF4TGV2ZWwxICYmIGlzc2V0KCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc19udW1lcmljKCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc3NldCgkdGF4TGV2ZWwxWyduYW1lJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0YXhMZXZlbDFbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGF4WzBdWyduYW1lJ10gPSAkdGF4TGV2ZWwxWyduYW1lJ107DQoJCQkJCSR0YXhbMF1bJ3RheCddID0gJHRheExldmVsMVsndGF4J107DQoJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkLCAkdGF4TGV2ZWwxWyd0YXgnXSwgMjApOw0KCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9IGJjZGl2KCR0bXBBbW91bnQsIDEwMCwgNCk7DQoJCQkJCS8vIGFkZCB0byB0YXggdG90YWwNCgkJCQkJJHRheEFkZFRvdGFsW10gPSAkdGF4WzBdWydhbW91bnQnXTsNCgkJCQl9DQoJCQkJaWYgKCR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDJbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMlsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJJHRheFsxXVsndGF4J10gPSAkdGF4TGV2ZWwyWyd0YXgnXTsNCgkJCQkJaWYgKCR0YXhfY29tcG91bmQgPT0gMSAmJiBpc3NldCgkdGF4WzBdWydhbW91bnQnXSkgJiYgJHRheFswXVsnYW1vdW50J10gPiAwKQ0KCQkJCQl7DQoJCQkJCQkkdGF4ZWRTdWIgPSBiY2FkZCgkdGF4ZWQsICR0YXhbMF1bJ2Ftb3VudCddLCAyMCk7DQoJCQkJCQkkdG1wQW1vdW50ID0gIGJjbXVsKCR0YXhlZFN1YiwgJHRheExldmVsMlsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNkaXYoJHRtcEFtb3VudCwgMTAwLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkLCAkdGF4TGV2ZWwyWyd0YXgnXSwgMjApOw0KCQkJCQkJJHRheFsxXVsnYW1vdW50J10gPSBiY2RpdigkdG1wQW1vdW50LCAxMDAsIDQpOw0KCQkJCQl9DQoJCQkJCS8vIGFkZCB0byB0YXggdG90YWwNCgkJCQkJJHRheEFkZFRvdGFsW10gPSAkdGF4WzFdWydhbW91bnQnXTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKDEgPT0gJHRheF90eXBlKQ0KCQkJew0KCQkJCSRyZW1vdmFsID0gYXJyYXkoKTsNCgkJCQkvLyB0YXggaW5jbHVkZWQNCgkJCQlpZiAoJHRheExldmVsMSAmJiBpc3NldCgkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMVsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwxWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHJlbW92YWxbXSA9ICR0YXhMZXZlbDFbJ3RheCddOw0KCQkJCX0NCgkJCQlpZiAoJHRheExldmVsMiAmJiBpc3NldCgkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMlsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwyWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHJlbW92YWxbXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCX0NCgkJCQkkcmVtb3ZhbCA9IHNlbGY6OmJjc3VtKCRyZW1vdmFsKTsNCgkJCQkvLyB0YXggaW5jbHVkZWQNCgkJCQlpZiAoJHRheExldmVsMSAmJiBpc3NldCgkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwxWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMVsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwxWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRheFswXVsnbmFtZSddID0gJHRheExldmVsMVsnbmFtZSddOw0KCQkJCQkkdGF4WzBdWyd0YXgnXSA9ICR0YXhMZXZlbDFbJ3RheCddOw0KCQkJCQlpZiAoJHRheF9jb21wb3VuZCA9PSAxICYmICR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pKQ0KCQkJCQl7DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkdGF4TGV2ZWwyWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsX2EgPSBiY2RpdigkdGF4ZWQsICR0ZW1wVmFsMiwgMjApOw0KCQkJCQkJJHRlbXBWYWwzID0gYmNkaXYoJHRheExldmVsMVsndGF4J10sIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWw0ID0gYmNhZGQoJHRlbXBWYWwzLCAxLCAyMCk7DQoJCQkJCQkkdGVtcFZhbF9iID0gYmNkaXYoJHRlbXBWYWxfYSwgJHRlbXBWYWw0LCAyMCk7DQoJCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9ICBiY3N1YigkdGVtcFZhbF9hLCAkdGVtcFZhbF9iLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0ZW1wVmFsMSA9IGJjZGl2KCRyZW1vdmFsLCAxMDAsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsMiA9IGJjYWRkKCR0ZW1wVmFsMSwgMSwgMjApOw0KCQkJCQkJJGV4Y2x1ZGluZyA9IGJjZGl2KCR0YXhlZCwgJHRlbXBWYWwyLCAyMCk7DQoJCQkJCQkkdGVtcFZhbCA9IGJjbXVsKCRleGNsdWRpbmcsICR0YXhMZXZlbDFbJ3RheCddLCAyMCk7DQoJCQkJCQkkdGF4WzBdWydhbW91bnQnXSA9IGJjZGl2KCR0ZW1wVmFsLCAxMDAsIDQpOyANCgkJCQkJfQ0KCQkJCQkvLyByZW1vdmUgZnJvbSBwcmljZQ0KCQkJCQkkZGVkdWN0W10gPSAkdGF4WzBdWydhbW91bnQnXTsNCgkJCQl9DQoJCQkJaWYgKCR0YXhMZXZlbDIgJiYgaXNzZXQoJHRheExldmVsMlsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMlsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDJbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMlsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJJHRheFsxXVsndGF4J10gPSAkdGF4TGV2ZWwyWyd0YXgnXTsNCgkJCQkJaWYgKCR0YXhfY29tcG91bmQgPT0gMSAmJiBpc3NldCgkdGF4WzBdWydhbW91bnQnXSkgJiYgJHRheFswXVsnYW1vdW50J10gPiAwKQ0KCQkJCQl7DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkdGF4TGV2ZWwyWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNzdWIoJHRheGVkLCAkdGVtcFZhbCwgNCk7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkdGF4WzFdWyduYW1lJ10gPSAkdGF4TGV2ZWwyWyduYW1lJ107DQoJCQkJCQkkdGF4WzFdWyd0YXgnXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCQkJJHRlbXBWYWwxID0gYmNkaXYoJHJlbW92YWwsIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWwyID0gYmNhZGQoJHRlbXBWYWwxLCAxLCAyMCk7DQoJCQkJCQkkZXhjbHVkaW5nID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNtdWwoJGV4Y2x1ZGluZywgJHRheExldmVsMlsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMV1bJ2Ftb3VudCddID0gYmNkaXYoJHRlbXBWYWwsIDEwMCwgNCk7IA0KCQkJCQl9DQoJCQkJCS8vIHJlbW92ZSBmcm9tIHByaWNlDQoJCQkJCSRkZWR1Y3RbXSA9ICR0YXhbMV1bJ2Ftb3VudCddOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGNoZWNrIGlmIHRoZXJlIHdhcyB0YXggc2V0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRheCkpDQoJCQl7DQoJCQkJLy8gYWRkIHRoZSB0YXggdG8gdG90YWwNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRheEFkZFRvdGFsKSkNCgkJCQl7DQoJCQkJCSR0YXhlZCA9IHNlbGY6OmJjc3VtKCR0YXhBZGRUb3RhbCk7DQoJCQkJCSR0b3RhbCA9IHNlbGY6OmJjc3VtKGFycmF5KCR0b3RhbCwgJHRheGVkKSk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRlZHVjdCkpDQoJCQkJew0KCQkJCQkkdGF4ZWQgPSBzZWxmOjpiY3N1bSgkZGVkdWN0KTsNCgkJCQl9DQoJCQkJcmV0dXJuICR0YXg7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkJDQoJcHJvdGVjdGVkIHN0YXRpYyAkdGF4cnVsZXMgPSBhcnJheSgpOw0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRUYXhSdWxlKCRsZXZlbCwgJGNvdW50cnkgPSAwLCAkcmVnaW9uID0gMCkNCgl7DQoJCS8vIGJ1aWxkIHRoZSBrZXkNCgkJaWYgKHNlbGY6OiRvcmdhbml6ZXIpDQoJCXsNCgkJCSRrZXkgPSAkbGV2ZWwuJGNvdW50cnkuJHJlZ2lvbi5zZWxmOjokb3JnYW5pemVyOw0KCQkJLy8gY2hlY2sgaWYgaXQgaGFzIGJlZW4gc2V0DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiR0YXhydWxlc1ska2V5XSkpDQoJCQl7DQoJCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCQkvLyBzZXQgdGhlIHRheCBydWxlDQoJCQkJc2VsZjo6c2V0VGF4UnVsZSgkZGIsICRrZXksICRsZXZlbCwgJGNvdW50cnksICRyZWdpb24pOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgaXQgaGFzIGJlZW4gc2V0DQoJCQlpZiAoaXNzZXQoc2VsZjo6JHRheHJ1bGVzWyRrZXldKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdGF4cnVsZXNbJGtleV0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokdGF4cnVsZXNbJGtleV07DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0VGF4UnVsZSgkZGIsICRrZXksICRsZXZlbCwgJGNvdW50cnkgPSAwLCAkcmVnaW9uID0gMCkNCgl7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJYXJyYXkoCSdhLmlkJywnYS50YXgnLCdhLm5hbWUnKSwNCgkJCWFycmF5KAknaWQnLCd0YXgnLCduYW1lJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fdGF4X3J1bGUnLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5wdWJsaXNoZWQnKSAuICcgPSAxJyk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EubGV2ZWwnKSAuICcgPSAnLiAoaW50KSAkbGV2ZWwpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLm9yZ2FuaXplcicpIC4gJyA9ICcuIChpbnQpIHNlbGY6OiRvcmdhbml6ZXIpOw0KCQkvLyBjaGVjayBmb3IgY291bnRyeSBhbmQgcmVnaW9uDQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY291bnRyeScpIC4gJyA9ICcuIChpbnQpICRjb3VudHJ5KTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5yZWdpb24nKSAuICcgPSAnLiAoaW50KSAkcmVnaW9uKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlzZWxmOjokdGF4cnVsZXNbJGtleV0gPSAkZGItPmxvYWRBc3NvYygpOw0KCQl9DQoJCWVsc2VpZiAoKGludCkkY291bnRyeSA+IDAgJiYgKGludCkkcmVnaW9uID4gMCkNCgkJew0KCQkJLy8gbm93IG9ubHkgY2hlY2sgZm9yIGNvdW50cnkNCgkJCXJldHVybiBzZWxmOjpzZXRUYXhSdWxlKCRkYiwgJGtleSwgJGxldmVsLCAkY291bnRyeSk7DQoJCX0NCgkJZWxzZWlmICgoaW50KSRjb3VudHJ5ID4gMCAmJiAkcmVnaW9uID09IDApDQoJCXsNCgkJCS8vIG5vdyBjaGVjayBmb3IgYW55IHdpdGhvdXQgY291bnRyeQ0KCQkJcmV0dXJuIHNlbGY6OnNldFRheFJ1bGUoJGRiLCAka2V5LCAkbGV2ZWwpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJKiBAcGFyYW0gZmxvYXQgJGFtb3VudA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmNzdW0oJGFycmF5LCAkc2NhbGUgPSA0KQ0KCXsNCgkJJHJlcyA9IDAuMDsNCgkJZm9yZWFjaCgkYXJyYXkgYXMgJHZhbCl7DQoJCQkkcmVzID0gYmNhZGQoJHJlcywgJHZhbCwgJHNjYWxlKTsNCgkJfQ0KCQlyZXR1cm4gJHJlczsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGFtb3VudA0KCSAqIEByZXR1cm4gbWl4ZWR8bnVtYmVyDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZGRDdXJyZW5jeSgkYW1vdW50LCAkY29kZXRocmVlID0gbnVsbCkNCgl7DQoJCXJldHVybiBzZWxmOjptYWtlTW9uZXkoJGFtb3VudCwgJGNvZGV0aHJlZSk7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkY3VycmVuY3lEZXRhaWxzID0gYXJyYXkoKTsNCg0KCS8qKg0KCSAqIEBwYXJhbSBib29sICRjb2RldGhyZWUNCgkgKiBAcmV0dXJuIGJvb2x8bWl4ZWQNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEN1cnJlbmN5RGV0YWlscygkY29kZXRocmVlID0gZmFsc2UpDQoJew0KCQkvLyBjaGVjayBpZiBjdXJyZW5jeSBjb2RldGhyZWUgaXMgc2V0DQoJCWlmICghJGNvZGV0aHJlZSAmJiBpc3NldChzZWxmOjokb3JnYW5pemVyKSAmJiBzZWxmOjokb3JnYW5pemVyID4gMCkNCgkJew0KCQkJLy8gZ2V0IHRoZSBwcmljZSBjdXJyZW5jeQ0KCQkJJGNvZGV0aHJlZSA9IHNlbGY6OmdldE9yZ2FuaXplclZhbHVlKHNlbGY6OiRvcmdhbml6ZXIsICdjdXJyZW5jeScsIGZhbHNlKTsNCgkJfQ0KCQllbHNlaWYgKCEkY29kZXRocmVlKQ0KCQl7DQoJCQkkY29kZXRocmVlID0gc2VsZjo6Z2V0KCdBQ1RJVkVfQ1VSUkVOQ1knKTsNCgkJfQ0KCQkvLyByZXR1cm4gY2FjaGVkIGRhdGEgaWYgc2V0DQoJCWlmICgkY29kZXRocmVlICYmICFpc3NldChzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRjb2RldGhyZWVdKSkNCgkJew0KCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQknYS5kZWNpbWFsc3ltYm9sJywnYS5wb3NpdGl2ZXN0eWxlJywnYS5uZWdhdGl2ZXN0eWxlJyksDQoJCQkJYXJyYXkoCSdjdXJyZW5jeV9pZCcsJ2N1cnJlbmN5X25hbWUnLCdjdXJyZW5jeV9jb2RldGhyZWUnLCdjdXJyZW5jeV9udW1lcmljY29kZScsJ2N1cnJlbmN5X3N5bWJvbCcsDQoJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCSdjdXJyZW5jeV9uZWdhdGl2ZXN0eWxlJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2N1cnJlbmN5JywgJ2EnKSk7DQoJCQlpZiAoaXNfbnVtZXJpYygkY29kZXRocmVlKSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmlkJykgLiAnID0gJy4gKGludCkgJGNvZGV0aHJlZSk7DQoJCQl9DQoJCQllbHNlaWYgKHN0cmxlbigkY29kZXRocmVlKSA9PSAzKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY29kZXRocmVlJykgLiAnID0gJy4kZGItPnF1b3RlKCRjb2RldGhyZWUpKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmNvZGV0aHJlZScpIC4gJyA9ICcuJGRiLT5xdW90ZSgnTk9ORScpKTsNCgkJCX0NCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCXNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0gPSAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJfQ0KCQkvLyBtYWtlIHN1cmUgaXQgaGFzIGJlZW4gc2V0DQoJCWlmIChpc3NldChzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRjb2RldGhyZWVdKSkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPW1ha2VNb25leV0NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuZXdEb2NOdW1iZXIoJG9yZ2FuaXplciwgJGlkID0gbnVsbCkNCgl7DQoJCWlmIChpc19udW1lcmljKCRvcmdhbml6ZXIpKQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB0aGlzIGludm9pY2UgaGFzIHRyYW5zYWN0aW9ucw0KCQkJJGlzSW52b2ljZSA9IGZhbHNlOw0KCQkJaWYgKCRpZCkNCgkJCXsNCgkJCQlpZiAoJGZvdW5kVHJhbnMgPSBzZWxmOjpnZXRWYXIoJ3RyYW5zYWN0aW9uJywgJGlkLCAnaW52b2ljZScsICdpZCcpKQ0KCQkJCXsNCgkJCQkJJGlzSW52b2ljZSA9IHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gZmlyc3Qgd2UgZ2V0IG9yZ2FuaXplcnMgaW52b2ljaW5nIG1ldGhvZA0KCQkJJHByb2Zvcm1hID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnYW5pemVyLCAnaWQnLCAncHJvZm9ybWEnKTsNCgkJCWlmICgwID09ICRwcm9mb3JtYSB8fCAkaXNJbnZvaWNlKQ0KCQkJew0KCQkJCSRpc0ludm9pY2UgPSB0cnVlOw0KCQkJCSRuZXh0ID0gKGludCkgc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnYW5pemVyLCAnaWQnLCAnbmV4dF9pbnZvaWNlX251bWJlcicpOw0KCQkJCS8vIG1ha2Ugc3VyZSB0aGUgbmV4dCBpcyBhIG51bWJlcg0KCQkJCWlmICghaXNfbnVtZXJpYygkbmV4dCkgfHwgISRuZXh0IHx8IGVtcHR5KCRuZXh0KSB8fCAkbmV4dCA8IDEpDQoJCQkJew0KCQkJCQkkbmV4dCA9IDE7DQoJCQkJfQ0KCQkJCS8vIHVwZGF0ZSB0aGUgbmV4dCBudW1iZXIgbm93DQoJCQkJJG9yZyA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkkb3JnLT5pZCA9ICRvcmdhbml6ZXI7DQoJCQkJJG9yZy0+bmV4dF9pbnZvaWNlX251bWJlciA9IChpbnQpICRuZXh0ICsgMTsNCgkJCQlGYWN0b3J5OjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fb3JnYW5pemVyJywgJG9yZywgJ2lkJyk7DQoJCQl9DQoJCQllbHNlaWYgKDEgPT0gJHByb2Zvcm1hKQ0KCQkJew0KCQkJCSRuZXh0ID0gKGludCkgc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkb3JnYW5pemVyLCAnaWQnLCAnbmV4dF9wcm9mb3JtYV9udW1iZXInKTsNCgkJCQkvLyBtYWtlIHN1cmUgdGhlIG5leHQgaXMgYSBudW1iZXINCgkJCQlpZiAoIWlzX251bWVyaWMoJG5leHQpIHx8ICEkbmV4dCB8fCBlbXB0eSgkbmV4dCkgfHwgJG5leHQgPCAxKQ0KCQkJCXsNCgkJCQkJJG5leHQgPSAxOw0KCQkJCX0NCgkJCQkvLyB1cGRhdGUgdGhlIG5leHQgbnVtYmVyIG5vdw0KCQkJCSRvcmcgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJJG9yZy0+aWQgPSAkb3JnYW5pemVyOw0KCQkJCSRvcmctPm5leHRfcHJvZm9ybWFfbnVtYmVyID0gKGludCkgJG5leHQgKyAxOw0KCQkJCUZhY3Rvcnk6OmdldERibygpLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXInLCAkb3JnLCAnaWQnKTsNCgkJCX0NCgkJCS8vIGdldCBwcmVmaXgNCgkJCSRwcmVmaXggPSBzZWxmOjpnZXRPcmdhbml6ZXJWYWx1ZSgkb3JnYW5pemVyLCAncHJlZml4JywgJ1ZETScpOw0KCQkJaWYgKCRpc0ludm9pY2UpDQoJCQl7DQoJCQkJcmV0dXJuICdJTlYtJy4kcHJlZml4LnNwcmludGYoJyUwN2QnLCAkbmV4dCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcmV0dXJuICdQSS0nLiRwcmVmaXguc3ByaW50ZignJTA2ZCcsICRuZXh0KTsNCgkJCX0NCgkJfQ0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tOcigmJGl0ZW0sICR3aGVyZSkNCgl7DQoJCWxpc3QoJHR5cGUsICRjb2x1bW4pID0gZXhwbG9kZSgnLicsICR3aGVyZSk7DQoJCWlmICgkdHlwZSAmJiAkY29sdW1uICYmIGlzc2V0KCRpdGVtLT4kY29sdW1uKSkNCgkJew0KCQkJLy8gbG9hZCB0aGUgYWxsIGl0ZW1zIHdpdGggdGhlIHNhbWUgY29sdW1uDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoYXJyYXkoJ2lkJyAsJ2NyZWF0ZWQnLCAnbnVtYmVyJywgJ29yZ2FuaXplcicpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuJHR5cGUpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJGNvbHVtbikgLiAnID0gJy4kZGItPnF1b3RlKCRpdGVtLT4kY29sdW1uKSk7DQoJCQlpZiAoaXNzZXQoJGl0ZW0tPm9yZ2FuaXplcikpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnb3JnYW5pemVyJykgLiAnID0gJyAuIChpbnQpICRpdGVtLT5vcmdhbml6ZXIpOw0KCQkJfQ0KCQkJJHF1ZXJ5LT5vcmRlcignY3JlYXRlZCBBU0MnKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCSRmb3VuZCA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQlpZiAoY291bnQoJGZvdW5kKSA+IDEpDQoJCQkJew0KCQkJCQkvLyBpcyB0aGUgY3VycmVudCBpdGVtIHRoZSBvbGRlciBvbmU/DQoJCQkJCWlmICgkaXRlbS0+aWQgIT0gJGZvdW5kWzBdLT5pZCkNCgkJCQkJew0KCQkJCQkJc2VsZjo6c2V0TnIoJGl0ZW0sICR0eXBlLCAkY29sdW1uKTsJCQkJCQkJDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyBpbnN1cmUgd2UgdXBkYXRlIFByb2Zvcm1hcyBvbmNlIHBheW1lbnQgaXMgbWFkZQ0KCQkJaWYgKHN0cnBvcygkaXRlbS0+JGNvbHVtbiwgJ1BJJykgIT09IGZhbHNlKQ0KCQkJew0KCQkJCWlmICgkdXBkYXRlID0gc2VsZjo6Z2V0VmFyKCd0cmFuc2FjdGlvbicsICRpdGVtLT5pZCwgJ2ludm9pY2UnLCAnaWQnKSkNCgkJCQl7DQoJCQkJCS8vIGlmIHByb2Zvcm1hIGlzIHNldCBzdG9yZSBiYWNrdXAgZm9yIGxhdGVyIHVzZS4NCgkJCQkJc2VsZjo6c2V0TnIoJGl0ZW0sICR0eXBlLCAkY29sdW1uLCBmYWxzZSwgJ3Byb2Zvcm1hJyk7DQoJCQkJCS8vIHVwZGF0ZSB0byBpbnZvaWNlDQoJCQkJCXNlbGY6OnNldE5yKCRpdGVtLCAkdHlwZSwgJGNvbHVtbik7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWlmICghJHVwZGF0ZSA9IHNlbGY6OmdldFZhcigndHJhbnNhY3Rpb24nLCAkaXRlbS0+aWQsICdpbnZvaWNlJywgJ2lkJykpDQoJCQkJew0KCQkJCQkvLyB0YWtlIGJhY2sgdG8gcHJvZm9ybWEgKFRPRE8gLSBtYXkgbm90IGJlIGlkZWFsKQ0KCQkJCQlzZWxmOjpzZXROcigkaXRlbSwgJHR5cGUsICRjb2x1bW4pOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZiAoISRpdGVtLT4kY29sdW1uIHx8IGVtcHR5KCRpdGVtLT4kY29sdW1uKSkNCgkJew0KCQkJLy8gaWYgbm90IHNldCwgdGhlbiBzZXQgbm93DQoJCQlzZWxmOjpzZXROcigkaXRlbSwgJHR5cGUsICRjb2x1bW4pOwkNCgkJfQ0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldE5yKCYkaXRlbSwgJiR0eXBlLCAmJGNvbHVtbiwgJG5ldyA9IHRydWUsICRvdGhlciA9IG51bGwpDQoJew0KCQlpZiAoJG5ldykNCgkJew0KCQkJLy8gZmlyc3QgdXBkYXRlIHRoZSBpdGVtDQoJCQkkaXRlbS0+JGNvbHVtbgk9IHNlbGY6Om5ld0RvY051bWJlcigkaXRlbS0+b3JnYW5pemVyLCAkaXRlbS0+aWQpOw0KCQl9DQoJCS8vIG5vdyB1cGRhdGUgdGhlIHRhYmxlDQoJCSR1cGRhdGVJdGVtCQk9IG5ldyBcc3RkQ2xhc3M7DQoJCSR1cGRhdGVJdGVtLT5pZAkJPSAkaXRlbS0+aWQ7DQoJCWlmICgkY29sdW1uKQ0KCQl7DQoJCQkkdXBkYXRlSXRlbS0+JGNvbHVtbiA9ICRpdGVtLT4kY29sdW1uOw0KCQkJaWYgKCRvdGhlcikNCgkJCXsNCgkJCQkvLyB1cGRhdGUgdGhlIG90aGVyIGZpZWxkIHdpdGggdGhlIGNvbHVtbg0KCQkJCSR1cGRhdGVJdGVtLT4kb3RoZXIgPSAkaXRlbS0+JGNvbHVtbjsNCgkJCQkkaXRlbS0+JG90aGVyID0gJGl0ZW0tPiRjb2x1bW47DQoJCQl9DQoJCX0JCQkJDQoJCS8vIHVwZGF0ZSB0aGUgaXRlbSBub3cNCgkJRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dXycuJHR5cGUsICR1cGRhdGVJdGVtLCAnaWQnKTsNCgl9DQpbQ1VTVE9NQ09ERT1nZXRGaWxlUGF0aF0=', 'CS8qKg0KCSogCW1ha2Ugc3VyZSBsb2NhdGlvbiBkYXRhIGlzIGxvYWRlZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZExvY2F0aW9uRGF0YSgpDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygnTG9jYXRpb25kYXRhSGVscGVyJywgRkFMU0UpKQ0KCQl7DQoJCQkkcGF0aCA9IEpQQVRIX1JPT1QgLiAnL2NvbXBvbmVudHMvY29tX2xvY2F0aW9uZGF0YS9oZWxwZXJzL2xvY2F0aW9uZGF0YS5waHAnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJCXsNCgkJCQkvLyBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgaGVscGVyDQoJCQkJSkxvYWRlcjo6cmVnaXN0ZXIoJ0xvY2F0aW9uZGF0YUhlbHBlcicsICRwYXRoKTsNCgkJCQkvLyBmaXN0IHNldCB0aGUgZGVmYXVsdCBjb21wb25lbnQNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OiRkZWZhdWx0Q29tcG9uZW50ID0gJ2NvbV9bW1tjb21wb25lbnRdXV0nOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogCWNhbmNlbCBFeHBpcmVkIENhcnQgSXRlbXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KQ0KCXsNCgkJLy8gYWRkIGFuIGV2ZW50IHRoYXQgd2lsbCBzZW5kIG91dCBhbGwgY29uZmlybWF0aW9uIGVtYWlscywgbm90IHlldCBzZW5kDQoJCSRkb2N1bWVudC0+YWRkU2NyaXB0RGVjbGFyYXRpb24oIg0KCQkJalF1ZXJ5KHdpbmRvdykubG9hZChmdW5jdGlvbigpIHsNCgkJCQljYW5jZWxFeHBpcmVkQ2FydEl0ZW1zKDEpLmRvbmUoZnVuY3Rpb24ocmVzdWx0KSB7DQoJCQkJCWlmKHJlc3VsdCl7DQoJCQkJCQljb25zb2xlLmxvZyhyZXN1bHQpOw0KCQkJCQl9DQoJCQkJfSk7DQoJCQl9KTsNCgkJCQ0KCQkJZnVuY3Rpb24gY2FuY2VsRXhwaXJlZENhcnRJdGVtcyh0eXBlKSB7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1hamF4LmNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMmZm9ybWF0PWpzb24nOw0KCQkJCWlmKHR5cGUgPiAwKXsNCgkJCQkJdmFyIHJlcXVlc3QgPSAndG9rZW49Ii5Kb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCkuIiZ0eXBlPScrdHlwZTsNCgkJCQl9DQoJCQkJcmV0dXJuIGpRdWVyeS5hamF4KHsNCgkJCQkJdHlwZTogJ1BPU1QnLA0KCQkJCQl1cmw6IGdldFVybCwNCgkJCQkJZGF0YVR5cGU6ICdqc29ucCcsDQoJCQkJCWRhdGE6IHJlcXVlc3QsDQoJCQkJCWpzb25wOiAnY2FsbGJhY2snDQoJCQkJfSk7DQoJCQl9Iik7DQoJfQ==', '', '', '', '', '', 'CQkvLyBydW4gc29tZSBob3VzZSBjbGVhbmluZw0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQkvLyBydW4gdGhlIGxvY2F0aW9uIGRhdGEgcXVldWUgKHRvIGluc3VyZSBhbGwgY3JvbiBqb2JzIHJ1biB0aW1lbHkpDQoJCQlpZiAoJGRvY3VtZW50IGluc3RhbmNlb2YgSkRvY3VtZW50SHRtbCkNCgkJCXsNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OnRoZVF1ZXVlKCRkb2N1bWVudCk7DQoJCQl9DQoJCX0NCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw0KCQkvLyBjbGVhciB0aGUgY2FydCBpdGVtcyBpZiBleHBpcmVkDQoJCXNlbGY6OmNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KTs=', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Event registration component.', '', '', 'Registry (Roline\'s)', '.git', '', '', 1, '', 'https://www.vdm.io/', '', 'HWgZuTTqfBVha6eZiPtm59rZlYbUddGwhlDZ4oCnvVRn+FEWarAZm4q721Rvwehy', 'https://www.vdm.io/access/', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 2, 492, '', 1, 66), +(22, 1, '', '', '', '', '', '', '', 1, '', 1, '', 1, '', '', '', '', '', '', 1, '', 1, '', '', 1, '', 1, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.3.2', 'Copyright (C) 2015. All Rights Reserved', '2016-05-25 04:13:34', '', '', '', '', '', '', '', '', 1, 1, 'Distributor is a highly advanced sermon distributor that runs on the [Joomla 3.x] (http://www.joomla.org) framework. You can link a shared folder from Dropbox to the component and use Dropbox as your file host, not to mention the advanced auto builder that gives you the ability to simply load sermons to your website by only adding them to Dropbox.', 'llewellyn@vdm.io', 1, '', '', '', '409c36f3-5699-4cd3-a15b-4e495e96f32c', 'images/sermon-distro.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2016-05-25 04:13:21', '', 'Sermon Distributor', 'sermondistributor', '', 4, 'CQlzZWxmOjpsb2FkRHJvcGJveEFqYXgoJGRvY3VtZW50KTs=', 'CS8qKg0KCSogCUxvYWQgdGhlIERyb3Bib3ggQWpheCB0byBwYWdlDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkRHJvcGJveEFqYXgoJGRvY3VtZW50KQ0KCXsNCgkJJGRvY3VtZW50LT5hZGRTY3JpcHREZWNsYXJhdGlvbigiDQoJCQlqUXVlcnkod2luZG93KS5sb2FkKGZ1bmN0aW9uKCkgew0KCQkJCWNoZWNrRHJvcGJveExpc3RpbmcoMyk7DQoJCQl9KTsNCgkJCQ0KCQkJZnVuY3Rpb24gY2hlY2tEcm9wYm94TGlzdGluZyhmcm9tdmlldyl7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJhZG1pbmlzdHJhdG9yL2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguY2hlY2tEcm9wYm94TGlzdGluZyZmb3JtYXQ9anNvbic7DQoJCQkJaWYoZnJvbXZpZXcgPiAwKXsNCgkJCQkJdmFyIHJlcXVlc3QgPSAndG9rZW49Ii5Kb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCkuIiZmcm9tdmlldz0nK2Zyb212aWV3Ow0KCQkJCX0NCgkJCQlyZXR1cm4galF1ZXJ5LmFqYXgoew0KCQkJCQl0eXBlOiAnR0VUJywNCgkJCQkJdXJsOiBnZXRVcmwsDQoJCQkJCWRhdGFUeXBlOiAnanNvbnAnLA0KCQkJCQlkYXRhOiByZXF1ZXN0LA0KCQkJCQlqc29ucDogJ2NhbGxiYWNrJw0KCQkJCX0pOw0KCQkJfQ0KCQkiKTsNCgl9DQoNCgkvKioNCgkqIAlUaGUgZHJvcGJveCBsaW5rcyBhdXRvDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZHJvcGJveF9hdXRvOw0KCQ0KCS8qKg0KCSogCVRoZSBkcm9wYm94IGxpbmtzIG1hbnVhbA0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGxpbmtzX2Ryb3Bib3hfbWFudWFsOw0KDQoJLyoqDQoJKiAJVGhlIGRyb3Bib3ggaW5mbyBGaWxlIE5hbWUNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRhdXRvcHJvZ3Jlc3MgPSBmYWxzZTsNCg0KCS8qKg0KCSogCVRoZSBkcm9wYm94IGluZm8gRmlsZSBOYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbWFudWFscHJvZ3Jlc3MgPSBmYWxzZTsNCg0KCS8qKg0KCSogCVRoZSBkcm9wYm94IGluZm8gRmlsZSBOYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkYXV0b2xpc3RpbmcgPSBmYWxzZTsNCg0KCS8qKg0KCSogCVRoZSBkcm9wYm94IGluZm8gRmlsZSBOYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbWFudWFsbGlzdGluZyA9IGZhbHNlOw0KDQoJLyoqDQoJKiAJY2hlY2sgRHJvcGJveCBMb2NhbCBMaXN0aW5nDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREb3dubG9hZExpbmtzKCYkc2VybW9uKQ0KCXsNCgkJJGxpbmtzID0gYXJyYXkoKTsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkvLyBkZWNyeXB0IHRoZSB1cmxzDQoJCSRzYWZlID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAyNTYpOw0KCQkvLyBpbnRlcm5hbCBkb3dubG9hZCB1cmwNCgkJJGtleUNvdW50ZXIgPSBuZXcgXHN0ZENsYXNzOw0KCQkka2V5Q291bnRlci0+c2VybW9uID0gJHNlcm1vbi0+aWQ7DQoJCWlmICgkc2VybW9uLT5wcmVhY2hlcikNCgkJew0KCQkJJGtleUNvdW50ZXItPnByZWFjaGVyID0gJHNlcm1vbi0+cHJlYWNoZXI7DQoJCX0NCgkJaWYgKCRzZXJtb24tPnNlcmllcykNCgkJew0KCQkJJGtleUNvdW50ZXItPnNlcmllcyA9ICRzZXJtb24tPnNlcmllczsNCgkJfQ0KCQkka2V5Q291bnRlciA9IGJhc2U2NF9lbmNvZGUoJHNhZmUtPmVuY3J5cHRTdHJpbmcoanNvbl9lbmNvZGUoJGtleUNvdW50ZXIpKSk7DQoJCSR0b2tlbiA9IEpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKTsNCgkJJGRvd25sb2FkVVJMID0gJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWRvd25sb2FkLmZpbGUma2V5PScuJGtleUNvdW50ZXIuJyZ0b2tlbj0nLiR0b2tlbjsNCgkJLy8gY2hlY2sgaWYgbG9jYWwgLmh0YWNjZXNzIHNob3VsZCBiZSBzZXQNCgkJJHNldEh0YWNjZXNzID0gZmFsc2U7DQoJCSRvbmNsaWNrID0gJyBvbmNsaWNrPSJzZXJtb25Db3VudGVyKFwnJy4ka2V5Q291bnRlci4nXCcsXCdGSUxFTkFNRVwnKTsiJzsNCgkJLy8gY2hlY2sgd2hhdCBzb3VyY2Ugb2Ygb3VyIGxpbmsNCgkJc3dpdGNoICgkc2VybW9uLT5zb3VyY2UpDQoJCXsNCgkJCWNhc2UgMToNCgkJCQkvLyBsb2NhbCBmaWxlIGdldCBsb2NhbCBmb2xkZXIgYW5kIGNoZWNrIGlmIG91dHNpZGUgcm9vdCAoaWYgbm90IHRoZW4gYWxsb3cgZGlyZWN0KQ0KCQkJCSRsb2NhbEZvbGRlciA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdsb2NhbGZvbGRlcicsIEpQQVRIX1JPT1QuJy9pbWFnZXMnKS4nLyc7DQoJCQkJLy8gc2hvdWxkIHdlIGFsbG93IGRpcmVjdCBkb3dubG9hZHMNCgkJCQkkYWxsb3dEaXJlY3QgPSBmYWxzZTsNCgkJCQlpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgc3RycG9zKCRsb2NhbEZvbGRlciwgSlBBVEhfUk9PVCkgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGFsbG93RGlyZWN0ID0gdHJ1ZTsNCgkJCQkJJGxvY2FsRm9sZGVyVVJMID0gVXJpOjpyb290KCkuc3RyX3JlcGxhY2UoSlBBVEhfUk9PVCwgJycsICRsb2NhbEZvbGRlcik7DQoJCQkJCS8vIGluc3VyZSBubyBkb3VibGUgLy8gaXMgaW4gdGhlIFVSTA0KCQkJCQkkbG9jYWxGb2xkZXJVUkwgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlclVSTCk7DQoJCQkJCSRsb2NhbEZvbGRlclVSTCA9IHN0cl9yZXBsYWNlKCc6LycsICc6Ly8nLCAkbG9jYWxGb2xkZXJVUkwpOw0KCQkJCX0NCgkJCQkvLyBpbnN1cmUgbm8gZG91YmxlIC8vIGlzIGluIHRoZSBwYXRoIG5hbWUNCgkJCQkkbG9jYWxGb2xkZXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlcik7DQoJCQkJJGxvY2FsRm9sZGVyID0gc3RyX3JlcGxhY2UoJzovJywgJzovLycsICRsb2NhbEZvbGRlcik7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPmxvY2FsX2ZpbGVzKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2goJHNlcm1vbi0+bG9jYWxfZmlsZXMgYXMgJGtleSkNCgkJCQkJew0KCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlIHx8ICEkYWxsb3dEaXJlY3QpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCSRmaWxlbmFtZSA9IHNlbGY6OmdldERvd25sb2FkRmlsZU5hbWUoJHNlcm1vbiwka2V5LCdsb2NhbCcpOw0KCQkJCQkJCSRsb2NrZWRGb2xkZXJQYXRoID0gYmFzZTY0X2VuY29kZSgkc2FmZS0+ZW5jcnlwdFN0cmluZygkbG9jYWxGb2xkZXIuJGtleSkpOw0KCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSBKb29tbGFfX19kNGM3NjA5OV80YzMyXzQwOGFfODcwMV9kMGE3MjQ0ODRkZmRfX19Qb3dlcjo6XygkZG93bmxvYWRVUkwuJyZsaW5rPScuJGxvY2tlZEZvbGRlclBhdGguJyZmaWxlbmFtZT0nLiRmaWxlbmFtZSk7DQoJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQl9DQoJCQkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRhbGxvd0RpcmVjdCkNCgkJCQkJCXsNCgkJCQkJCQkkZmlsZW5hbWUgPSAka2V5Ow0KCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkbG9jYWxGb2xkZXJVUkwuJGtleTsNCgkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQkJCQkkc2V0SHRhY2Nlc3MgPSB0cnVlOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAyOg0KCQkJCS8vIERyb3Bib3ggZ2V0IGdsb2JhbCBkcm9wYm94IHN3aXRjaCANCgkJCQkkZHJvcGJveEJ1dHRvbiA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdhZGRfdG9fZHJvcGJveCcsIDEpOw0KCQkJCWlmICgxID09ICRzZXJtb24tPmJ1aWxkKQ0KCQkJCXsNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPm1hbnVhbF9maWxlcykpDQoJCQkJCXsNCgkJCQkJCS8vIG1hbnVhbCBkcm9wYm94DQoJCQkJCQlmb3JlYWNoKCRzZXJtb24tPm1hbnVhbF9maWxlcyBhcyAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RHJvcGJveExpbmsoJ21hbnVhbCcsMSwka2V5KTsNCgkJCQkJCQlpZiAoMSA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBnZXQgdGhlIGZpbGUgbmFtZSB1c2UgdGhlIHNhbWUgbWV0aG9kIGFzIHRoZSBhdXRvDQoJCQkJCQkJCSRmaWxlbmFtZSA9IHNlbGY6OmdldERvd25sb2FkRmlsZU5hbWUoJHNlcm1vbiwka2V5LCdkcm9wYm94X21hbnVhbCcpOw0KCQkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJGRvd25sb2FkVVJMLicmbGluaz0nLiRkcm9wVVJMLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWUpOw0KCQkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSAnJzsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmICgyID09ICRzZXJtb24tPmxpbmtfdHlwZSAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCSRmaWxlbmFtZSA9IHN0cl9yZXBsYWNlKCdWRE1fcExlS19oMHVFci8nLCAnJywgJGtleSk7DQoJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSBydHJpbSgkc2FmZS0+ZGVjcnlwdFN0cmluZyhiYXNlNjRfZGVjb2RlKCRkcm9wVVJMKSkpOw0KCQkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gYnVpbGQgZHJvcGJveCBzd2l0Y2ggaWYgbmVlZGVkDQoJCQkJCQkJaWYgKDEgPT0gJGRyb3Bib3hCdXR0b24gJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsIHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKGJhc2U2NF9kZWNvZGUoJGRyb3BVUkwpKSkpOw0KCQkJCQkJCQkkc2VybW9uLT5vbmNsaWNrX2Ryb2JveFskZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5idWlsZCkNCgkJCQl7DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkc2VybW9uLT5hdXRvX3Nlcm1vbnMpKQ0KCQkJCQl7DQoJCQkJCQkvLyBhdXRvbWF0aWMgZHJvcGJveA0KCQkJCQkJZm9yZWFjaCgkc2VybW9uLT5hdXRvX3Nlcm1vbnMgYXMgJGZpbGVuYW1lID0+ICRrZXkpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHRoZSBsaW5rDQoJCQkJCQkJJGRyb3BVUkwgPSBzZWxmOjpnZXREcm9wYm94TGluaygnYXV0bycsMSwka2V5KTsNCgkJCQkJCQlpZiAoMSA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBnZXQgdGhlIGZpbGUgbmFtZSAodXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJGRvd25sb2FkVVJMLicmbGluaz0nLiRkcm9wVVJMLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWUpOw0KCQkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSAnJzsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmICgyID09ICRzZXJtb24tPmxpbmtfdHlwZSAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSBydHJpbSgkc2FmZS0+ZGVjcnlwdFN0cmluZyhiYXNlNjRfZGVjb2RlKCRkcm9wVVJMKSkpOw0KCQkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQkJCQl9DQoJCQkJCQkJLy8gYnVpbGQgZHJvcGJveCBzd2l0Y2ggaWYgbmVlZGVkDQoJCQkJCQkJaWYgKDEgPT0gJGRyb3Bib3hCdXR0b24gJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsIHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKGJhc2U2NF9kZWNvZGUoJGRyb3BVUkwpKSkpOw0KCQkJCQkJCQkkc2VybW9uLT5vbmNsaWNrX2Ryb2JveFskZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAzOg0KCQkJCS8vIHVybCBnZXQgdGhlIGZpbGUgbmFtZSB1c2UgdGhlIHNhbWUgbWV0aG9kIGFzIHRoZSBhdXRvDQoJCQkJJGZpbGVuYW1lID0gc2VsZjo6Z2V0RG93bmxvYWRGaWxlTmFtZSgkc2VybW9uLCRzZXJtb24tPnVybCwndXJsJyk7DQoJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlKQ0KCQkJCXsNCgkJCQkJJGxvY2tlZFVSTCA9IGJhc2U2NF9lbmNvZGUoJHNhZmUtPmVuY3J5cHRTdHJpbmcoJHNlcm1vbi0+dXJsKSk7DQoJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSBKb29tbGFfX19kNGM3NjA5OV80YzMyXzQwOGFfODcwMV9kMGE3MjQ0ODRkZmRfX19Qb3dlcjo6XygkZG93bmxvYWRVUkwuJyZsaW5rPScuJGxvY2tlZFVSTC4nJmZpbGVuYW1lPScuJGZpbGVuYW1lKTsNCgkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUpDQoJCQkJew0KCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJHNlcm1vbi0+dXJsOw0KCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCX0NCgkJLy8gcmVtb3ZlIHRoZSB2YWx1ZXMgbm8gbG9uZ2VyIG5lZWRlZA0KCQl1bnNldCgkc2VybW9uLT5sb2NhbF9maWxlcyk7DQoJCXVuc2V0KCRzZXJtb24tPm1hbnVhbF9maWxlcyk7DQoJCXVuc2V0KCRzZXJtb24tPmF1dG9fc2VybW9ucyk7DQoJCXVuc2V0KCRzZXJtb24tPnVybCk7DQoJCS8vIHNob3VsZCB3ZSBzZXQgdGhlIGxvY2FsIC5odGFjY2VzcyBmb3IgdGhlIGRvd25sb2FkIGZvbGRlcg0KCQlpZiAoJHNldEh0YWNjZXNzKQ0KCQl7DQoJCQkvLyBUT0RPIHdlIG1heSBuZWVkIHRvIGFkZCB0aGlzIGxhdHRlciB0byBlbmZvcmNlIGRvd25sb2FkIG9mIGZpbGVzLg0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldERyb3Bib3hMaW5rKCR0eXBlLCAkcmV0dXJuID0gZmFsc2UsICR0YXJnZXQgPSBmYWxzZSkNCgl7DQoJCS8vIG1ha2Ugc3VyZSBhbGwgZGVmYXVsdHMgYXJlIHNldA0KCQkkZm91bmQgPSBzZWxmOjpjaGVja0Ryb3Bib3hMb2NhbExpc3RpbmcoJHR5cGUpOw0KCQlpZiAoJGZvdW5kKQ0KCQl7DQoJCQlzd2l0Y2goJHJldHVybikNCgkJCXsNCgkJCQljYXNlIDE6DQoJCQkJCS8vIHJldHVybiBhIGxpbmsNCgkJCQkJaWYgKGlzc2V0KHNlbGY6OiR7J2xpbmtzX2Ryb3Bib3hfJy4kdHlwZX1bJHRhcmdldF0pKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gc2VsZjo6JHsnbGlua3NfZHJvcGJveF8nLiR0eXBlfVskdGFyZ2V0XTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlIDI6DQoJCQkJCS8vIHJldHVybiBhbGwgbGlua3MNCgkJCQkJcmV0dXJuIHNlbGY6OiR7J2xpbmtzX2Ryb3Bib3hfJy4kdHlwZX07DQoJCQkJCWJyZWFrOw0KCQkJCWRlZmF1bHQgOg0KCQkJCQkvLyBqdXN0IGNvbmZpcm0gdGhhdCBpdCBpcyBzZXQNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvdW50RG93bmxvYWQoJGNvdW50ZXIsJGZpbGVuYW1lKQ0KCXsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkkb3BlbmVyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAyNTYpOw0KCQkkY291bnRlciA9IGpzb25fZGVjb2RlKHJ0cmltKCRvcGVuZXItPmRlY3J5cHRTdHJpbmcoYmFzZTY0X2RlY29kZSgkY291bnRlcikpKSk7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY291bnRlcikpDQoJCXsNCgkJCSRjb3VudGVyLT5maWxlbmFtZSA9ICRmaWxlbmFtZTsNCgkJCS8vIHNldCB0aGUgZGF0ZSBvYmplY3QNCgkJCSRkYXRlID0gRmFjdG9yeTo6Z2V0RGF0ZSgpOw0KCQkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBmaWxlIGFscmVhZHkgaGFzIHN0YXRpc3RpY3MNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcsJ2NvdW50ZXInKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc2VybW9uJykgLiAnID0gJy4gKGludCkgJGNvdW50ZXItPnNlcm1vbik7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdmaWxlbmFtZScpIC4gJyA9ICcuICRkYi0+cXVvdGUoJGNvdW50ZXItPmZpbGVuYW1lKSk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkc3RhdGlzdGljID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJLy8gYWxyZWFkeSBoYXMgYW4gZW50cnkNCgkJCQkkc3RhdGlzdGljLT5jb3VudGVyKys7DQoJCQkJJHN0YXRpc3RpYy0+bW9kaWZpZWQgPSAkZGF0ZS0+dG9TcWwoKTsNCgkJCQkvLyB1cGRhdGUgdGhlIGVudHJ5DQoJCQkJcmV0dXJuICRkYi0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJHN0YXRpc3RpYywgJ2lkJyk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IGEgbmV3IGVudHJ5DQoJCQkJJGNvdW50ZXItPmNvdW50ZXIgPSAxOw0KCQkJCSRjb3VudGVyLT5wdWJsaXNoZWQgPSAxOw0KCQkJCSRjb3VudGVyLT5jcmVhdGVkID0gJGRhdGUtPnRvU3FsKCk7DQoJCQkJJGNvdW50ZXItPmFjY2VzcyA9IDE7DQoJCQkJJGNvdW50ZXItPnZlcnNpb24gPSAxOw0KCQkJCS8vIHNldCBhIG5ldyBlbnRyeQ0KCQkJCSRkb25lID0gJGRiLT5pbnNlcnRPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9zdGF0aXN0aWMnLCAkY291bnRlcik7DQoJCQkJLy8gaWYgZG9uZSByZXR1cm4gbGFzdCB1c2VkIGlkDQoJCQkJaWYgKCRkb25lKQ0KCQkJCXsNCgkJCQkJJG5ld0lkID0gICRkYi0+aW5zZXJ0aWQoKTsNCgkJCQkJLy8gbWFrZSBzdXJlIHRoZSBhY2Nlc3Mgb2YgYXNzZXQgaXMgc2V0DQoJCQkJCXJldHVybiBzZWxmOjpzZXRBc3NldCgkbmV3SWQsJ3N0YXRpc3RpYycpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RG93bmxvYWRGaWxlTmFtZSgmJHNlcm1vbiwkZmlsZSwkdHlwZSkNCgl7DQoJCS8vIGZpcnN0IGdldCBmaWxlIG5hbWUgYW5kIGZpbGUgdHlwZQ0KCQkkZmlsZSA9IHN0cl9yZXBsYWNlKCdWRE1fcExlS19oMHVFci8nLCAnJywgJGZpbGUpOw0KCQkkZmlsZVR5cGUgPSBwYXRoaW5mbygkZmlsZSwgUEFUSElORk9fRVhURU5TSU9OKTsNCgkJaWYgKCRmaWxlVHlwZSkNCgkJew0KCQkJJGZpbGUgPSBzdHJfcmVwbGFjZSgnLicuJGZpbGVUeXBlLCAnJywgJGZpbGUpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGZpbGVUeXBlID0gJ2Vycm9yJzsNCgkJfQ0KCQkvLyBub3cgYnVpbGQgZG93bmxvYWQgbmFtZQ0KCQkkZG93bmxvYWROYW1lID0gYXJyYXkoKTsNCgkJLy8gYnVpbGQgdGhlIERvd25sb2FkIEZpbGUgTmFtZSAtIGZpcnN0IGFkZCB0aGUgcHJlYWNoZXIgbmFtZSBpZiBzZXQNCgkJaWYgKCRzZXJtb24tPnByZWFjaGVyKQ0KCQl7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZXJtb24tPnByZWFjaGVyX25hbWUsJ1UnKTsNCgkJfQ0KCQkvLyBhZGQgdGhlIHNlcmllcyBuYW1lIGlmIHNldA0KCQlpZiAoJHNlcm1vbi0+c2VyaWVzKQ0KCQl7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZXJtb24tPnNlcmllc19uYW1lLCdGJyk7DQoJCX0NCgkJLy8gYWRkIHRoZSBjYXRlZ29yeSBuYW1lIGlmIHNldA0KCQlpZiAoJHNlcm1vbi0+Y2F0aWQgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHNlcm1vbi0+Y2F0ZWdvcnkpKQ0KCQl7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZXJtb24tPmNhdGVnb3J5LCAnRicpOw0KCQl9DQoJCWlmICgnZHJvcGJveF9tYW51YWwnID09ICR0eXBlIHx8ICdsb2NhbCcgPT0gJHR5cGUpDQoJCXsNCgkJCS8vIGFkZCB0aGUgbWFpbiBmaWxlIG5hbWUNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+bmFtZSwnRicpOw0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkZmlsZSwnRicpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2VybW9uLT5uYW1lLCdGJyk7DQoJCQlpZiAoJ2Vycm9yJyA9PSAkZmlsZVR5cGUgfHwgc3RycG9zKCc/JywgJGZpbGVUeXBlKSAhPT0gZmFsc2UgfHwgc3RycG9zKCcmJywgJGZpbGVUeXBlKSAhPT0gZmFsc2UgKQ0KCQkJew0KCQkJCSRmaWxlVHlwZSA9ICdtcDMnOyAvLyBUT0RPIHdlIGRvbid0IGtub3cgdGhlIHVybCBmaWxldHlwZSAoc2V0dGluZyB0byBtcDMgYnV0IHRoaXMgY291bGQgYmUgd3JvbmcpDQoJCQl9DQoJCX0NCgkJLy8gbm93IGJ1aWxkIHRoZSBkb3dubG9hZCBmaWxlIG5hbWUNCgkJcmV0dXJuIGltcGxvZGUoJ19fJywgJGRvd25sb2FkTmFtZSkuJy4nLiRmaWxlVHlwZTsNCgl9DQoNCgkvKioNCgkqIAljaGVjayBEcm9wYm94IExvY2FsIExpc3RpbmcgKGRvIHdlIGhhdmUgdGhlIGZpbGVzKQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tEcm9wYm94TG9jYWxMaXN0aW5nKCR0eXBlKQ0KCXsNCgkJJGZpbGVQYXRoID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0UGF0aCgkdHlwZSk7DQoJCS8vIGdldCB0aGUgbG9jYWwgbGlua3MNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR7J2xpbmtzX2Ryb3Bib3hfJy4kdHlwZX0pKQ0KCQl7DQoJCQkvLyByZXR1cm4gdHJ1ZSB3ZSBoYXZlIGxpbmtzIGxvYWRlZA0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJZWxzZWlmICgoJGpzb25saW5rcyA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldENvbnRlbnQoJGZpbGVQYXRoLCBGQUxTRSkpICE9PSBGQUxTRSkNCgkJewkJCQ0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRqc29ubGlua3MpKQ0KCQkJew0KCQkJCS8vIGdldCBzYXZlZCBsaW5rcw0KCQkJCSRzdG9yZWFnZSA9IGpzb25fZGVjb2RlKCRqc29ubGlua3MsdHJ1ZSk7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzdG9yZWFnZSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBzYXZlZCBsaW5rcw0KCQkJCQlzZWxmOjokeydsaW5rc19kcm9wYm94XycuJHR5cGV9ID0gJHN0b3JlYWdlOw0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEZpbGVQYXRoKCR0eXBlLCAkbmFtZSA9ICdsaXN0aW5nJykNCgl7DQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHskdHlwZS4kbmFtZX0pKQ0KCQl7DQoJCQkvLyBHZXQgbG9jYWwga2V5DQoJCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkJLy8gc2V0IHRoZSBuYW1lDQoJCQkkZmlsZU5hbWUgPSBtZDUoJHR5cGUuJG5hbWUuJGxvY2Fsa2V5KTsNCgkJCS8vIHNldCBmaWxlIHBhdGgJCQkNCgkJCXNlbGY6OiR7JHR5cGUuJG5hbWV9ID0gSlBBVEhfQ09NUE9ORU5UX1NJVEUuJy9oZWxwZXJzLycuJGZpbGVOYW1lLicuanNvbic7DQoJCX0NCgkJLy8gcmV0dXJuIHRoZSBwYXRoDQoJCXJldHVybiBzZWxmOjokeyR0eXBlLiRuYW1lfTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgdGhlIGxvY2Fsa2V5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9jYWxrZXkgPSBmYWxzZTsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExvY2FsS2V5KCkNCgl7DQoJCWlmICghc2VsZjo6JGxvY2Fsa2V5KQ0KCQl7DQoJCQkvLyBnZXQgdGhlIG1haW4ga2V5DQoJCQlzZWxmOjokbG9jYWxrZXkgPSBtZDUoSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2xpbmtfZW5jcnlwdGlvbicsICdsb2NhbEtleTM0ZmRXRWtsJykpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokbG9jYWxrZXk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVEcm9wYm94KCR0eXBlID0gZmFsc2UsICRmb3JjZSA9IGZhbHNlKQ0KCXsNCgkJLy8gbG9hZCB0aGUgZmlsZQ0KCQlKTG9hZGVyOjppbXBvcnQoJ2Ryb3Bib3h1cGRhdGVyJywgSlBBVEhfQ09NUE9ORU5UX1NJVEUuJy9oZWxwZXJzJyk7DQoJCS8vIHVwZGF0ZSB0eXBlcw0KCQkkdHlwZXMgPSBhcnJheSgnbWFudWFsJywnYXV0bycpOw0KCQkvLyBva2F5IG5vdyB1cGRhdGUgdGhpcyB0eXBlDQoJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdHlwZSkgJiYgaW5fYXJyYXkoJHR5cGUsJHR5cGVzKSkNCgkJew0KCQkJJGRyb3Bib3ggPSBuZXcgRHJvcGJveHVwZGF0ZXIoKTsNCgkJCXJldHVybiAkZHJvcGJveC0+dXBkYXRlKCR0eXBlLCRmb3JjZSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVwZGF0ZVByb2dyZXNzKCR0eXBlKQ0KCXsNCgkJJGZpbGVQYXRoID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0UGF0aCgkdHlwZSwncHJvZ3Jlc3MnKTsNCgkJLy8gZ2V0IHRoZSBzZXQgcHJvZ3Jlc3MNCgkJaWYgKCgkcHJvZ3Jlc3MgPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRDb250ZW50KCRmaWxlUGF0aCwgRkFMU0UpKSAhPT0gRkFMU0UpDQoJCXsJCQkNCgkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcHJvZ3Jlc3MpKQ0KCQkJew0KCQkJCS8vIGdldCBzZXQgcHJvZ3Jlc3MNCgkJCQkkcHJvZ3Jlc3MgPSBqc29uX2RlY29kZSgkcHJvZ3Jlc3MsdHJ1ZSk7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwcm9ncmVzcykpDQoJCQkJew0KCQkJCQkvLyByZXR1cm4gdGUgcHJvZ3Jlc3MNCgkJCQkJcmV0dXJuICRwcm9ncmVzc1sncmVwb3J0J107DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiAwOw0KCX0NCg==', '', 'CS8qKg0KCSogCUxvYWQgdGhlIERyb3Bib3ggQWpheCB0byBwYWdlDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkRHJvcGJveEFqYXgoJGRvY3VtZW50KQ0KCXsNCgkJJGRvY3VtZW50LT5hZGRTY3JpcHREZWNsYXJhdGlvbigiDQoJCQlqUXVlcnkod2luZG93KS5sb2FkKGZ1bmN0aW9uKCkgew0KCQkJCWNoZWNrRHJvcGJveExpc3RpbmcoMyk7DQoJCQl9KTsNCgkJCQ0KCQkJZnVuY3Rpb24gY2hlY2tEcm9wYm94TGlzdGluZyhmcm9tdmlldyl7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1hamF4LmNoZWNrRHJvcGJveExpc3RpbmcmZm9ybWF0PWpzb24nOw0KCQkJCWlmKGZyb212aWV3ID4gMCl7DQoJCQkJCXZhciByZXF1ZXN0ID0gJ3Rva2VuPSIuSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpLiImZnJvbXZpZXc9Jytmcm9tdmlldzsNCgkJCQl9DQoJCQkJcmV0dXJuIGpRdWVyeS5hamF4KHsNCgkJCQkJdHlwZTogJ0dFVCcsDQoJCQkJCXVybDogZ2V0VXJsLA0KCQkJCQlkYXRhVHlwZTogJ2pzb25wJywNCgkJCQkJZGF0YTogcmVxdWVzdCwNCgkJCQkJanNvbnA6ICdjYWxsYmFjaycNCgkJCQl9KTsNCgkJCX0NCgkJIik7DQoJfQ0KDQoJLyoqDQoJKiAJVGhlIGRyb3Bib3ggbGlua3MgYXV0bw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGxpbmtzX2Ryb3Bib3hfYXV0bzsNCgkNCgkvKioNCgkqIAlUaGUgZHJvcGJveCBsaW5rcyBtYW51YWwNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRsaW5rc19kcm9wYm94X21hbnVhbDsNCg0KCS8qKg0KCSogCVRoZSBkcm9wYm94IGluZm8gRmlsZSBOYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkYXV0b3Byb2dyZXNzID0gZmFsc2U7DQoNCgkvKioNCgkqIAlUaGUgZHJvcGJveCBpbmZvIEZpbGUgTmFtZQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG1hbnVhbHByb2dyZXNzID0gZmFsc2U7DQoNCgkvKioNCgkqIAlUaGUgZHJvcGJveCBpbmZvIEZpbGUgTmFtZQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGF1dG9saXN0aW5nID0gZmFsc2U7DQoNCgkvKioNCgkqIAlUaGUgZHJvcGJveCBpbmZvIEZpbGUgTmFtZQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG1hbnVhbGxpc3RpbmcgPSBmYWxzZTsNCg0KCS8qKg0KCSogCWNoZWNrIERyb3Bib3ggTG9jYWwgTGlzdGluZw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RG93bmxvYWRMaW5rcygmJHNlcm1vbikNCgl7DQoJCSRsaW5rcyA9IGFycmF5KCk7DQoJCS8vIEdldCBsb2NhbCBrZXkNCgkJJGxvY2Fsa2V5ID0gc2VsZjo6Z2V0TG9jYWxLZXkoKTsNCgkJLy8gZGVjcnlwdCB0aGUgdXJscw0KCQkkc2FmZSA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRsb2NhbGtleSwgMjU2KTsNCgkJLy8gaW50ZXJuYWwgZG93bmxvYWQgdXJsDQoJCSRrZXlDb3VudGVyID0gbmV3IFxzdGRDbGFzczsNCgkJJGtleUNvdW50ZXItPnNlcm1vbiA9ICRzZXJtb24tPmlkOw0KCQlpZiAoJHNlcm1vbi0+cHJlYWNoZXIpDQoJCXsNCgkJCSRrZXlDb3VudGVyLT5wcmVhY2hlciA9ICRzZXJtb24tPnByZWFjaGVyOw0KCQl9DQoJCWlmICgkc2VybW9uLT5zZXJpZXMpDQoJCXsNCgkJCSRrZXlDb3VudGVyLT5zZXJpZXMgPSAkc2VybW9uLT5zZXJpZXM7DQoJCX0NCgkJJGtleUNvdW50ZXIgPSBiYXNlNjRfZW5jb2RlKCRzYWZlLT5lbmNyeXB0U3RyaW5nKGpzb25fZW5jb2RlKCRrZXlDb3VudGVyKSkpOw0KCQkkdG9rZW4gPSBKb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCk7DQoJCSRkb3dubG9hZFVSTCA9ICdpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1kb3dubG9hZC5maWxlJmtleT0nLiRrZXlDb3VudGVyLicmdG9rZW49Jy4kdG9rZW47DQoJCS8vIGNoZWNrIGlmIGxvY2FsIC5odGFjY2VzcyBzaG91bGQgYmUgc2V0DQoJCSRzZXRIdGFjY2VzcyA9IGZhbHNlOw0KCQkkb25jbGljayA9ICcgb25jbGljaz0ic2VybW9uQ291bnRlcihcJycuJGtleUNvdW50ZXIuJ1wnLFwnRklMRU5BTUVcJyk7Iic7DQoJCS8vIGNoZWNrIHdoYXQgc291cmNlIG9mIG91ciBsaW5rDQoJCXN3aXRjaCAoJHNlcm1vbi0+c291cmNlKQ0KCQl7DQoJCQljYXNlIDE6DQoJCQkJLy8gbG9jYWwgZmlsZSBnZXQgbG9jYWwgZm9sZGVyIGFuZCBjaGVjayBpZiBvdXRzaWRlIHJvb3QgKGlmIG5vdCB0aGVuIGFsbG93IGRpcmVjdCkNCgkJCQkkbG9jYWxGb2xkZXIgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnbG9jYWxmb2xkZXInLCBKUEFUSF9ST09ULicvaW1hZ2VzJykuJy8nOw0KCQkJCS8vIHNob3VsZCB3ZSBhbGxvdyBkaXJlY3QgZG93bmxvYWRzDQoJCQkJJGFsbG93RGlyZWN0ID0gZmFsc2U7DQoJCQkJaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlICYmIHN0cnBvcygkbG9jYWxGb2xkZXIsIEpQQVRIX1JPT1QpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRhbGxvd0RpcmVjdCA9IHRydWU7DQoJCQkJCSRsb2NhbEZvbGRlclVSTCA9IFVyaTo6cm9vdCgpLnN0cl9yZXBsYWNlKEpQQVRIX1JPT1QsICcnLCAkbG9jYWxGb2xkZXIpOw0KCQkJCQkvLyBpbnN1cmUgbm8gZG91YmxlIC8vIGlzIGluIHRoZSBVUkwNCgkJCQkJJGxvY2FsRm9sZGVyVVJMID0gc3RyX3JlcGxhY2UoJy8vJywgJy8nLCAkbG9jYWxGb2xkZXJVUkwpOw0KCQkJCQkkbG9jYWxGb2xkZXJVUkwgPSBzdHJfcmVwbGFjZSgnOi8nLCAnOi8vJywgJGxvY2FsRm9sZGVyVVJMKTsNCgkJCQl9DQoJCQkJLy8gaW5zdXJlIG5vIGRvdWJsZSAvLyBpcyBpbiB0aGUgcGF0aCBuYW1lDQoJCQkJJGxvY2FsRm9sZGVyID0gc3RyX3JlcGxhY2UoJy8vJywgJy8nLCAkbG9jYWxGb2xkZXIpOw0KCQkJCSRsb2NhbEZvbGRlciA9IHN0cl9yZXBsYWNlKCc6LycsICc6Ly8nLCAkbG9jYWxGb2xkZXIpOw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkc2VybW9uLT5sb2NhbF9maWxlcykpDQoJCQkJew0KCQkJCQlmb3JlYWNoKCRzZXJtb24tPmxvY2FsX2ZpbGVzIGFzICRrZXkpDQoJCQkJCXsNCgkJCQkJCWlmICgxID09ICRzZXJtb24tPmxpbmtfdHlwZSB8fCAhJGFsbG93RGlyZWN0KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgZmlsZSBuYW1lIHVzZSB0aGUgc2FtZSBtZXRob2QgYXMgdGhlIGF1dG8NCgkJCQkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJGtleSwnbG9jYWwnKTsNCgkJCQkJCQkkbG9ja2VkRm9sZGVyUGF0aCA9IGJhc2U2NF9lbmNvZGUoJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGxvY2FsRm9sZGVyLiRrZXkpKTsNCgkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJGRvd25sb2FkVVJMLicmbGluaz0nLiRsb2NrZWRGb2xkZXJQYXRoLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWUpOw0KCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZWlmICgyID09ICRzZXJtb24tPmxpbmtfdHlwZSAmJiAkYWxsb3dEaXJlY3QpDQoJCQkJCQl7DQoJCQkJCQkJJGZpbGVuYW1lID0gJGtleTsNCgkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJGxvY2FsRm9sZGVyVVJMLiRrZXk7DQoJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJJHNldEh0YWNjZXNzID0gdHJ1ZTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgMjoNCgkJCQkvLyBEcm9wYm94IGdldCBnbG9iYWwgZHJvcGJveCBzd2l0Y2ggDQoJCQkJJGRyb3Bib3hCdXR0b24gPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnYWRkX3RvX2Ryb3Bib3gnLCAxKTsNCgkJCQlpZiAoMSA9PSAkc2VybW9uLT5idWlsZCkNCgkJCQl7DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkc2VybW9uLT5tYW51YWxfZmlsZXMpKQ0KCQkJCQl7DQoJCQkJCQkvLyBtYW51YWwgZHJvcGJveA0KCQkJCQkJZm9yZWFjaCgkc2VybW9uLT5tYW51YWxfZmlsZXMgYXMgJGtleSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBnZXQgdGhlIGxpbmsNCgkJCQkJCQkkZHJvcFVSTCA9IHNlbGY6OmdldERyb3Bib3hMaW5rKCdtYW51YWwnLDEsJGtleSk7DQoJCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJGtleSwnZHJvcGJveF9tYW51YWwnKTsNCgkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9IEpvb21sYV9fX2Q0Yzc2MDk5XzRjMzJfNDA4YV84NzAxX2QwYTcyNDQ4NGRmZF9fX1Bvd2VyOjpfKCRkb3dubG9hZFVSTC4nJmxpbms9Jy4kZHJvcFVSTC4nJmZpbGVuYW1lPScuJGZpbGVuYW1lKTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzdHJfcmVwbGFjZSgnVkRNX3BMZUtfaDB1RXIvJywgJycsICRrZXkpOw0KCQkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gcnRyaW0oJHNhZmUtPmRlY3J5cHRTdHJpbmcoYmFzZTY0X2RlY29kZSgkZHJvcFVSTCkpKTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGJ1aWxkIGRyb3Bib3ggc3dpdGNoIGlmIG5lZWRlZA0KCQkJCQkJCWlmICgxID09ICRkcm9wYm94QnV0dG9uICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHNlcm1vbi0+ZHJvcGJveF9idXR0b25zWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnP2RsPTEnLCAnP2RsPTAnLCBydHJpbSgkc2FmZS0+ZGVjcnlwdFN0cmluZyhiYXNlNjRfZGVjb2RlKCRkcm9wVVJMKSkpKTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja19kcm9ib3hbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+YnVpbGQpDQoJCQkJew0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHNlcm1vbi0+YXV0b19zZXJtb25zKSkNCgkJCQkJew0KCQkJCQkJLy8gYXV0b21hdGljIGRyb3Bib3gNCgkJCQkJCWZvcmVhY2goJHNlcm1vbi0+YXV0b19zZXJtb25zIGFzICRmaWxlbmFtZSA9PiAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RHJvcGJveExpbmsoJ2F1dG8nLDEsJGtleSk7DQoJCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgKHVzZSB0aGUgc2FtZSBtZXRob2QgYXMgdGhlIGF1dG8NCgkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9IEpvb21sYV9fX2Q0Yzc2MDk5XzRjMzJfNDA4YV84NzAxX2QwYTcyNDQ4NGRmZF9fX1Bvd2VyOjpfKCRkb3dubG9hZFVSTC4nJmxpbms9Jy4kZHJvcFVSTC4nJmZpbGVuYW1lPScuJGZpbGVuYW1lKTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gcnRyaW0oJHNhZmUtPmRlY3J5cHRTdHJpbmcoYmFzZTY0X2RlY29kZSgkZHJvcFVSTCkpKTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGJ1aWxkIGRyb3Bib3ggc3dpdGNoIGlmIG5lZWRlZA0KCQkJCQkJCWlmICgxID09ICRkcm9wYm94QnV0dG9uICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHNlcm1vbi0+ZHJvcGJveF9idXR0b25zWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnP2RsPTEnLCAnP2RsPTAnLCBydHJpbSgkc2FmZS0+ZGVjcnlwdFN0cmluZyhiYXNlNjRfZGVjb2RlKCRkcm9wVVJMKSkpKTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja19kcm9ib3hbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgMzoNCgkJCQkvLyB1cmwgZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCSRmaWxlbmFtZSA9IHNlbGY6OmdldERvd25sb2FkRmlsZU5hbWUoJHNlcm1vbiwkc2VybW9uLT51cmwsJ3VybCcpOw0KCQkJCWlmICgxID09ICRzZXJtb24tPmxpbmtfdHlwZSkNCgkJCQl7DQoJCQkJCSRsb2NrZWRVUkwgPSBiYXNlNjRfZW5jb2RlKCRzYWZlLT5lbmNyeXB0U3RyaW5nKCRzZXJtb24tPnVybCkpOw0KCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJGRvd25sb2FkVVJMLicmbGluaz0nLiRsb2NrZWRVUkwuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZSk7DQoJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlKQ0KCQkJCXsNCgkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRzZXJtb24tPnVybDsNCgkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQl9DQoJCS8vIHJlbW92ZSB0aGUgdmFsdWVzIG5vIGxvbmdlciBuZWVkZWQNCgkJdW5zZXQoJHNlcm1vbi0+bG9jYWxfZmlsZXMpOw0KCQl1bnNldCgkc2VybW9uLT5tYW51YWxfZmlsZXMpOw0KCQl1bnNldCgkc2VybW9uLT5hdXRvX3Nlcm1vbnMpOw0KCQl1bnNldCgkc2VybW9uLT51cmwpOw0KCQkvLyBzaG91bGQgd2Ugc2V0IHRoZSBsb2NhbCAuaHRhY2Nlc3MgZm9yIHRoZSBkb3dubG9hZCBmb2xkZXINCgkJaWYgKCRzZXRIdGFjY2VzcykNCgkJew0KCQkJLy8gVE9ETyB3ZSBtYXkgbmVlZCB0byBhZGQgdGhpcyBsYXR0ZXIgdG8gZW5mb3JjZSBkb3dubG9hZCBvZiBmaWxlcy4NCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREcm9wYm94TGluaygkdHlwZSwgJHJldHVybiA9IGZhbHNlLCAkdGFyZ2V0ID0gZmFsc2UpDQoJew0KCQkvLyBtYWtlIHN1cmUgYWxsIGRlZmF1bHRzIGFyZSBzZXQNCgkJJGZvdW5kID0gc2VsZjo6Y2hlY2tEcm9wYm94TG9jYWxMaXN0aW5nKCR0eXBlKTsNCgkJaWYgKCRmb3VuZCkNCgkJew0KCQkJc3dpdGNoKCRyZXR1cm4pDQoJCQl7DQoJCQkJY2FzZSAxOg0KCQkJCQkvLyByZXR1cm4gYSBsaW5rDQoJCQkJCWlmIChpc3NldChzZWxmOjokeydsaW5rc19kcm9wYm94XycuJHR5cGV9WyR0YXJnZXRdKSkNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHNlbGY6OiR7J2xpbmtzX2Ryb3Bib3hfJy4kdHlwZX1bJHRhcmdldF07DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAyOg0KCQkJCQkvLyByZXR1cm4gYWxsIGxpbmtzDQoJCQkJCXJldHVybiBzZWxmOjokeydsaW5rc19kcm9wYm94XycuJHR5cGV9Ow0KCQkJCQlicmVhazsNCgkJCQlkZWZhdWx0IDoNCgkJCQkJLy8ganVzdCBjb25maXJtIHRoYXQgaXQgaXMgc2V0DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb3VudERvd25sb2FkKCRjb3VudGVyLCRmaWxlbmFtZSkNCgl7DQoJCS8vIEdldCBsb2NhbCBrZXkNCgkJJGxvY2Fsa2V5ID0gc2VsZjo6Z2V0TG9jYWxLZXkoKTsNCgkJJG9wZW5lciA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRsb2NhbGtleSwgMjU2KTsNCgkJJGNvdW50ZXIgPSBqc29uX2RlY29kZShydHJpbSgkb3BlbmVyLT5kZWNyeXB0U3RyaW5nKGJhc2U2NF9kZWNvZGUoJGNvdW50ZXIpKSkpOw0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGNvdW50ZXIpKQ0KCQl7DQoJCQkkY291bnRlci0+ZmlsZW5hbWUgPSAkZmlsZW5hbWU7DQoJCQkvLyBzZXQgdGhlIGRhdGUgb2JqZWN0DQoJCQkkZGF0ZSA9IEZhY3Rvcnk6OmdldERhdGUoKTsNCgkJCS8vIGZpcnN0IGNoZWNrIGlmIHRoaXMgZmlsZSBhbHJlYWR5IGhhcyBzdGF0aXN0aWNzDQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCdjb3VudGVyJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3N0YXRpc3RpYycpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3Nlcm1vbicpIC4gJyA9ICcuIChpbnQpICRjb3VudGVyLT5zZXJtb24pOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZmlsZW5hbWUnKSAuICcgPSAnLiAkZGItPnF1b3RlKCRjb3VudGVyLT5maWxlbmFtZSkpOw0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJHN0YXRpc3RpYyA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJCS8vIGFscmVhZHkgaGFzIGFuIGVudHJ5DQoJCQkJJHN0YXRpc3RpYy0+Y291bnRlcisrOw0KCQkJCSRzdGF0aXN0aWMtPm1vZGlmaWVkID0gJGRhdGUtPnRvU3FsKCk7DQoJCQkJLy8gdXBkYXRlIHRoZSBlbnRyeQ0KCQkJCXJldHVybiAkZGItPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX3N0YXRpc3RpYycsICRzdGF0aXN0aWMsICdpZCcpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHNldCBhIG5ldyBlbnRyeQ0KCQkJCSRjb3VudGVyLT5jb3VudGVyID0gMTsNCgkJCQkkY291bnRlci0+cHVibGlzaGVkID0gMTsNCgkJCQkkY291bnRlci0+Y3JlYXRlZCA9ICRkYXRlLT50b1NxbCgpOw0KCQkJCSRjb3VudGVyLT5hY2Nlc3MgPSAxOw0KCQkJCSRjb3VudGVyLT52ZXJzaW9uID0gMTsNCgkJCQkvLyBzZXQgYSBuZXcgZW50cnkNCgkJCQkkZG9uZSA9ICRkYi0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJGNvdW50ZXIpOw0KCQkJCS8vIGlmIGRvbmUgcmV0dXJuIGxhc3QgdXNlZCBpZA0KCQkJCWlmICgkZG9uZSkNCgkJCQl7DQoJCQkJCSRuZXdJZCA9ICAkZGItPmluc2VydGlkKCk7DQoJCQkJCS8vIG1ha2Ugc3VyZSB0aGUgYWNjZXNzIG9mIGFzc2V0IGlzIHNldA0KCQkJCQlyZXR1cm4gc2VsZjo6c2V0QXNzZXQoJG5ld0lkLCdzdGF0aXN0aWMnKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldERvd25sb2FkRmlsZU5hbWUoJiRzZXJtb24sJGZpbGUsJHR5cGUpDQoJew0KCQkvLyBmaXJzdCBnZXQgZmlsZSBuYW1lIGFuZCBmaWxlIHR5cGUNCgkJJGZpbGUgPSBzdHJfcmVwbGFjZSgnVkRNX3BMZUtfaDB1RXIvJywgJycsICRmaWxlKTsNCgkJJGZpbGVUeXBlID0gcGF0aGluZm8oJGZpbGUsIFBBVEhJTkZPX0VYVEVOU0lPTik7DQoJCWlmICgkZmlsZVR5cGUpDQoJCXsNCgkJCSRmaWxlID0gc3RyX3JlcGxhY2UoJy4nLiRmaWxlVHlwZSwgJycsICRmaWxlKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRmaWxlVHlwZSA9ICdlcnJvcic7DQoJCX0NCgkJLy8gbm93IGJ1aWxkIGRvd25sb2FkIG5hbWUNCgkJJGRvd25sb2FkTmFtZSA9IGFycmF5KCk7DQoJCS8vIGJ1aWxkIHRoZSBEb3dubG9hZCBGaWxlIE5hbWUgLSBmaXJzdCBhZGQgdGhlIHByZWFjaGVyIG5hbWUgaWYgc2V0DQoJCWlmICgkc2VybW9uLT5wcmVhY2hlcikNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2VybW9uLT5wcmVhY2hlcl9uYW1lLCdVJyk7DQoJCX0NCgkJLy8gYWRkIHRoZSBzZXJpZXMgbmFtZSBpZiBzZXQNCgkJaWYgKCRzZXJtb24tPnNlcmllcykNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2VybW9uLT5zZXJpZXNfbmFtZSwnRicpOw0KCQl9DQoJCS8vIGFkZCB0aGUgY2F0ZWdvcnkgbmFtZSBpZiBzZXQNCgkJaWYgKCRzZXJtb24tPmNhdGlkICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPmNhdGVnb3J5KSkNCgkJew0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2VybW9uLT5jYXRlZ29yeSwgJ0YnKTsNCgkJfQ0KCQlpZiAoJ2Ryb3Bib3hfbWFudWFsJyA9PSAkdHlwZSB8fCAnbG9jYWwnID09ICR0eXBlKQ0KCQl7DQoJCQkvLyBhZGQgdGhlIG1haW4gZmlsZSBuYW1lDQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZXJtb24tPm5hbWUsJ0YnKTsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJGZpbGUsJ0YnKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+bmFtZSwnRicpOw0KCQkJaWYgKCdlcnJvcicgPT0gJGZpbGVUeXBlIHx8IHN0cnBvcygnPycsICRmaWxlVHlwZSkgIT09IGZhbHNlIHx8IHN0cnBvcygnJicsICRmaWxlVHlwZSkgIT09IGZhbHNlICkNCgkJCXsNCgkJCQkkZmlsZVR5cGUgPSAnbXAzJzsgLy8gVE9ETyB3ZSBkb24ndCBrbm93IHRoZSB1cmwgZmlsZXR5cGUgKHNldHRpbmcgdG8gbXAzIGJ1dCB0aGlzIGNvdWxkIGJlIHdyb25nKQ0KCQkJfQ0KCQl9DQoJCS8vIG5vdyBidWlsZCB0aGUgZG93bmxvYWQgZmlsZSBuYW1lDQoJCXJldHVybiBpbXBsb2RlKCdfXycsICRkb3dubG9hZE5hbWUpLicuJy4kZmlsZVR5cGU7DQoJfQ0KDQoJLyoqDQoJKiAJY2hlY2sgRHJvcGJveCBMb2NhbCBMaXN0aW5nIChkbyB3ZSBoYXZlIHRoZSBmaWxlcykNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrRHJvcGJveExvY2FsTGlzdGluZygkdHlwZSkNCgl7DQoJCSRmaWxlUGF0aCA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldFBhdGgoJHR5cGUpOw0KCQkvLyBnZXQgdGhlIGxvY2FsIGxpbmtzDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokeydsaW5rc19kcm9wYm94XycuJHR5cGV9KSkNCgkJew0KCQkJLy8gcmV0dXJuIHRydWUgd2UgaGF2ZSBsaW5rcyBsb2FkZWQNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCWVsc2VpZiAoKCRqc29ubGlua3MgPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRDb250ZW50KCRmaWxlUGF0aCwgRkFMU0UpKSAhPT0gRkFMU0UpDQoJCXsJCQkNCgkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkanNvbmxpbmtzKSkNCgkJCXsNCgkJCQkvLyBnZXQgc2F2ZWQgbGlua3MNCgkJCQkkc3RvcmVhZ2UgPSBqc29uX2RlY29kZSgkanNvbmxpbmtzLHRydWUpOw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkc3RvcmVhZ2UpKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgc2F2ZWQgbGlua3MNCgkJCQkJc2VsZjo6JHsnbGlua3NfZHJvcGJveF8nLiR0eXBlfSA9ICRzdG9yZWFnZTsNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWxlUGF0aCgkdHlwZSwgJG5hbWUgPSAnbGlzdGluZycpDQoJew0KCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR7JHR5cGUuJG5hbWV9KSkNCgkJew0KCQkJLy8gR2V0IGxvY2FsIGtleQ0KCQkJJGxvY2Fsa2V5ID0gc2VsZjo6Z2V0TG9jYWxLZXkoKTsNCgkJCS8vIHNldCB0aGUgbmFtZQ0KCQkJJGZpbGVOYW1lID0gbWQ1KCR0eXBlLiRuYW1lLiRsb2NhbGtleSk7DQoJCQkvLyBzZXQgZmlsZSBwYXRoCQkJDQoJCQlzZWxmOjokeyR0eXBlLiRuYW1lfSA9IEpQQVRIX0NPTVBPTkVOVF9TSVRFLicvaGVscGVycy8nLiRmaWxlTmFtZS4nLmpzb24nOw0KCQl9DQoJCS8vIHJldHVybiB0aGUgcGF0aA0KCQlyZXR1cm4gc2VsZjo6JHskdHlwZS4kbmFtZX07DQoJfQ0KDQoJLyoqDQoJKiAJZ2V0IHRoZSBsb2NhbGtleQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGxvY2Fsa2V5ID0gZmFsc2U7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMb2NhbEtleSgpDQoJew0KCQlpZiAoIXNlbGY6OiRsb2NhbGtleSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBtYWluIGtleQ0KCQkJc2VsZjo6JGxvY2Fsa2V5ID0gbWQ1KEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdsaW5rX2VuY3J5cHRpb24nLCAnbG9jYWxLZXkzNGZkV0VrbCcpKTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGxvY2Fsa2V5Ow0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXBkYXRlRHJvcGJveCgkdHlwZSA9IGZhbHNlLCAkZm9yY2UgPSBmYWxzZSkNCgl7DQoJCS8vIGxvYWQgdGhlIGZpbGUNCgkJSkxvYWRlcjo6aW1wb3J0KCdkcm9wYm94dXBkYXRlcicsIEpQQVRIX0NPTVBPTkVOVF9TSVRFLicvaGVscGVycycpOw0KCQkvLyB1cGRhdGUgdHlwZXMNCgkJJHR5cGVzID0gYXJyYXkoJ21hbnVhbCcsJ2F1dG8nKTsNCgkJLy8gb2theSBub3cgdXBkYXRlIHRoaXMgdHlwZQ0KCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHR5cGUpICYmIGluX2FycmF5KCR0eXBlLCR0eXBlcykpDQoJCXsNCgkJCSRkcm9wYm94ID0gbmV3IERyb3Bib3h1cGRhdGVyKCk7DQoJCQlyZXR1cm4gJGRyb3Bib3gtPnVwZGF0ZSgkdHlwZSwkZm9yY2UpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9', '', '', '', '', '', 'CQlzZWxmOjpsb2FkRHJvcGJveEFqYXgoJGRvY3VtZW50KTs=', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdIChodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vU2VybW9uRGlzdHJpYnV0b3IvSm9vbWxhLTMtQ29tcG9uZW50L21hc3Rlci9hZG1pbi9hc3NldHMvaW1hZ2VzL2NvbXBvbmVudC0zMDAuanBnICJUaGUgIyMjQ29tcG9uZW50X25hbWUjIyMiKQ0KDQojIyNERVNDUklQVElPTiMjIw0KDQpUaGUgYmVzdCB3YXkgdG8gc2VlIGFsbCB5b3VyIG9wdGlvbnMgaXMgdG8gaW5zdGFsbCB0aGlzIGNvbXBvbmVudCBvbiB5b3UgSm9vbWxhIHdlYnNpdGUgYW5kIHRlc3QgYWxsIGZlYXR1cmVzIHlvdXJzZWxmLiBIZXJlIGlzIGEgW2RpcmVjdCBkb3dubG9hZCBsaW5rXSAoaHR0cHM6Ly9naXRodWIuY29tL1Nlcm1vbkRpc3RyaWJ1dG9yL0pvb21sYS0zLUNvbXBvbmVudC9hcmNoaXZlL21hc3Rlci56aXApDQoNCiAqKklmIHlvdSBsaWtlIG91ciBjb21wb25lbnQgcGxlYXNlIHJhdGUgaXQgb24gdGhlIFtKb29tbGEgSW5kZXhdIChodHRwOi8vZXh0ZW5zaW9ucy5qb29tbGEub3JnL2V4dGVuc2lvbnMvZXh0ZW5zaW9uL2xpdmluZy9yZWxpZ2lvbi9zZXJtb24tZGlzdHJpYnV0b3IpKioNCg0KIyMjIEV4YW1wbGUgV2Vic2l0ZSwgVGhhdCBIYXMgT3ZlciA2MDAwIEF1ZGlvIEZpbGVzDQoNCltMb3VkVm9pY2Uub3JnXSAoaHR0cDovL3d3dy5sb3Vkdm9pY2Uub3JnKQ0KDQojIyMgU29tZSBWaWRlbyBEZW1vbnN0cmF0aW9ucw0KDQorIFtTZXR1cCBvdmVydmlld10gKGh0dHBzOi8veW91dHUuYmUveU1QcDFDcDNXXzA/dD0yMG04cykNCisgW1NldHVwIERyb3Bib3hdIChodHRwczovL3lvdXR1LmJlL2J0cEtGRGswLWRJKQ0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10gKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXSAobWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10gKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCg0KIyMgQnVpbGQgVGltZSA6aG91cmdsYXNzOg0KDQoqKiMjI3RvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI3RvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKiAoYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzYXZlZCAtDQpkdWUgdG8gW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0gKGh0dHBzOi8vd3d3LnZkbS5pby9qb29tbGEtY29tcG9uZW50LWJ1aWxkZXIpKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdIChodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0gKG1haWx0bzpqb29tbGFAdmRtLmlvKQ==', '', '', 'A sermon distributor that links to Dropbox.', '', '', 'SermonDistributor CB', '', '', '', '', 'https://www.vdm.io/updates/sermondistributor_update_server.xml', 'https://www.vdm.io/', '', 'oz68X4QEkJLSanYLWykDILqykGlGZ/7ZfYrbysptSlA=', '', '', 2, 1, '', 1, 52), +(23, 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, '', '', '', '', '', '', 1, '', 1, '', '', 1, '{}', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.0', 'Copyright (C) 2015. All Rights Reserved', '2016-06-28 05:19:42', '', '7ciMzl2FIRZhkqI3MKfNRBqkUFXJiJZYyFCv8JjP32w=', '13ZRKOEE+tbXzZsi5sW0onLPXpxNcZDkm/h8y/aIeJQ=', '', 'iyhjiaUATJV6Eb/6DmVfzoauOOgZ2KePKC4IW2tFF1Y=', '', '', '', 1, '', 'The internal Joomla API for currency conversion per/user location.', 'joomla@vdm.io', '', 'http://vdm.bz/get-location-data-key', 'oQvbVMpd0fOhPxFeJB8DYgd6WWK00uEEHYPl9Ew0KZ5xvyit+X8iFY6Owy+9bC097N6k4CYNfTNHJQ21FzuRsg==', '', '121fc9c5-efcc-4473-9b9f-ca2bea65ee13', 'images/vdm/LOCATION500.jpg', '', 'https://github.com/vdm-io/JCB-Packages/raw/master/JCB_locationData.zip', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2021-03-08 03:11:50', 1, 'Currency Method', 'currencymethod', '', 4, 'CQlzZWxmOjp0aGVRdWV1ZSgkZG9jdW1lbnQpOw==', 'CS8qKg0KCSogCVRoZSB1c2VyIG5vdGljZSBpbmZvIEZpbGUgTmFtZQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHVzZXJub3RpY2UgPSBmYWxzZTsNCg0KCS8qKg0KCSogCUxvYWQgdGhlIFVwZGF0ZSBRdWV1ZSBBamF4IHRvIHBhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRoZVF1ZXVlKCRkb2N1bWVudCwgJGZvcmNlID0gZmFsc2UpDQoJew0KCQkvLyBzZXQgdGhlIHRpbWUNCgkJJG5vdyA9IEZhY3Rvcnk6OmdldERhdGUoKS0+dG9Vbml4KCk7DQoJCS8vIHNob3VsZCBhbiB1cGRhdGUgYmUgZm9yY2VkDQoJCSR1cGRhdGUgPSAxOyAvLyA8LS0gZG9u4oCZdCBmb3JjZSB1cGRhdGUNCgkJaWYgKCRmb3JjZSkNCgkJew0KCQkJJHVwZGF0ZSA9IDI7IC8vIDwtLSBmb3JjZSB1cGRhdGUNCgkJfQ0KCQkkZG9jdW1lbnQtPmFkZFNjcmlwdERlY2xhcmF0aW9uKCINCgkJCWpRdWVyeSh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJdGhlUXVldWUoKTsNCgkJCX0pOw0KCQkJZnVuY3Rpb24gdGhlUXVldWUoKSB7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJhZG1pbmlzdHJhdG9yL2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXgudGhlUXVldWUmZm9ybWF0PWpzb24nOw0KCQkJCXZhciByZXF1ZXN0ID0gJ3Rva2VuPSIuSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpLiImdGltZT0iLiRub3cuIiZmb3JjZT0iLiR1cGRhdGUuIic7DQoJCQkJcmV0dXJuIGpRdWVyeS5hamF4KHsNCgkJCQkJdHlwZTogJ0dFVCcsDQoJCQkJCXVybDogZ2V0VXJsLA0KCQkJCQlkYXRhVHlwZTogJ2pzb25wJywNCgkJCQkJZGF0YTogcmVxdWVzdCwNCgkJCQkJanNvbnA6ICdjYWxsYmFjaycNCgkJCQl9KTsNCgkJCX0NCgkJIik7DQoJfQ==', 'CS8qKg0KCSogCVRoZSBjb21wb25lbnQgcGFyYW1zDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zOw0KDQoJLyoqDQoJKiAJVGhlIG5vdGljZSBzd2l0Y2ggaWYgY3VybCBub3QgZm91bmQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRjdXJsRXJyb3JMb2FkZWQgPSBmYWxzZTsNCg0KCS8qKg0KCSogCUxvYWQgdGhlIGRhdGEgZm9yIElQIGFuZCBDdXJyZW5jeSANCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFtbW0NvbXBvbmVudF1dXSgkaXAsICRwcm90b2NvbCwgJGtleSwgJGJhc2UsICRtb2RlLCAkc3RyaW5nLCAkdmFsdWUpDQoJew0KCQkvLyB3ZSBzdGlsbCBuZWVkIHRvIGFkZCBrZXkgY2hlY2sNCgkJLy8gaWYgbm8gaXAgZGV0ZWN0ZWQgdHJ5IGdldHRpbmcgdGhlIGlwIG9yIHJldHVybiB0aGUgZGVmYXVsdA0KCQlpZiAoISRpcCkNCgkJew0KCQkJaWYgKCRmb3VuZCA9IHNlbGY6OmdldElQKCkpDQoJCQl7DQoJCQkJLy8gbG9hZCB0aGUgcmVzdWx0cyBmb3VuZA0KCQkJCSRpcCA9ICRmb3VuZFsnaXAnXTsNCgkJCQkkcHJvdG9jb2wgPSAkZm91bmRbJ3Byb3RvY29sJ107DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IHRoZSBkZWZhdWx0DQoJCQkJJGlwID0gJzAuMC4wLjAnOw0KCQkJCSRwcm90b2NvbCA9IDE7DQoJCQl9DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB3ZSBoYXZlIHByb3RvY29sDQoJCWlmICghJHByb3RvY29sKQ0KCQl7DQoJCQlpZiAoISRwcm90b2NvbCA9IHNlbGY6OmlzVmFsaWRJUCgkaXAsICRzdHJpY3QgPSB0cnVlKSkNCgkJCXsNCgkJCQkvLyBzZXQgdGhlIGRlZmF1bHQNCgkJCQkkaXAgPSAnMC4wLjAuMCc7DQoJCQkJJHByb3RvY29sID0gMTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gc2VsZjo6Z2V0W1tbQ29tcG9uZW50XV1dRmFjdG9yeSgkaXAsICRwcm90b2NvbCktPmdldEluZm8oKGludCkgJG1vZGUsIChpbnQpICRzdHJpbmcsIChmbG9hdCkgJHZhbHVlLCAkYmFzZSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyAkZm9yY2VbW1tDb21wb25lbnRdXV1UYWJsZSA9IHRydWU7IA0KDQoJcHVibGljIHN0YXRpYyAkZGVmYXVsdENvbXBvbmVudCA9ICJjb21fW1tbY29tcG9uZW50XV1dIjsgDQoNCglwcm90ZWN0ZWQgc3RhdGljICRbW1tjb21wb25lbnRdXV1GYWN0b3J5ID0gYXJyYXkoKTsgDQoJDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRbW1tDb21wb25lbnRdXV1GYWN0b3J5KCRpcCwgJHByb3RvY29sKQ0KCXsNCgkJJGdldHRlciA9IG1kNSgkaXApOw0KCQlpZiAoIWlzc2V0KHNlbGY6OiRbW1tjb21wb25lbnRdXV1GYWN0b3J5WyRnZXR0ZXJdKSkNCgkJew0KCQkJLy8gbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlIGZhY3RvcnkgZmlsZQ0KCQkJaW5jbHVkZV9vbmNlICdbW1tjb21wb25lbnRdXV1mYWN0b3J5LnBocCc7DQoJCQkvLyBmaXJzdCBsb2FkIHRoZSBmYWN0b3J5DQoJCQlzZWxmOjokW1tbY29tcG9uZW50XV1dRmFjdG9yeVskZ2V0dGVyXSA9IG5ldyBbW1tDb21wb25lbnRdXV1GYWN0b3J5KCRpcCwgJHByb3RvY29sLCBzZWxmOjokZGVmYXVsdENvbXBvbmVudCwgc2VsZjo6JGZvcmNlW1tbQ29tcG9uZW50XV1dVGFibGUpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokW1tbY29tcG9uZW50XV1dRmFjdG9yeVskZ2V0dGVyXTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRleGNoYW5nZVJhdGVzID0gYXJyYXkoKTsgDQoNCgkvKioNCgkgKiByZXR1cm5zIEV4Y2hhbmdlUmF0ZSBmcm9tICNfXyMjI2NvbXBvbmVudCMjI19leGNoYW5nZV9yYXRlIGRhdGFiYXNlDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RXhjaGFuZ2VSYXRlKCRmcm9tLCAkZnJvbVZhbHVlLCAkdG8gPSAnVVNEJywgJHJldHJ5ID0gdHJ1ZSkNCgl7DQoJCS8vIG9ubHkgY29udGludWUgaWYgZnJvbSBhbmQgdG8gaXMgc2V0DQoJCWlmKCRmcm9tICYmICR0bykNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dKSkNCgkJCXsNCgkJCQlpZiAoJGZyb20gPT0gJHRvKQ0KCQkJCXsNCgkJCQkJLy8gaXQgaXMgdGhlIHNhbWUgY3VycmVuY3kgc28gc2V0IGFsbCBvbmUgb24gb25lDQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfSUQnXQkJPSBzdHJ0b2xvd2VyKCRmcm9tKS4nLScuc3RydG9sb3dlcigkZnJvbSk7DQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfTkFNRSddCQk9ICRmcm9tLiRmcm9tOw0KCQkJCQlzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFJ10JCT0gMS4wMDsNCgkJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9BU0snXQkJPSAxLjAwOw0KCQkJCQlzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFX0JJRCddCQk9IDEuMDA7DQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfREFURSddCQk9IDA7DQoJCQkJCS8vIG5vdyBzZXQgdGhlIG1vbmV5DQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfTU9ORVknXQkJPSBzZWxmOjptYWtlTW9uZXkoc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURSddLCAkZnJvbSk7DQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfQVNLX01PTkVZJ10JPSBzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFX01PTkVZJ107DQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfQklEX01PTkVZJ10JPSBzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFX01PTkVZJ107DQoJCQkJCWlmICghJGZyb21WYWx1ZSkNCgkJCQkJew0KCQkJCQkJJGZyb21WYWx1ZSA9IDEuMDA7DQoJCQkJCX0NCgkJCQkJLy8gc2V0IHRoZSBjb252ZXJ0aW9uDQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfRlJPTSddCQk9IChmbG9hdCkgJGZyb21WYWx1ZTsNCgkJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9GUk9NX01PTkVZJ10JPSBzZWxmOjptYWtlTW9uZXkoc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9GUk9NJ10sICRmcm9tKTsNCgkJCQkJLy8gY2FsY3VsYXRlIHRoZSBuZXcgdmFsdWUNCgkJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9UTyddCQk9IChmbG9hdCkgJGZyb21WYWx1ZTsNCgkJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9UT19NT05FWSddCT0gc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9GUk9NX01PTkVZJ107DQoJCQkJCQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXTsJCQ0KCQkJCX0NCgkJCQkvLyB0aGUgZ2V0IHZhbHVlcw0KCQkJCSRnZXQgPSBhcnJheSgNCgkJCQkJJ0VYQ0hBTkdFX1JBVEVfSUQnCT0+ICdhLmFsaWFzJywgDQoJCQkJCSdFWENIQU5HRV9SQVRFX05BTUUnCT0+ICdhLm5hbWUnLCANCgkJCQkJJ0VYQ0hBTkdFX1JBVEUnCQk9PiAnYS5yYXRlJywNCgkJCQkJJ0VYQ0hBTkdFX1JBVEVfQVNLJwk9PiAnYS5hc2snLA0KCQkJCQknRVhDSEFOR0VfUkFURV9CSUQnCT0+ICdhLmJpZCcsDQoJCQkJCSdFWENIQU5HRV9SQVRFX0RBVEUnCT0+ICdhLmRhdGVfcmF0ZScpOw0KCQkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCSRxdWVyeQ0KCQkJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheV92YWx1ZXMoJGdldCksYXJyYXlfa2V5cygkZ2V0KSkpDQoJCQkJCS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fIyMjY29tcG9uZW50IyMjX2V4Y2hhbmdlX3JhdGUnLCAnYScpKQ0KCQkJCQktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmZyb20nKSAuICcgPSAnLiAkZGItPnF1b3RlKCRmcm9tKSkNCgkJCQkJLT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS50bycpIC4gJyA9ICcuICRkYi0+cXVvdGUoJHRvKSkNCgkJCQkJLT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5wdWJsaXNoZWQnKSAuICcgPSAxJyk7DQoJCQkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQkJew0KCQkJCQkkcmF0ZXMgPSAkZGItPmxvYWRBc3NvYygpOw0KCQkJCQkvLyBsb2FkIGluIHRvIGFjdGl2ZSBkYXRhDQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b10gPSBhcnJheSgpOw0KCQkJCQlmb3JlYWNoICgkcmF0ZXMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQkJCXsNCgkJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJGtleV0gPSAkdmFsdWU7DQoJCQkJCX0NCgkJCQkJLy8gbm93IHNldCB0aGUgbW9uZXkNCgkJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9NT05FWSddCQk9IHNlbGY6Om1ha2VNb25leShzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFJ10sICR0byk7DQoJCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfQVNLX01PTkVZJ10JPSBzZWxmOjptYWtlTW9uZXkoc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9BU0snXSwgJHRvKTsNCgkJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9CSURfTU9ORVknXQk9IHNlbGY6Om1ha2VNb25leShzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFX0JJRCddLCAkdG8pOw0KCQkJCX0NCgkJCQllbHNlaWYgKCRyZXRyeSkNCgkJCQl7DQoJCQkJCS8vIGlmIG5vdCBmb3VuZCB0cnkgYWdhaW4gd2l0aCBkZWZhdWx0DQoJCQkJCSRkZWZhdWx0ID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcyhzZWxmOjokZGVmYXVsdENvbXBvbmVudCktPmdldCgnY3VycmVuY3knLCAnVVNEJyk7DQoJCQkJCXJldHVybiBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJGZyb20sICRmcm9tVmFsdWUsICRkZWZhdWx0LCBmYWxzZSk7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gY29uZmlybSB0aGF0IGl0IHdhcyBhY3R1YWxseSBzZXQNCgkJCWlmIChpc3NldChzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dKSkNCgkJCXsNCgkJCQkvLyBjaGVjayBpZiBhIGZyb20gdmFsdWUgaXMgc2V0DQoJCQkJaWYgKCEkZnJvbVZhbHVlKQ0KCQkJCXsNCgkJCQkJJGZyb21WYWx1ZSA9IDEuMDA7DQoJCQkJfQ0KCQkJCS8vIHNldCB0aGUgY29udmVydGlvbg0KCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfRlJPTSddCQkJPSAoZmxvYXQpICRmcm9tVmFsdWU7DQoJCQkJc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9GUk9NX01PTkVZJ10JCT0gc2VsZjo6bWFrZU1vbmV5KHNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfRlJPTSddLCAkZnJvbSk7DQoJCQkJLy8gY2FsY3VsYXRlIHRoZSBuZXcgdmFsdWUNCgkJCQlzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFX1RPJ10JCQk9IGJjbXVsKHNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfRlJPTSddLCBzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydFWENIQU5HRV9SQVRFJ10sIDQpOw0KCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0VYQ0hBTkdFX1JBVEVfVE9fTU9ORVknXQkJPSBzZWxmOjptYWtlTW9uZXkoc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXVsnRVhDSEFOR0VfUkFURV9UTyddLCAkdG8pOw0KCQkJCS8vIGxvYWQgdGhlIGN1cnJlbmN5IHBhaXIgbmFtZQ0KCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0NVUlJFTkNZX1BBSVInXQkJCQk9ICRmcm9tLiR0bzsNCgkJCQkvLyBsb2FkIHRoZSBjdXJyZW5jeSBuYW1lcw0KCQkJCXNlbGY6OiRleGNoYW5nZVJhdGVzWyRmcm9tLiR0b11bJ0ZST01fQ1VSUkVOQ1lfQ09ERV9USFJFRSddCQkJPSAkZnJvbTsNCgkJCQlzZWxmOjokZXhjaGFuZ2VSYXRlc1skZnJvbS4kdG9dWydUT19DVVJSRU5DWV9DT0RFX1RIUkVFJ10JCQk9ICR0bzsNCgkJCQkvLyByZXR1cm4gdGhlIGV4Y2hhbmdlIHJhdGUNCgkJCQlyZXR1cm4gc2VsZjo6JGV4Y2hhbmdlUmF0ZXNbJGZyb20uJHRvXTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAgZ2V0IGlwIGFkZHJlc3MNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldElQKCRwbHVzUHJvdG9jb2wgPSB0cnVlLCAkdXNlUHJveHkgPSAnZ2xvYmFsJykNCgl7DQoJCS8vIGNoZWNrIGlmIHdlIHNob3VsZCB1c2UgcHJveHkNCgkJJHVzZVByb3h5ID0gKCR1c2VQcm94eSA9PSAnZ2xvYmFsJykgPyBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgndXNlX3Byb3h5JywgdHJ1ZSkgOiAgKCAoJHVzZVByb3h5KSA/IHRydWUgOiBmYWxzZSk7DQoJCS8vIGdldCB0aGUgaW5wdXQgdmFsdWVzDQoJCSRzZXJ2ZXIgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5pbnB1dC0+c2VydmVyOw0KCQkvLyBnZXQgcmVtb3RlIGFkZHJlc3MgKG1vc3Qgc2VjdXJlIElQIHNpbmNlIGl0IGlzIHNldCBieSB0aGUgc2VydmVyKQ0KCQkkZGVmYXVsdElQID0gJHNlcnZlci0+Z2V0KCdSRU1PVEVfQUREUicsIGZhbHNlLCAnQ01EJyk7DQoJCWlmICgkdXNlUHJveHkpDQoJCXsNCgkJCS8vIHByb3h5IG9wdGlvbnMgYXJyYXkNCgkJCSRwcm94aWVzRGVmYXVsdCA9IGFycmF5KA0KCQkJCSdIVFRQX1hfUkVBTF9JUCcsDQoJCQkJJ0hUVFBfQ0xJRU5UX0lQJywNCgkJCQknSFRUUF9UUlVFX0NMSUVOVF9JUCcsDQoJCQkJJ0hUVFBfWF9GV0RfSVBfQUREUicsDQoJCQkJJ0hUVFBfWF9GT1JXQVJERURfRk9SJywNCgkJCQknSFRUUF9YX0ZPUldBUkRFRCcsDQoJCQkJJ0hUVFBfRk9SV0FSREVEX0ZPUicsDQoJCQkJJ0hUVFBfRk9SV0FSREVEJywNCgkJCQknSFRUUF9WSUEnLA0KCQkJCSdIVFRQX1hfQ09NSU5HX0ZST00nLA0KCQkJCSdIVFRQX0NPTUlOR19GUk9NJw0KCQkJKTsNCgkJCSRwcm94aWVzID0gKGFycmF5KSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgncHJveGllcycsICRwcm94aWVzRGVmYXVsdCk7DQoNCgkJCWZvcmVhY2ggKCRwcm94aWVzIGFzICRwcm94eSkNCgkJCXsNCgkJCQlpZiAoJGlwID0gICRzZXJ2ZXItPmdldCgkcHJveHksIGZhbHNlLCAnU1RSSU5HJykpDQoJCQkJew0KCQkJCQkvLyBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIElQcw0KCQkJCQlpZiAoc3RycG9zKCRpcCwgJywnKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCSR0bXAgPSBleHBsb2RlKCcsICcsICRpcCk7DQoJCQkJCQkvLyBncmFiIHRoZSBmaXJzdCBJUA0KCQkJCQkJJGlwID0gcmVzZXQoJHRtcCk7DQoJCQkJCQkvLyBubyBsb25nZXIgbmVlZCB0aGlzDQoJCQkJCQl1bnNldCgkdG1wKTsNCgkJCQkJfQ0KCQkJCQkvLyBjaGVjayBpZiB2YWxpZCBJUCBpbiBzdHJpY3QgbW9kZQ0KCQkJCQlpZiAoJHByb3RvY29sID0gc2VsZjo6aXNWYWxpZElQKCRpcCwgdHJ1ZSkpDQoJCQkJCXsNCgkJCQkJCS8vIHJldHVybiBwcm94eSBJUCAobm90IHRoYXQgc2VjdXJlKQ0KCQkJCQkJaWYgKCRwbHVzUHJvdG9jb2wpDQoJCQkJCQl7DQoJCQkJCQkJcmV0dXJuIGFycmF5KCdpcCcgPT4gJGlwLCAncHJvdG9jb2wnID0+ICRwcm90b2NvbCk7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJcmV0dXJuICRpcDsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyBjaGVjayBpZiB2YWlsaWQgSVANCgkJaWYgKCRwcm90b2NvbCA9IHNlbGY6OmlzVmFsaWRJUCgkZGVmYXVsdElQLCB0cnVlKSkNCgkJew0KCQkJLy8gcmV0dXJuIGRlZmF1bHQgSVAgKG1vc3Qgc2VjdXJlKQ0KCQkJaWYgKCRwbHVzUHJvdG9jb2wpDQoJCQl7DQoJCQkJcmV0dXJuICBhcnJheSgnaXAnID0+ICRkZWZhdWx0SVAsICdwcm90b2NvbCcgPT4gJHByb3RvY29sKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlyZXR1cm4gJGRlZmF1bHRJUDsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KW0NVU1RPTUNPREU9aXNWYWxpZElQXQ0KCS8qKg0KCSogQHBhcmFtIGZsb2F0ICRhbW91bnQNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkZEN1cnJlbmN5KCRhbW91bnQsICRjb2RldGhyZWUgPSBmYWxzZSkNCgl7DQoJCXJldHVybiBzZWxmOjptYWtlTW9uZXkoJGFtb3VudCwgJGNvZGV0aHJlZSk7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkY3VycmVuY3lEZXRhaWxzID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VycmVuY3lEZXRhaWxzKCRjb2RldGhyZWUgPSBmYWxzZSkNCgl7DQoJCS8vIGNoZWNrIGlmIGN1cnJlbmN5IGNvZGV0aHJlZSBpcyBzZXQNCgkJaWYgKCEkY29kZXRocmVlKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIG1haW4gY3VycmVuY3kNCgkJCSRjb2RldGhyZWUgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKHNlbGY6OiRkZWZhdWx0Q29tcG9uZW50KS0+Z2V0KCdjdXJyZW5jeScsICdVU0QnKTsNCgkJfQ0KCQkvLyByZXR1cm4gY2FjaGVkIGRhdGEgaWYgc2V0DQoJCWlmICgkY29kZXRocmVlICYmICFpc3NldChzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRjb2RldGhyZWVdKSkNCgkJew0KCQkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgNCgkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQknYS5kZWNpbWFsc3ltYm9sJywnYS5wb3NpdGl2ZXN0eWxlJywnYS5uZWdhdGl2ZXN0eWxlJyksDQoJCQkJYXJyYXkoCSdjdXJyZW5jeV9pZCcsJ2N1cnJlbmN5X25hbWUnLCdjdXJyZW5jeV9jb2RldGhyZWUnLCdjdXJyZW5jeV9udW1lcmljY29kZScsJ2N1cnJlbmN5X3N5bWJvbCcsDQoJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCSdjdXJyZW5jeV9uZWdhdGl2ZXN0eWxlJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2N1cnJlbmN5JywgJ2EnKSk7DQoJCQlpZiAoaXNfbnVtZXJpYygkY29kZXRocmVlKSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmlkJykgLiAnID0gJy4gKGludCkgJGNvZGV0aHJlZSk7DQoJCQl9DQoJCQllbHNlaWYgKHN0cmxlbigkY29kZXRocmVlKSA9PSAzKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY29kZXRocmVlJykgLiAnID0gJy4kZGItPnF1b3RlKCRjb2RldGhyZWUpKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmNvZGV0aHJlZScpIC4gJyA9ICcuJGRiLT5xdW90ZSgnTk9ORScpKTsNCgkJCX0NCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCXNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0gPSAkZGItPmxvYWRPYmplY3QoKTsNCgkJCX0NCgkJfQ0KCQkvLyBtYWtlIHN1cmUgaXQgaGFzIGJlZW4gc2V0DQoJCWlmIChpc3NldChzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRjb2RldGhyZWVdKSkNCgkJew0KCQkJcmV0dXJuIHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPW1ha2VNb25leV0gDQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXSANCltDVVNUT01DT0RFPWdldEZpbGVQYXRoXQ0KW0NVU1RPTUNPREU9Z2V0RmlsZUNvbnRlbnRzXQ0KIFtDVVNUT01DT0RFPXdyaXRlRmlsZV0=', 'CS8qKg0KCSogCUxvYWQgdGhlIFVwZGF0ZSBRdWV1ZSBBamF4IHRvIHBhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRoZVF1ZXVlKCRkb2N1bWVudCwgJGZvcmNlID0gZmFsc2UpDQoJew0KCQkvLyBzZXQgdGhlIHRpbWUNCgkJJG5vdyA9IEZhY3Rvcnk6OmdldERhdGUoKS0+dG9Vbml4KCk7DQoJCS8vIHNob3VsZCBhbiB1cGRhdGUgYmUgZm9yY2VkDQoJCSR1cGRhdGUgPSAxOyAvLyA8LS0gZG9u4oCZdCBmb3JjZSB1cGRhdGUNCgkJaWYgKCRmb3JjZSkNCgkJew0KCQkJJHVwZGF0ZSA9IDI7IC8vIDwtLSBmb3JjZSB1cGRhdGUNCgkJfQ0KCQkkZG9jdW1lbnQtPmFkZFNjcmlwdERlY2xhcmF0aW9uKCINCgkJCWpRdWVyeSh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJdGhlUXVldWUoKTsNCgkJCX0pOw0KCQkJZnVuY3Rpb24gdGhlUXVldWUoKSB7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1hamF4LnRoZVF1ZXVlJmZvcm1hdD1qc29uJzsNCgkJCQl2YXIgcmVxdWVzdCA9ICd0b2tlbj0iLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4iJnRpbWU9Ii4kbm93LiImZm9yY2U9Ii4kdXBkYXRlLiInOw0KCQkJCXJldHVybiBqUXVlcnkuYWpheCh7DQoJCQkJCXR5cGU6ICdHRVQnLA0KCQkJCQl1cmw6IGdldFVybCwNCgkJCQkJZGF0YVR5cGU6ICdqc29ucCcsDQoJCQkJCWRhdGE6IHJlcXVlc3QsDQoJCQkJCWpzb25wOiAnY2FsbGJhY2snDQoJCQkJfSk7DQoJCQl9DQoJCSIpOw0KCX0=', '', '', '', '', '', 'CQlzZWxmOjp0aGVRdWV1ZSgkZG9jdW1lbnQpOw==', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS92ZG0taW8vSm9vbWxhLUN1cnJlbmN5LU1ldGhvZC9tYXN0ZXIvYWRtaW4vYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KV2hhdCBpcyB0aGlzPw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqIFRoaXMgaXMgYSAjIyNDb21wb25lbnRfbmFtZSMjIyBBUEkgQ29tcG9uZW50IGZvciBKb29tbGEhIHZlcnNpb24gMy54DQoqIERldGFpbGVkIGNoYW5nZXMgaW4gdGhlIFtDaGFuZ2Vsb2ddKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUxvY2F0aW9uLURhdGEvY29tbWl0cy9tYXN0ZXIpDQoNCldoYXQgaXMgIyMjQ29tcG9uZW50X25hbWUjIyMgQVBJPw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqICMjI0NvbXBvbmVudF9uYW1lIyMjISBpcyBhICoqSVAgdG8gQ291bnRyeSwgQ3VycmVuY3kgYW5kIEV4Y2hhbmdlIFJhdGUgQ29tcG9uZW50KiogKEFwcGxpY2F0aW9uIFByb2dyYW1tYWJsZSBJbnRlcmZhY2UpIHdoaWNoIGVuYWJsZXMgeW91IHRvIHJldHJpZXZlIHRoZSBjb3VudHJ5LCBjdXJyZW5jeSBhbmQgZXhjaGFuZ2UgcmF0ZSBkYXRhIGZyb20gYW55IGdpdmVuIElQLg0KKiBJdCdzIGEgKipmcmVlIGFuZCBPcGVuU291cmNlIHNvZnR3YXJlKiosIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgb3IgbGF0ZXINCiogVGhpcyBpcyBhIHNpbXBsZSBhbmQgcG93ZXJmdWwgYWRkb24gdG8gSm9vbWxhIGFuZCBpdCByZXF1aXJlcyBhIHNlcnZlciB3aXRoIFBIUCBhbmQgTXlTUUwgd2l0aCB0aGUgSm9vbWxhIDMueCBmcmFtZXdvcmsgaW5zdGFsbGVkIHRvIHJ1biBpdC4NCk1vcmUgW2RldGFpbHMgaGVyZSBhYm91dCBKb29tbGFdKGh0dHA6Ly93d3cuam9vbWxhLm9yZy9hYm91dC1qb29tbGEuaHRtbCkNCg0KQnVpbGQgRGV0YWlscw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQpJcyAjIyNDb21wb25lbnRfbmFtZSMjIyBmb3IgeW91Pw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqIElmIHlvdXIgcnVubmluZyBhIEpvb21sYSAzIFdlYnNpdGUgYW5kIHdvdWxkIGxpa2UgeW91ciBvd24gSVAgdG8gQ291bnRyeSBhbmQgQ3VycmVuY3kgRXhjaGFuZ2UgUmF0ZSBBUEkuDQoNCkxlYXJuICMjI0NvbXBvbmVudF9uYW1lIyMjIEFQSSENCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKiBtb3JlIGluZm8gY29taW5nIHNvb24uLi4NCg0KV2hlcmUgZG8gd2UgZ2V0IElQIFVwZGF0ZXM/DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiogVGhlIGRhdGFiYXNlIHVzZWQgdG8gdXBkYXRlIHRoZSBJUCB0YWJsZXMgaXMgcHJvdmlkZWQgYnkgW3NvZnR3YXJlNzcubmV0XShodHRwOi8vc29mdHdhcmU3Ny5uZXQvZ2VvLWlwLykgYXMgW2RvbmF0aW9ud2FyZV0oaHR0cDovL3NvZnR3YXJlNzcubmV0L2dlby1pcC8/bGljZW5zZSkuIFRoZXkgbmVlZCB5b3VyIHN1cHBvcnQhIFBsZWFzZSBtYWtlIGEgW2RvbmF0aW9uIHZpYSBwYXlwYWxdKGh0dHBzOi8vd3d3LnBheXBhbC5jb20vY2dpLWJpbi93ZWJzY3I/Y21kPV9zLXhjbGljayZob3N0ZWRfYnV0dG9uX2lkPTNIS004TjVYWFVIVjYpIG5vdyENCg0KV2hlcmUgZG8gd2UgZ2V0IEV4Y2hhbmdlIFJhdGUgVXBkYXRlcz8NCi0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqIFsxRm9yZ2VdKGh0dHBzOi8vMWZvcmdlLmNvbS8pIGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgZXhjaGFuZ2UgcmF0ZXMuIFlvdSB3aWxsIG5lZWQgYSBbZnJlZSBBUEkga2V5XShodHRwczovLzFmb3JnZS5jb20vcmVnaXN0ZXIpLg0KKiBbT3BlbiBFeGNoYW5nZSBSYXRlc10oaHR0cHM6Ly9vcGVuZXhjaGFuZ2VyYXRlcy5vcmcvKSBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIGV4Y2hhbmdlIHJhdGVzLiBZb3Ugd2lsbCBuZWVkIGEgW2ZyZWUgQVBJIGtleV0oaHR0cHM6Ly9vcGVuZXhjaGFuZ2VyYXRlcy5vcmcvc2lnbnVwL2ZyZWUpLg0KKiBbRXhjaGFuZ2UgUmF0ZSBBUEldKGh0dHBzOi8vd3d3LmV4Y2hhbmdlcmF0ZS1hcGkuY29tKSBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIGV4Y2hhbmdlIHJhdGVzLiBZb3Ugd2lsbCBuZWVkIGEgW2ZyZWUgQVBJIGtleV0oaHR0cHM6Ly93d3cuZXhjaGFuZ2VyYXRlLWFwaS5jb20vYXBwL3NpZ251cCkuDQoqIFtGaXhlcl0oaHR0cHM6Ly9maXhlci5pby8pIGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgZXhjaGFuZ2UgcmF0ZXMuIFlvdSB3aWxsIG5lZWQgYSBbZnJlZSBBUEkga2V5XShodHRwczovL2ZpeGVyLmlvL3NpZ251cC9mcmVlKS4NCiogW0N1cnJlbmN5IExheWVyXShodHRwczovL2N1cnJlbmN5bGF5ZXIuY29tLykgY2FuIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBleGNoYW5nZSByYXRlcy4gWW91IHdpbGwgbmVlZCBhIFtmcmVlIEFQSSBrZXldKGh0dHBzOi8vY3VycmVuY3lsYXllci5jb20vc2lnbnVwP3BsYW49MSkuDQoqIFlvdSB0ZWxsIHVzIHdobyB3ZSBzaG91bGQgYWxzbyBhZGQuLi4uDQoNClVwZGF0ZXMgYXJlIGZyZWUhDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiogQWx3YXlzIHVzZSB0aGUgW2xhdGVzdCB2ZXJzaW9uXShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pvb21sYS1DdXJyZW5jeS1NZXRob2QvemlwYmFsbC9tYXN0ZXIvKS4NCg0KV2hlcmUgY2FuIHlvdSBnZXQgc3VwcG9ydCBhbmQgaGVscD8NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKiBbTmVlZCBIZWxwP10oaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9Kb29tbGEtQ3VycmVuY3ktTWV0aG9kL2lzc3VlcykuDQoqIFJlcG9ydCBhbiBbaXNzdWVdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUN1cnJlbmN5LU1ldGhvZC9pc3N1ZXMpLg0KDQpDb3B5cmlnaHQ6DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiogQ29weXJpZ2h0IChDKSBbVmFzdCBEZXZlbG9wbWVudCBNZXRob2RdKGh0dHBzOi8vd3d3LnZkbS5pbykuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIA0KKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIG9yIGxhdGVyDQoqIFNlZSBbTGljZW5zZSBkZXRhaWxzXShodHRwczovL3d3dy52ZG0uaW8vZ251LWdwbCkNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cudmRtLmlvL2pvb21sYS1jb21wb25lbnQtYnVpbGRlcikuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKGh0dHA6Ly9jYXJlZXJzLnN0YWNrb3ZlcmZsb3cuY29tL2xsZXdlbGx5bikNCg0KIyMgRG9uYXRpb25zDQoNCkNvbWUgb24gYnV5IG1lIGEgY29mZmVlIDopDQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', '', '', 'The internal Joomla API for currency conversion per/user location.', '', '', 'Currency Method', '.git', '', '', 2, 'https://raw.githubusercontent.com/vdm-io/Joomla-Location-Data/master/update_server.xml', 'https://www.vdm.io/', '', 'yCK3vIvvmW9lhQWhjQ59UYZNI2+Gu8ea3xi/9pIsZmo=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 140, '', 1, 68), +(24, 1, '', '', '', 1, '', '', '', 1, '', 1, 1, 1, '', '', '', '', '', '', 1, 1, 1, '', '', 1, '', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.2.4', 'Copyright (C) 2015. All Rights Reserved', '2016-10-11 13:21:41', 1, 'oFMwe3AxUsKMJtJimKkJsHaTYqDYqWZkC61nC1SxEfo=', 'sZha0cp6FAtJnJFM3FA4KZ9a9LRPQWleEVOfkQERTVg=', '', '4w0Rzv/4G3yVkL4YNV1q5vXzbInZDw9WsrRqb49Wz98=', '', '', '', 1, '', 'Expert Database component adds the ability to your Joomla to manage various experts and their related details.', 'llewellyn@vdm.io', '', 'https://vdm.bz/jcb-expert-database', 'g5iSlb/hQAUP2TW/lKRX5LOTtOtKoaCU1Z9vJSRU2/KybhqmUpzRFEvM5l9nu1pqIxQ2lbplpKvzFRt4WlqMDQ==', '', '9c00695f-70da-4e01-a1c4-1fc766994467', 'images/vdm/EXPERT500.jpg', '', 'https://github.com/vdm-io/JCB-Packages/raw/master/JCB_expertDatabase.zip', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2022-03-18 18:16:48', 1, 'Expert Database', 'expertdatabase', '', 4, 'CQlzZWxmOjpsb2FkQ29uZmlybWF0aW9uQWpheCgkZG9jdW1lbnQpOw==', 'CS8qKg0KCSogCUxvYWQgdGhlIENvbmZpcm1hdGlvbiBBamF4IHRvIHBhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRDb25maXJtYXRpb25BamF4KCRkb2N1bWVudCkNCgl7DQoJCS8vIGFkZCBhbiBldmVudCB0aGF0IHdpbGwgc2VuZCBvdXQgYWxsIGNvbmZpcm1hdGlvbiBlbWFpbHMsIG5vdCB5ZXQgc2VuZA0KCQkkZG9jdW1lbnQtPmFkZFNjcmlwdERlY2xhcmF0aW9uKCINCgkJCWpRdWVyeSh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJc2VuZENvbmZpcm1hdGlvbkVtYWlscygxKTsNCgkJCX0pOw0KCQkJDQoJCQlmdW5jdGlvbiBzZW5kQ29uZmlybWF0aW9uRW1haWxzKHR5cGUpIHsNCgkJCQl2YXIgZ2V0VXJsID0gJyIuVXJpOjpyb290KCkuImFkbWluaXN0cmF0b3IvaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9YWpheC5zZW5kQ29uZmlybWF0aW9uRW1haWxzJmZvcm1hdD1qc29uJzsNCgkJCQlpZih0eXBlID4gMCl7DQoJCQkJCXZhciByZXF1ZXN0ID0gJ3Rva2VuPSIuSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpLiImdHlwZT0nK3R5cGU7DQoJCQkJfQ0KCQkJCXJldHVybiBqUXVlcnkuYWpheCh7DQoJCQkJCXR5cGU6ICdQT1NUJywNCgkJCQkJdXJsOiBnZXRVcmwsDQoJCQkJCWRhdGFUeXBlOiAnanNvbnAnLA0KCQkJCQlkYXRhOiByZXF1ZXN0LA0KCQkJCQlqc29ucDogJ2NhbGxiYWNrJw0KCQkJCX0pOw0KCQkJfSIpOw0KCX0=', 'CS8qKg0KCSogCVRoZSBtYWluIHNlbmQgZW1haWwNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRyZXBseUVtYWlsOw0KDQoJLyoqDQoJKiAJVGhlIGNvbXBvbmVudCBwYXJhbXMNCgkqKi8NCglwdWJsaWMgc3RhdGljICRwYXJhbXM7DQoNCgkvKioNCgkqIAlUaGUgTWFpbiBmcm9tIG5hbWUNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRyZXBseU5hbWU7DQoNCgkvKioNCgkqIAlTZW5kIHRoZSBjb25maXJtYXRpb24gZW1haWxzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRUZW1wbGF0ZSgkdHlwZSwgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGFyYW1zKSkNCgkJew0KCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJfQ0KCQkkYm9keSA9IHNlbGY6OiRwYXJhbXMtPmdldCgkdHlwZSwgJGRlZmF1bHQpOw0KCQkvLyByZXR1cm4gdGhlIHRlbXBsYXRlIGlmIGZvdW5kDQoJCWlmICgkYm9keSkNCgkJew0KCQkJcmV0dXJuICRib2R5Ow0KCQl9DQoJCXJldHVybiBUZXh0OjpzcHJpbnRmKCdObyB0ZW1wbGF0ZSBmb3IgPGI+JXM8L2I+IHdlcmUgZm91bmQnLCBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR0eXBlLCAndycpKTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgcGxhY2UgaG9sZGVycw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGxhY2VIb2xkZXJzKCR0eXBlKQ0KCXsNCgkJaWYgKCdkb2N1bWVudCcgPT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheV9rZXlzKHNlbGY6OmdldENvbXBhbnlEZXRhaWxzKCdwbGFjZWhvbGRlcicpKTsNCgkJfQ0KCQllbHNlaWYgKCdjb25maXJtYXRpb25fZW1haWwnID09ICR0eXBlKQ0KCQl7DQoJCQkkZiA9ICdbJzsNCgkJCSRiID0gJ10nOw0KCQkJJHBsYWNlaG9sZGVyID0gYXJyYXkoKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXkoJ1tkb2N1bWVudF9oZWFkZXJdJyk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5X2tleXMoc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJykpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheV92YWx1ZXMoc2VsZjo6Z2V0U2VsZWN0aW9uKCdleHBlcnQnLCAkZi4nZXhwZXJ0XycsICRiKSk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5X3ZhbHVlcyhzZWxmOjpnZXRTZWxlY3Rpb24oJ3JlZmVycmFsJywgJGYuJ3JlZmVycmFsXycsICRiKSk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbY29uZmlybWF0aW9uX2xpbmtdJyk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbZG9jdW1lbnRfZm9vdGVyXScpOw0KCQkJcmV0dXJuICBzZWxmOjptZXJnZUFycmF5cygkcGxhY2Vob2xkZXIpOw0KCQl9DQoJCWVsc2VpZiAoJ2V4cGVydF9wcm9maWxlJyA9PSAkdHlwZSkNCgkJew0KCQkJJGYgPSAnWyc7DQoJCQkkYiA9ICddJzsNCgkJCSRwbGFjZWhvbGRlciA9IGFycmF5KCk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbZG9jdW1lbnRfaGVhZGVyXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheV9rZXlzKHNlbGY6OmdldENvbXBhbnlEZXRhaWxzKCdwbGFjZWhvbGRlcicpKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXlfdmFsdWVzKHNlbGY6OmdldFNlbGVjdGlvbignZXhwZXJ0JywgJGYuJ2V4cGVydF8nLCAkYikpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2lzX29yZ2FuaXNhdGlvbl0nLCAnW2lzX2FkbWluXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2RvY3VtZW50X2Zvb3Rlcl0nKTsNCgkJCXJldHVybiAgc2VsZjo6bWVyZ2VBcnJheXMoJHBsYWNlaG9sZGVyKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJU2VuZCBhIG1lc3NhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlbmRNZXNzYWdlKCRlcG9zY29kZSwgJHJlcGx5VG9OYW1lLCAkcmVwbHlUb0VtYWlsLCAkbWVzc2FnZSkNCgl7DQoJCSRlcG9zY29kZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6YmFzZTY0X3VybGRlY29kZSgkZXBvc2NvZGUpOw0KCQkvLyBHZXQgYSBDcnlwdCBLZXkNCgkJJGJhc2lja2V5ID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRDcnlwdEtleSgnYmFzaWMnKTsNCgkJJG9wZW5lciA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRiYXNpY2tleSwgMTI4KTsNCgkJJGVwb3NDb2RlID0gcnRyaW0oJG9wZW5lci0+ZGVjcnlwdFN0cmluZygkZXBvc2NvZGUpLCAiXDAiKTsNCgkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRlcG9zQ29kZSkpDQoJCXsNCgkJCSR0YXJnZXQgPSBqc29uX2RlY29kZSgkZXBvc0NvZGUpOw0KCQkJaWYgKGlzc2V0KCR0YXJnZXQtPmlkKSAmJiAkdGFyZ2V0LT5pZCA+IDApDQoJCQl7DQoJCQkJJGV4cGVydCA9IHNlbGY6OmdldEV4cGVydERldGFpbHMoJHRhcmdldC0+aWQsICdvYmplY3QnLCAnc3BlY2lhbCcpOw0KCQkJCWlmIChpc3NldCgkZXhwZXJ0LT5lbWFpbCkgJiYgaXNzZXQoJHRhcmdldC0+ZW1haWwpICYmICRleHBlcnQtPmVtYWlsID09ICR0YXJnZXQtPmVtYWlsKQ0KCQkJCXsNCgkJCQkJLy8gc2V0dXAgdGhlIHN1YmplY3QNCgkJCQkJJHN1YmplY3QgPSBUZXh0OjpzcHJpbnRmKCdBIG1lc3NhZ2UgZnJvbSAlcyB0byAlcycsICRyZXBseVRvTmFtZSwgJGV4cGVydC0+bmFtZSk7DQoJCQkJCS8vIHNldHVwIHRoZSBodG1sDQoJCQkJCSRtZXNzYWdlSHRtbCA9IHN0cl9yZXBsYWNlKCJcbiIsICI8YnIgLz4iLCAkbWVzc2FnZSk7DQoJCQkJCSRodG1sID0gVGV4dDo6c3ByaW50ZignJXM8YnIgLz48YnIgLz4lczxiciAvPiVzJywgJG1lc3NhZ2VIdG1sLCAkcmVwbHlUb05hbWUsICRyZXBseVRvRW1haWwpOw0KCQkJCQkkdGV4dCA9IFRleHQ6OnNwcmludGYoIiVzXG5cbiVzXG4lcyIsICRtZXNzYWdlLCAkcmVwbHlUb05hbWUsICRyZXBseVRvRW1haWwpOw0KCQkJCQkvLyBzZW5kIHRoZSBlbWFpbA0KCQkJCQlpZiAoW1tbQ29tcG9uZW50XV1dRW1haWw6OnNlbmQoJGV4cGVydC0+ZW1haWwsICRzdWJqZWN0LCBbW1tDb21wb25lbnRdXV1FbWFpbDo6c2V0VGFibGVCb2R5KCRodG1sLCAkc3ViamVjdCksICR0ZXh0LCAxLCBudWxsLCBudWxsLCAkcmVwbHlUb0VtYWlsLCAgJHJlcGx5VG9OYW1lKSkNCgkJCQkJew0KCQkJCQkJcmV0dXJuIGFycmF5KCdtZXNzYWdlJyA9PiAgVGV4dDo6c3ByaW50ZignJXMgeW91ciBtZXNzYWdlIHRvICVzIHdhcyBzZW5kIHN1Y2Nlc3NmdWxseSEnLCAkcmVwbHlUb05hbWUsICRleHBlcnQtPm5hbWUpLCAnc3RhdHVzJyA9PiAnc3VjY2VzcycpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBhcnJheSgnbWVzc2FnZScgPT4gIFRleHQ6OnNwcmludGYoJyVzIHRoZXJlIHdhcyBhbiBFUlJPUiBzZW5kaW5nIHlvdXIgbWVzc2FnZSEnLCAkcmVwbHlUb05hbWUpLCAnc3RhdHVzJyA9PiAnZGFuZ2VyJyk7DQoJfQ0KDQoJLyoqDQoJKiAJdGhlIGNvbmZpcm1hdGlvbiBlbWFpbHMgdG8gc2VuZA0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGNvbmZpcm1hdGlvbkVtYWlscyA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAlTZW5kIHRoZSBjb25maXJtYXRpb24gZW1haWxzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZW5kQ29uZmlybWF0aW9uRW1haWxzKCkNCgl7DQoJCS8vIGZpcnN0IHdlIGdldCBhbGwgdGhlIGRhdGEgYW5kIHNldCB0aGUgZW1haWxzIGFzIHNlbmQgKHRvIGluc3VyZSBlbWFpbHMgYXJlIG5vdCBzZW5kIG1vcmUgdGhlbiBvbmNlKQ0KCQlpZiAoJGxpc3QgPSBzZWxmOjpnZXRDb25maXJtYXRpb25OZWVkZWRMaXN0KCkpDQoJCXsNCgkJCS8vIGdldCB0aGUgY29tcGFueQ0KCQkJJGNvbXBhbnkgPSAgc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJyk7DQoJCQkvLyBnZXQgZW1haWwgdGVtcGxhdGUNCgkJCSR0ZW1wbGF0ZSA9IHNlbGY6OmdldFRlbXBsYXRlKCdjb25maXJtYXRpb25fZW1haWwnKTsNCgkJCSRzdWJqZWN0X3RlbXBsYXRlID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ3N1YmplY3RfY29uZmlybWF0aW9uX2VtYWlsJywgJ0hpIFtyZWZlcnJhbF9uYW1lXSwgcGxlYXNlIGNvbmZpcm0gdGhlIGRldGFpbHMgb2YgW2V4cGVydF9uYW1lXScpOw0KCQkJLy8gc2V0IHNvbWUgZGVmYXVsdHMNCgkJCSRkb2NfaGVhZGVyID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ2RvY19oZWFkZXInKTsNCgkJCSRkb2NfZm9vdGVyID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ2RvY19mb290ZXInKTsNCgkJCSRkZWZhdWx0W10gPSBhcnJheSgnW2RvY3VtZW50X2hlYWRlcl0nID0+IHNlbGY6OnNldER5bmFtaWNEYXRhKCRkb2NfaGVhZGVyLCAkY29tcGFueSksICdbZG9jdW1lbnRfZm9vdGVyXScgPT4gc2VsZjo6c2V0RHluYW1pY0RhdGEoJGRvY19mb290ZXIsICRjb21wYW55KSk7DQoJCQkvLyBub3cgbGV0cyBnZXQgdGhlIGNvbXBhbnkgZGV0YWlscw0KCQkJJGRlZmF1bHRbXSA9ICRjb21wYW55Ow0KCQkJJGRldGFpbHMgPSBhcnJheSgpOw0KCQkJJGRldGFpbHNbMF0gPSBzZWxmOjptZXJnZUFycmF5cygkZGVmYXVsdCk7DQoJCQkvLyBzdGFydCBidWlsZGluZyB0aGUgZW1haWxzDQoJCQlmb3JlYWNoICgkbGlzdCBhcyAkcmVmZXJlbmNlKQ0KCQkJew0KCQkJCS8vIG5vdyBsZXRzIGdldCB0aGUgZXhwZXJ0IGRldGFpbHMNCgkJCQkkZGV0YWlsc1sxXSA9IHNlbGY6OmdldEV4cGVydERldGFpbHMoJHJlZmVyZW5jZVsnW3JlZmVycmFsX2V4cGVydF9pZF0nXSwgJ3BsYWNlaG9sZGVyJywgJ2Z1bGwnKTsNCgkJCQkkZGV0YWlsc1syXSA9ICRyZWZlcmVuY2U7DQoJCQkJLy8gbm93IG1vcmUgdmFsdWVzDQoJCQkJJHBsYWNlaG9sZGVycyA9IHNlbGY6Om1lcmdlQXJyYXlzKCRkZXRhaWxzKTsNCgkJCQkkYm9keSA9IHNlbGY6OnNldER5bmFtaWNEYXRhKCR0ZW1wbGF0ZSwgJHBsYWNlaG9sZGVycyk7DQoJCQkJJHN1YmplY3QgPSBzZWxmOjpzZXREeW5hbWljRGF0YSgkc3ViamVjdF90ZW1wbGF0ZSwgJHBsYWNlaG9sZGVycyk7DQoJCQkJLy8gc2V0IHRoZSBlbWFpbCBkZXRhaWxzDQoJCQkJc2VsZjo6JGNvbmZpcm1hdGlvbkVtYWlsc1tdID0gYXJyYXkoJ2lkJyA9PiAkcmVmZXJlbmNlWydbcmVmZXJyYWxfaWRdJ10sICdlbWFpbCcgPT4gJHJlZmVyZW5jZVsnW3JlZmVycmFsX2VtYWlsXSddLCAnc3ViamVjdCcgPT4gJHN1YmplY3QsICdodG1sJyA9PiAkYm9keSk7DQoJCQkJLy8gbGV0cyBzZW5kIG1haWwgZWFjaCB0aW1lIHdlIGhhdmUgbW9yZSB0aGVuIDEwIHNldA0KCQkJCXNlbGY6OnNlbmRDb25maXJtYXRpb25FbWFpbCgxMCk7DQoJCQl9DQoJCQkvLyBzZW5kIGZpbmFsIGVtYWlscyBpZiBhbnkgcmVtYWluDQoJCQlzZWxmOjpzZW5kQ29uZmlybWF0aW9uRW1haWwoKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIFNlbmQgdGhlIGVtYWlsIG5lZWRlZCBmb3IgY29uZmlybWF0aW9uDQoJKg0KCSogQHBhcmFtIGludCAgJHF0eSB0aGUgcXR5IGJlZm9yZSBlbWFpbGluZyB0aGUgbGlzdA0KCSoNCgkqIEByZXR1cm4gIGJvb2xlYW4gZmFsc2Ugb24gZmFpbHVyZQ0KCSoNCgkqKi8JDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZW5kQ29uZmlybWF0aW9uRW1haWwoJHF0eSA9IDEpDQoJew0KCQlpZiAoY291bnQoc2VsZjo6JGNvbmZpcm1hdGlvbkVtYWlscykgPj0gJHF0eSkNCgkJew0KCQkJLy8gc2VuZCB0aGUgZW1haWxzDQoJCQlmb3JlYWNoIChzZWxmOjokY29uZmlybWF0aW9uRW1haWxzIGFzICRkZXRhaWxzKQ0KCQkJew0KCQkJCWlmICghW1tbQ29tcG9uZW50XV1dRW1haWw6OnNlbmQoJGRldGFpbHNbJ2VtYWlsJ10sICRkZXRhaWxzWydzdWJqZWN0J10sIFtbW0NvbXBvbmVudF1dXUVtYWlsOjpzZXRUYWJsZUJvZHkoJGRldGFpbHNbJ2h0bWwnXSwgJGRldGFpbHNbJ3N1YmplY3QnXSksICcnLCAxLCBudWxsLCBudWxsLCBzZWxmOjokcmVwbHlFbWFpbCwgIHNlbGY6OiRyZXBseU5hbWUpKQ0KCQkJCXsNCgkJCQkJJGZpZWxkcyA9IGFycmF5KCk7DQoJCQkJCSRmaWVsZHNbXSA9ICRkYi0+cXVvdGVOYW1lKCdlbWFpbHNlbmQnKSAuICcgPSAwJzsgIC8vIHNldCB0byBlcnJvciBhcyBub3Qgc2VuZA0KCQkJCQlzZWxmOjokdXBkYXRlcltdICA9IGFycmF5KCdmaWVsZHMnID0+ICRmaWVsZHMsICdjb25kaXRpb25zJyA9PiBhcnJheSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPSAnIC4gJGRldGFpbHNbJ2lkJ10pKTsNCgkJCQkJLy8gcnVuIHVwZGF0ZSBpZiBtYW55IHZhbHVlcyBmb3VuZA0KCQkJCQlzZWxmOjp1cGRhdGVEYXRhKDEwKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBydW4gdXBkYXRlIG9uIGxhc3QgcmVtYWluaW5nIHZhbHVlcw0KCQkJc2VsZjo6dXBkYXRlRGF0YSgpOw0KCQkJLy8gY2xlYXIgdGhlIHZhbHVlcyBhcnJheQ0KCQkJc2VsZjo6JGNvbmZpcm1hdGlvbkVtYWlscyA9IGFycmF5KCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJT25jZSB0aGUgZW1haWwgd2FzIHNlbmQgdGhlIGdpdmVzIHVzIHRoZSBvcHRpb24gdGhlIHN0b3JlIHRoZSBtYXNzYWdlDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdG9yZU1lc3NhZ2UoJHNlbmRtYWlsLCAkcmVjaXBpZW50LCAkc3ViamVjdCwgJGJvZHksICR0ZXh0b25seSwgJG1vZGUsICR0eXBlKQ0KCXsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJKiAJdGhlIHVwZGF0ZXIgYXJyYXkNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICR1cGRhdGVyID0gYXJyYXkoKTsNCg0KCS8qKg0KCSogCUdldCB0aGUgbGlzdCBvZiB1bi1lbWFpbGVkIGNvbmZpcm1hdGlvbnMgYW5kIGxvY2sgdGhlbQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29uZmlybWF0aW9uTmVlZGVkTGlzdCgkbWV0aG9kID0gJ3BsYWNlaG9sZGVyJykNCgl7DQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PSAkbWV0aG9kKQ0KCQl7DQoJCQkkZiA9ICdbcmVmZXJyYWxfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIGdldCB0aGUgbGlzdCBvZiB2YWx1ZXMgd2Ugd2FudCBmcm9tIGRiDQoJCSRzZWxlY3Rpb24gPSBzZWxmOjpnZXRTZWxlY3Rpb24oJ3JlZmVycmFsJywgJGYsICRiKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXlfa2V5cygkc2VsZWN0aW9uKSwgYXJyYXlfdmFsdWVzKCRzZWxlY3Rpb24pKSk7DQoJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24gdGFibGUuDQoJCSRxdWVyeS0+ZnJvbSgnI19fW1tbY29tcG9uZW50XV1dX2NvbmZpcm1hdGlvbiBBUyBhJyk7DQoJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9jb3VudHJ5IHRhYmxlLg0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknLCAnYicpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmNvdW50cnknKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2IuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EuZW1haWxzZW5kID0gMicpOw0KCQkkcXVlcnktPndoZXJlKCdhLmNvbmZpcm1lZCA9IDAnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCS8vIEdldCB0aGUgYmFzaWMgZW5jcnlwdGlvbi4NCgkJCSRiYXNpY2tleSA9IHNlbGY6OmdldENyeXB0S2V5KCdiYXNpYycsICdlcmpnNDM1OXdpZGN1amUzYXNhaWYwOXRidjk5aG93aWQwcmdmMDM4aGZob2RpOHdmb2VkJyk7IC8vIHdlIG11c3QgaGF2ZSBhIGtleSBoZXJlDQoJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJJGJhc2ljID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGJhc2lja2V5LCAxMjgpOw0KCQkJLy8gbG9hZCB0aGUgbGlzdCBvZiBleHBlcnRzIHRvIGNvbmZpcm0NCgkJCSRsaXN0ID0gJGRiLT5sb2FkQXNzb2NMaXN0KCk7DQoJCQlmb3JlYWNoICgkbGlzdCBhcyAkbnIgPT4gJHJlZmVyZW5jZSkNCgkJCXsNCgkJCQkkZmllbGRzID0gYXJyYXkoKTsNCgkJCQkkZmllbGRzW10gPSAkZGItPnF1b3RlTmFtZSgnZW1haWxzZW5kJykgLiAnID0gMSc7IC8vIGxvY2sgZG93biB0byBsb29rIGFzIHNlbmQgdG8ga2VlcCBtdWx0aSBlbWFpbHMgZnJvbSBiZWluZyBzZW5kDQoJCQkJc2VsZjo6JHVwZGF0ZXJbXSAgPSBhcnJheSgnZmllbGRzJyA9PiAkZmllbGRzLCAnY29uZGl0aW9ucycgPT4gYXJyYXkoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJyAuICRyZWZlcmVuY2VbJGYuJ2lkJy4kYl0pKTsNCgkJCQkvLyBidWlsZCB0aGUgY29uZmlybWF0aW9uIGxpbmsNCgkJCQkkbGlzdFskbnJdWydbY29uZmlybWF0aW9uX2xpbmtdJ10gPSBzZWxmOjpnZXRDb25maXJtYXRpb25MaW5rKCRyZWZlcmVuY2UsIGFycmF5KCRmLCAkYiksICRiYXNpYyk7DQoJCQkJLy8gcnVuIHVwZGF0ZSBpZiBtYW55IHZhbHVlcyBmb3VuZA0KCQkJCXNlbGY6OnVwZGF0ZURhdGEoMTAwKTsNCgkJCX0NCgkJCS8vIHJ1biB1cGRhdGUgb24gbGFzdCByZW1haW5pbmcgdmFsdWVzDQoJCQlzZWxmOjp1cGRhdGVEYXRhKCk7DQoJCQkvLyByZXR1cm4gdGhlIGZvdW5kIGxpc3QNCgkJCXJldHVybiAkbGlzdDsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KW0NVU1RPTUNPREU9YmFzZVNpeHR5Rm91clVSTF0NCgkvKioNCgkgKglUbyBsb2FkIHRoZSBhcHBsaWNhdGlvbiBmb3JtDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRBcHBsaWNhdGlvbkZvcm0oJGRhdGEgPSBudWxsLCAkdHlwZSA9ICdleHBlcnQnLCAkYWNjZXNzID0gJ3B1YmxpYycpDQoJew0KCQkvLyBnZXQgZm9ybXMgcGF0aA0KCQkkcGF0aAk9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9tb2RlbHMvZm9ybXMnOw0KCQkvLyBidWlsZCBmdWxsIHBhdGggdG8gZmlsZQ0KCQkkZnVsbFBhdGggPSAkcGF0aC4nLycuJHR5cGUuJy54bWwnOw0KCQkvLyBjaGVjayBpZiBmaWxlIGV4aXN0cw0KCQlpZiAoZmlsZV9leGlzdHMoJGZ1bGxQYXRoKSkNCgkJew0KCQkJLy8gR2V0IHRoZSBmb3JtLg0KCQkJamltcG9ydCggJ2pvb21sYS5mb3JtLmZvcm0nICk7DQoJCQkvLyBzZXQgdGhlIHBhdGhzDQoJCQlKRm9ybTo6YWRkRm9ybVBhdGgoJHBhdGgpOw0KCQkJSkZvcm06OmFkZEZpZWxkUGF0aChKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vbW9kZWxzL2ZpZWxkcycpOw0KCQkJLy8gZ3JlYXQgd2UgYXJlIGRvbmUgcmV0dXJuIHJlc3VsdHMNCgkJCSRmb3JtID0gSkZvcm06OmdldEluc3RhbmNlKCdjb21fW1tbY29tcG9uZW50XV1dLicuJHR5cGUsICR0eXBlLCBhcnJheSgnY29udHJvbCcgPT4gJ2pmb3JtJywgJ2xvYWRfZGF0YScgPT4gZmFsc2UpLCBmYWxzZSwgZmFsc2UpOw0KCQkJLy8gY2hhbmdlIHRoZSBmb3JtIGZvciBwdWJsaWMgc3VibWlzc2lvbg0KCQkJaWYgKCdwdWJsaWMnID09ICRhY2Nlc3MpDQoJCQl7DQoJCQkJc2VsZjo6cHVibGljQXBwbGljYXRpb25Gb3JtKCRmb3JtLCAkdHlwZSk7DQoJCQl9DQoJCQkvLyBub3cgbG9hZCB0aGUgZGF0YQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJCXsNCgkJCQkkZm9ybS0+YmluZCgkZGF0YSk7DQoJCQl9DQoJCQlyZXR1cm4gJGZvcm07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJGFwcGxpY2F0aW9uRmllbGRzID0gDQoJCWFycmF5KA0KCQkJJ2V4cGVydCcgPT4NCgkJCQlhcnJheSgNCgkJCQkJJ3JlbW92ZUZpZWxkcycgPT4NCgkJCQkJCWFycmF5KCdpZCcsJ2NyZWF0ZWQnLCdjcmVhdGVkX2J5JywncHVibGlzaGVkJywnbW9kaWZpZWQnLCdtb2RpZmllZF9ieScsJ2FjY2VzcycsJ29yZGVyaW5nJywndmVyc2lvbicsJ21ldGFrZXknLCdtZXRhZGVzYycsJ3VzZXInLCdhc3NldF9pZCcsJ3J1bGVzJyksDQoJCQkJCSdyZW1vdmVHcm91cHMnID0+DQoJCQkJCQlhcnJheSgnbWV0YWRhdGEnLCdhY2Nlc3Njb250cm9sJykNCgkJCQkpDQoJCSk7DQoNCgkvKioNCgkgKglNb2RlbCB0aGUgZm9ybSBmb3IgcHVibGkgc3VibWlzc2lvbg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcHVibGljQXBwbGljYXRpb25Gb3JtKCYkZm9ybSwgJHR5cGUpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JGFwcGxpY2F0aW9uRmllbGRzWyR0eXBlXSkpDQoJCXsNCgkJCWlmIChpc3NldChzZWxmOjokYXBwbGljYXRpb25GaWVsZHNbJHR5cGVdWydyZW1vdmVGaWVsZHMnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGFwcGxpY2F0aW9uRmllbGRzWyR0eXBlXVsncmVtb3ZlRmllbGRzJ10pKQ0KCQkJew0KCQkJCS8vIGZpcnN0IHJlbW92ZSBhbGwgdW53YW50ZWQgZmllbGRzDQoJCQkJZm9yZWFjaCAoc2VsZjo6JGFwcGxpY2F0aW9uRmllbGRzWyR0eXBlXVsncmVtb3ZlRmllbGRzJ10gYXMgJGZpZWxkKQ0KCQkJCXsNCgkJCQkJJGZvcm0tPnJlbW92ZUZpZWxkKCRmaWVsZCk7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKGlzc2V0KHNlbGY6OiRhcHBsaWNhdGlvbkZpZWxkc1skdHlwZV1bJ3JlbW92ZUdyb3VwcyddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokYXBwbGljYXRpb25GaWVsZHNbJHR5cGVdWydyZW1vdmVHcm91cHMnXSkpDQoJCQl7DQoJCQkJLy8gZmlyc3QgcmVtb3ZlIGFsbCB1bndhbnRlZCBmaWVsZHMNCgkJCQlmb3JlYWNoIChzZWxmOjokYXBwbGljYXRpb25GaWVsZHNbJHR5cGVdWydyZW1vdmVHcm91cHMnXSBhcyAkZ3JvdXApDQoJCQkJew0KCQkJCQkkZm9ybS0+cmVtb3ZlR3JvdXAoJGdyb3VwKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gYWRkIHRoZSB1c2VyIGZpZWxkcw0KCQlzZWxmOjphZGRVc2VyRmllbGRzKCRmb3JtKTsNCgl9DQoNCgkvKioNCgkgKglBZGQgdXNlciBmaWVsZHMgdG8gYXBwbGljYXRpb24NCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFkZFVzZXJGaWVsZHMoJiRmb3JtKQ0KCXsNCgkJLy8gd2UgbXVzdCBhZGQgc29tZSB1c2VyIGZpZWxkcw0KCQkkdXNlckZpZWxkcyA9DQoJCQlhcnJheSgNCgkJCQknbmFtZScgPT4NCgkJCQkJYXJyYXkoJ25hbWUnLCd1c2VybmFtZScsJ2VtYWlsJywncGFzc3dvcmQnLCdwYXNzd29yZDInLCAnY2FwdGNoYScpLA0KCQkJCSd0eXBlJyA9Pg0KCQkJCQlhcnJheSgndGV4dCcsJ3RleHQnLCdlbWFpbCcsJ3Bhc3N3b3JkJywncGFzc3dvcmQnLCdjYXB0Y2hhJyksDQoJCQkJJ2xhYmVsJyA9Pg0KCQkJCQlhcnJheShUZXh0OjpfKCdOYW1lJyksVGV4dDo6XygnVXNlcm5hbWUvTG9naW4tbmFtZScpLFRleHQ6Ol8oJ0VtYWlsJyksVGV4dDo6XygnUGFzc3dvcmQnKSxUZXh0OjpfKCdDb25maXJtIFBhc3N3b3JkJyksVGV4dDo6XygnUmVDYXB0Y2hhJykpLA0KCQkJCSdkZXNjcmlwdGlvbicgPT4NCgkJCQkJYXJyYXkoVGV4dDo6XygnWW91ciBGdWxsIE5hbWUnKSxUZXh0OjpfKCdTZXQgdGhlIHVzZXJuYW1lL2xvZ2luLW5hbWUgb2YgeW91ciBjaG9pY2UuJyksVGV4dDo6XygnWW91ciBFbWFpbCBBZGRyZXNzJyksVGV4dDo6XygnVXNlIGF0IGxlYXN0IDYgY2hhcmFjdGVycywgdXBwZXItY2FzZSBhbmQgbG93ZXItY2FzZSBsZXR0ZXIsIG51bWJlcnMgYW5kIGF0IGxlYXN0IG9uZSBzcGVjaWFsIGNoYXJhY3Rlci4nKSxUZXh0OjpfKCdDb25maXJtIFBhc3N3b3JkJyksVGV4dDo6XygnSnVzdCBjaGVja2luZyB0aGF0IHlvdXIgbm90IGEgcm9ib3QuJykpLA0KCQkJCSdoaW50JyA9Pg0KCQkJCQlhcnJheShUZXh0OjpfKCdFeHBlcnQgRnVsbCBOYW1lJyksIFRleHQ6Ol8oJ1VzZXJuYW1lJyksICd5b3VyQGVtYWlsLmNvbScsbnVsbCxudWxsLG51bGwpLA0KCQkJCSdjbGFzcycgPT4NCgkJCQkJYXJyYXkoJ3RleHRfYXJlYScsJ3RleHRfYXJlYScsJ3RleHRfYXJlYScsJ3RleHRfYXJlYScsJ3RleHRfYXJlYScsbnVsbCksDQoJCQkJJ3ZhbGlkYXRlJyA9Pg0KCQkJCQlhcnJheShudWxsLCBudWxsLCAnZW1haWwnLCBudWxsLCBudWxsLCAnY2FwdGNoYScpLA0KCQkJCSdmaWx0ZXInID0+DQoJCQkJCWFycmF5KCdzdHJpbmcnLCAnc3RyaW5nJywgJ2VtYWlsJywgbnVsbCwgbnVsbCxudWxsKSwNCgkJCQknZmllbGQnID0+DQoJCQkJCWFycmF5KG51bGwsIG51bGwsIG51bGwsICdwYXNzd29yZDInLCBudWxsLCBudWxsKQ0KCQkJKTsNCgkJJGFkZFJlQ2FwdGNoYSA9IEZhY3Rvcnk6OmdldENvbmZpZygpLT5nZXQoJ2NhcHRjaGEnKTsNCgkJLy8gbm93IGxvb3AgdGhlIGZpZWxkcyBhbmQgYWRkIHRvIGZvcm0NCgkJZm9yZWFjaCAoJHVzZXJGaWVsZHNbJ25hbWUnXSBhcyAkbnIgPT4gJG5hbWUpDQoJCXsNCgkJCS8vIGJ1aWxkIHRoZSBmaWVsZA0KCQkJJHhtbCA9IGFycmF5KCk7DQoJCQkvLyBvbmx5IGxvYWQgUmVDYXB0Y2hhIGlmIHR1cm5lZCBvbiBpbiBzeXN0ZW0NCgkJCWlmICgnY2FwdGNoYScgIT0gJG5hbWUgfHwgJGFkZFJlQ2FwdGNoYSkNCgkJCXsNCgkJCQkkeG1sW10gPSAnPGZpZWxkICc7DQoJCQkJJHhtbFtdID0gJ3R5cGU9IicuJHVzZXJGaWVsZHNbJ3R5cGUnXVskbnJdLiciICc7DQoJCQkJJHhtbFtdID0gJ25hbWU9IicuJG5hbWUuJyIgJzsNCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ2xhYmVsJ11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdsYWJlbD0iJy4kdXNlckZpZWxkc1snbGFiZWwnXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCWlmICgkdXNlckZpZWxkc1snZGVzY3JpcHRpb24nXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2Rlc2NyaXB0aW9uPSInLiR1c2VyRmllbGRzWydkZXNjcmlwdGlvbiddWyRucl0uJyIgJzsNCgkJCQl9DQoJCQkJaWYgKCR1c2VyRmllbGRzWydjbGFzcyddWyRucl0pDQoJCQkJew0KCQkJCQkkeG1sW10gPSAnY2xhc3M9IicuJHVzZXJGaWVsZHNbJ2NsYXNzJ11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQlpZiAoJ2NhcHRjaGEnICE9ICRuYW1lKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ3JlcXVpcmVkPSJ0cnVlIiAnOw0KCQkJCX0NCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ2ZpbHRlciddWyRucl0pDQoJCQkJew0KCQkJCQkkeG1sW10gPSAnZmlsdGVyPSInLiR1c2VyRmllbGRzWydmaWx0ZXInXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCWlmICgkdXNlckZpZWxkc1sndmFsaWRhdGUnXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ3ZhbGlkYXRlPSInLiR1c2VyRmllbGRzWyd2YWxpZGF0ZSddWyRucl0uJyIgJzsNCgkJCQl9DQoJCQkJaWYgKCR1c2VyRmllbGRzWydmaWVsZCddWyRucl0pDQoJCQkJew0KCQkJCQkkeG1sW10gPSAnZmllbGQ9IicuJHVzZXJGaWVsZHNbJ2ZpZWxkJ11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ2hpbnQnXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2hpbnQ9IicuJHVzZXJGaWVsZHNbJ2hpbnQnXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCSR4bWxbXSA9ICcvPic7DQoJCQkJLy8gc2V0IHRoZSBmaWVsZA0KCQkJCSRmb3JtLT5zZXRGaWVsZCggc2ltcGxleG1sX2xvYWRfc3RyaW5nKGltcGxvZGUoIlxuIiwgJHhtbCkpKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSogVGhpcyBjb25maXJtcyBleHBlcnRzDQoJKg0KCSogQHBhcmFtIHN0cmluZyB0aGUgYmFzZTY0IGVuY3J5cHRlZCBzdHJpbmcNCgkqDQoJKiBAcmV0dXJuICBib29sZWFuIGZhbHNlIG9uIGZhaWx1cmUNCgkqDQoJKiovCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29uZmlybUV4cGVydCgkYWN0aW9uKQ0KCXsNCgkJLy8gZXJyb3IgYXJyYXkgaWYgbmVlZGVkDQoJCSRlcnJvcnMgPSBhcnJheSgpOw0KCQkvLyBHZXQgdGhlIGJhc2ljIGVuY3J5cHRpb24uDQoJCSRiYXNpY2tleSA9IHNlbGY6OmdldENyeXB0S2V5KCdiYXNpYycsICdlcmpnNDM1OXdpZGN1amUzYXNhaWYwOXRidjk5aG93aWQwcmdmMDM4aGZob2RpOHdmb2VkJyk7IC8vIHdlIG11c3QgaGF2ZSBhIGtleSBoZXJlDQoJCS8vIEdldCB0aGUgZW5jcmlwdGlvbiBvYmplY3QuDQoJCSRvcGVuZXIgPSBuZXcgU3VwZXJfX185OTE3NWY2ZF9kYmE4XzQwODZfOGE2NV81YzRlYzE3NWU2MWRfX19Qb3dlcigkYmFzaWNrZXksIDEyOCk7DQoJCS8vIHdlIHRyeSB0byBvcGVuIGl0DQoJCWlmICgkcmVmZXJlbmNlID0ganNvbl9kZWNvZGUocnRyaW0oJG9wZW5lci0+ZGVjcnlwdFN0cmluZyhzZWxmOjpiYXNlNjRfdXJsZGVjb2RlKCRhY3Rpb24pKSwgIlwwIikpKQ0KCQl7DQoJCQlpZiAoaXNzZXQoJHJlZmVyZW5jZS0+aWQpKQ0KCQkJew0KCQkJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCS8vIGdldCB2YWx1ZXMgaW4gZGF0YWJhc2UNCgkJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnZXhwZXJ0JywgJ25hbWUnLCAnZW1haWwnLCAnY29uZmlybWVkJykpKTsNCgkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24nKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgPSAnLiAoaW50KSAkcmVmZXJlbmNlLT5pZCk7DQoJCQkJLy8gbm93IGdldCB0aGUgZGF0YQ0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQlpZiAoJGRiLT5leGVjdXRlKCkpDQoJCQkJew0KCQkJCQkkbG9jYWwgPSAkZGItPmxvYWRPYmplY3QoKTsNCgkJCQkJJHZlcmlmaWVkID0gZmFsc2U7CQkJDQoJCQkJCS8vIG5vdyBjaGVjayBpZiB0aGUgZGF0YSBpcyBzdGlsbCB0aGUgc2FtZQ0KCQkJCQlpZiAoJGxvY2FsLT5jb25maXJtZWQgPT0gMSkNCgkJCQkJew0KCQkJCQkJJGVycm9yc1tdID0gVGV4dDo6XygnVGhlIGRldGFpbHMgd2VyZSBhbHJlYWR5IHN1Y2Nlc3NmdWxseSB2ZXJpZmllZC4nKTsNCgkJCQkJCSR2ZXJpZmllZCA9IHRydWU7DQoJCQkJCX0NCgkJCQkJaWYgKCRsb2NhbC0+ZXhwZXJ0ICE9ICRyZWZlcmVuY2UtPmV4cGVydF9pZCkNCgkJCQkJew0KCQkJCQkJJGVycm9yc1tdID0gVGV4dDo6XygnVGhlIHdyb25nIGV4cGVydCB3YXMgc2VsZWN0ZWQuJyk7DQoJCQkJCX0NCgkJCQkJaWYgKCRsb2NhbC0+bmFtZSAhPSAkcmVmZXJlbmNlLT5uYW1lKQ0KCQkJCQl7DQoJCQkJCQkkZXJyb3JzW10gPSBUZXh0OjpfKCdZb3VyIG5hbWUgbm8gbG9uZ2VyIG1hdGNoIHRoZSBuYW1lIHdlIGhhdmUgb24gZmlsZS4nKTsNCgkJCQkJfQ0KCQkJCQlpZiAoJGxvY2FsLT5lbWFpbCAhPSAkcmVmZXJlbmNlLT5lbWFpbCkNCgkJCQkJew0KCQkJCQkJJGVycm9yc1tdID0gVGV4dDo6XygnWW91ciBlbWFpbCBubyBsb25nZXIgbWF0Y2ggdGhlIGVtYWlsIHdlIGhhdmUgb24gZmlsZS4nKTsNCgkJCQkJfQ0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGVycm9ycykpDQoJCQkJCXsNCgkJCQkJCWlmICghJHZlcmlmaWVkKQ0KCQkJCQkJew0KCQkJCQkJCSRlcnJvcnNbXSA9IFRleHQ6Ol8oJ1RoZXNlIGNoYW5nZXMgbWF5IGhhdmUgYmVlbiBtYWRlIGJ5IHRoZSBleHBlcnQgYWZ0ZXIgdGhlIGVtYWlsIHdhcyBzZW5kIHRvIHlvdS4nKTsNCgkJCQkJCX0NCgkJCQkJCS8vIHNldCB0aGUgZXJyb3INCgkJCQkJCXNlbGY6OnNldEVycm9yKDEsICRlcnJvcnMpOw0KCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJLy8gQ3JlYXRlIGFuIG9iamVjdCBmb3IgdGhlIHJlY29yZCB3ZSBhcmUgZ29pbmcgdG8gdXBkYXRlLg0KCQkJCQkJJG9iamVjdCA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkJCS8vIE11c3QgYmUgYSB2YWxpZCBwcmltYXJ5IGtleSB2YWx1ZS4NCgkJCQkJCSRvYmplY3QtPmlkID0gJHJlZmVyZW5jZS0+aWQ7DQoJCQkJCQkkb2JqZWN0LT5jb25maXJtZWQgPSAxOw0KDQoJCQkJCQkvLyBVcGRhdGUgdGhlaXIgZGV0YWlscyBpbiB0aGUgY29uZmlybWF0aW9uIHRhYmxlIHVzaW5nIGlkIGFzIHRoZSBwcmltYXJ5IGtleS4NCgkJCQkJCWlmIChGYWN0b3J5OjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uJywgJG9iamVjdCwgJ2lkJykpDQoJCQkJCQl7DQoJCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCQl9DQoJCQkJCQkkZXJyb3JzW10gPSBUZXh0OjpfKCdUaGVyZSB3YXMgYW4gZXJyb3IgZHVyaW5nIHRoZSB2ZXJpZmljYXRpb24gcHJvc2VzLicpOw0KCQkJCQkJLy8gc2V0IHRoZSBlcnJvcg0KCQkJCQkJc2VsZjo6c2V0RXJyb3IoMSwgJGVycm9ycyk7DQoJCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJJGVycm9yc1tdID0gVGV4dDo6XygnWW91ciBsaW5rIGlzIG5vdCB2YWxpZC4nKTsNCgkJLy8gc2V0IHRoZSBlcnJvcg0KCQlzZWxmOjpzZXRFcnJvcigxLCAkZXJyb3JzKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogQnVpbGQgdGhlIGxpbmsgdXNlZCB0byBjb25maXJtIGV4cGVydCBkYXRhDQoJKg0KCSogQHBhcmFtIGFycmF5IHRoZSByZWZlcnJhbHMgZGV0YWlscw0KCSoNCgkqIEByZXR1cm4gIGJvb2xlYW4gZmFsc2Ugb24gZmFpbHVyZQ0KCSoNCgkqKi8JDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRDb25maXJtYXRpb25MaW5rKCRyZWZlcmVuY2UsICRvdXQsIFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIgJGxvY2tlcikNCgl7DQoJCSRidWNrZXQgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRyZWZlcmVuY2UgYXMgJGtleSA9PiAkdmFsdWUpDQoJCXsNCgkJCSRhdEtleSA9IHN0cl9yZXBsYWNlKCRvdXQsICcnLCAka2V5KTsNCgkJCSRidWNrZXRbJGF0S2V5XSA9ICR2YWx1ZTsNCgkJfQ0KCQlyZXR1cm4gVXJpOjpyb290KCkuJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWNvbmZpcm0uZXhwZXJ0JmFjdGlvbj0nLnNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGxvY2tlci0+ZW5jcnlwdFN0cmluZyhqc29uX2VuY29kZSgkYnVja2V0KSkpOw0KCX0NCg0KCS8qKg0KCSogVXBkYXRlIHRoZSBkYXRhIGZyb20gdGhlIGZpbGUgdG8gdGhlIGRhdGFiYXNlDQoJKg0KCSogQHBhcmFtIGludCAgJHF0eSB0aGUgcXR5IGJlZm9yZSBkb2luZyBhbiB1cGRhdGUNCgkqIEBwYXJhbSBhcnJheSAgJHRhYmxlIFRoZSB0YWJsZSBiZWluZyB1cGRhdGVkDQoJKg0KCSogQHJldHVybiAgYm9vbGVhbiBmYWxzZSBvbiBmYWlsdXJlDQoJKg0KCSoqLwkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZURhdGEoJHF0eSA9IDEsICR0YWJsZSA9ICdjb25maXJtYXRpb24nKQ0KCXsNCgkJaWYgKGNvdW50KHNlbGY6OiR1cGRhdGVyKSA+PSAkcXR5KQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBkYXRhDQoJCQlmb3JlYWNoKHNlbGY6OiR1cGRhdGVyIGFzICR2YWx1ZSkNCgkJCXsNCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCS8vIFByZXBhcmUgdGhlIHVwZGF0ZSBxdWVyeS4NCgkJCQkkcXVlcnktPnVwZGF0ZSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuJHRhYmxlKSkNCgkJCQkJLT5zZXQoJHZhbHVlWydmaWVsZHMnXSktPndoZXJlKCR2YWx1ZVsnY29uZGl0aW9ucyddKTsNCgkJCQkvLyBTZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0IGFuZCBleGVjdXRlIGl0Lg0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCX0NCgkJCS8vIGNsZWFyIHRoZSB2YWx1ZXMgYXJyYXkNCgkJCXNlbGY6OiR1cGRhdGVyID0gYXJyYXkoKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV4cGVydERpc3BsYXkoJiRpZCwgJHZpZXcgPSBudWxsLCAkdHlwZSA9IG51bGwpDQoJew0KCQlpZiAoJGlkID4gMCkNCgkJew0KCQkJLy8gcmVzZXQgdGhlIGRldGFpbHMgYXJyYXkNCgkJCSRkZXRhaWxzID0gYXJyYXkoKTsNCgkJCS8vIGdldCB0aGUgY29tcGFueQ0KCQkJJGNvbXBhbnkgPSAgc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJyk7DQoJCQkvLyBnZXQgZW1haWwgdGVtcGxhdGUNCgkJCSR0ZW1wbGF0ZSA9IHNlbGY6OmdldFRlbXBsYXRlKCdleHBlcnRfcHJvZmlsZScpOw0KCQkJLy8gc2V0IGRvY3VtZW50IGhlYWRlciBhbmQgZm9vdGVyDQoJCQkkZG9jX2hlYWRlciA9IHNlbGY6OmdldFRlbXBsYXRlKCdkb2NfaGVhZGVyJyk7DQoJCQkkZG9jX2Zvb3RlciA9IHNlbGY6OmdldFRlbXBsYXRlKCdkb2NfZm9vdGVyJyk7DQoJCQkkZGV0YWlsc1tdID0gYXJyYXkoJ1tkb2N1bWVudF9oZWFkZXJdJyA9PiBzZWxmOjpzZXREeW5hbWljRGF0YSgkZG9jX2hlYWRlciwgJGNvbXBhbnkpLCAnW2RvY3VtZW50X2Zvb3Rlcl0nID0+IHNlbGY6OnNldER5bmFtaWNEYXRhKCRkb2NfZm9vdGVyLCAkY29tcGFueSkpOw0KCQkJLy8gbm93IGxldHMgZ2V0IHRoZSBjb21wYW55IGRldGFpbHMNCgkJCSRkZXRhaWxzW10gPSAkY29tcGFueTsNCgkJCS8vIGdldCB1c2VyIGFjY2VzcyByaWdodHMNCgkJCSR1c2VySXMgPSBzZWxmOjp1c2VySXMoKTsNCgkJCSRhY2Nlc3MgPSAncHVibGljJzsNCgkJCWlmICgkdXNlcklzID09IDIgfHwgJHVzZXJJcyA9PSAzKQ0KCQkJew0KCQkJCSRhY2Nlc3MgPSAnc3BlY2lhbCc7DQoJCQkJaWYgKCR1c2VySXMgPT0gMikgDQoJCQkJew0KCQkJCQkkZGV0YWlsc1tdID0gYXJyYXkoJ1tpc19vcmdhbmlzYXRpb25dJyA9PiAxKTsNCgkJCQl9DQoJCQkJZWxzZWlmICgkdXNlcklzID09IDMpDQoJCQkJew0KCQkJCQkkZGV0YWlsc1tdID0gYXJyYXkoJ1tpc19hZG1pbl0nID0+IDEpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoJHVzZXJJcyA9PSAxKQ0KCQkJew0KCQkJCWlmICgncHJvZmlsZScgPT0gJHZpZXcgJiYgMTk0OCA9PSAkdHlwZSkgLy8gd2hlbiBleHBlcnQgdmlld3Mgb3duIHByb2ZpbGUgKFRPRE8gbW9yZSBjaGVja3MgdG8gaW5zdXJlIGl0IGlzIHRydWUpDQoJCQkJew0KCQkJCQkkYWNjZXNzID0gJ2Z1bGwnOw0KCQkJCX0NCgkJCQkkZGV0YWlsc1tdID0gYXJyYXkoJ1tpc19leHBlcnRdJyA9PiAxKTsNCgkJCX0NCgkJCS8vIG5vdyBsZXRzIGdldCB0aGUgZXhwZXJ0IGRldGFpbHMNCgkJCSRkZXRhaWxzW10gPSBzZWxmOjpnZXRFeHBlcnREZXRhaWxzKCRpZCwgJ3BsYWNlaG9sZGVyJywgJGFjY2Vzcyk7DQoJCQkvLyBub3cgbWVyZSB2YWx1ZXMNCgkJCSRwbGFjZWhvbGRlcnMgPSBzZWxmOjptZXJnZUFycmF5cygkZGV0YWlscyk7DQoJCQlpZiAoJGJvZHkgPSBzZWxmOjpzZXREeW5hbWljRGF0YSgkdGVtcGxhdGUsICRwbGFjZWhvbGRlcnMpKQ0KCQkJew0KCQkJCXJldHVybiAkYm9keTsNCgkJCX0JCQkNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkZXhwZXJ0RGV0YWlscyA9IGFycmF5KCk7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFeHBlcnREZXRhaWxzKCYkaWQsICRtZXRob2QgPSAnb2JqZWN0JywgJGFjY2VzcyA9ICdwdWJsaWMnKQ0KCXsNCgkJLy8gd2UgbmVlZCB0byBtYW5hZ2Ugc29tZSBtZW1vcnkgaGVyZQ0KCQlpZiAoY291bnQoc2VsZjo6JGV4cGVydERldGFpbHMpID49IDIwMCkNCgkJew0KCQkJLy8gcmVtb3ZlIGZpcnN0IDEwMCBmcm9tIG1lbW9yeQ0KCQkJZm9yZWFjaCAoc2VsZjo6JGV4cGVydERldGFpbHMgYXMgJHJlbW92ZSA9PiAkbm93KQ0KCQkJew0KCQkJCS8vIHJlbW92ZSB0aGUgZmlyc3QgdmFsdWVzIHRoYXQgd2FzIHNldA0KCQkJCXVuc2V0KHNlbGY6OiRleHBlcnREZXRhaWxzWyRyZW1vdmVdKTsNCgkJCQlpZiAoY291bnQoc2VsZjo6JGV4cGVydERldGFpbHMpIDw9IDEwMCkNCgkJCQl7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZiAoIWlzc2V0KHNlbGY6OiRleHBlcnREZXRhaWxzWyRpZC4kbWV0aG9kLiRhY2Nlc3NdKSkNCgkJew0KCQkJLy8gZ2V0IGV4cGVydCBkZXRhaWxzDQoJCQlzZWxmOjokZXhwZXJ0RGV0YWlsc1skaWQuJG1ldGhvZC4kYWNjZXNzXSA9IHNlbGY6OmdldEV4cGVydCgkaWQsICRtZXRob2QsICRhY2Nlc3MpOw0KCQl9DQoJCWlmICghaXNzZXQoc2VsZjo6JGV4cGVydERldGFpbHNbJGlkLiRtZXRob2QuJGFjY2Vzc10pKQ0KCQl7DQoJCQlzZWxmOjokZXhwZXJ0RGV0YWlsc1skaWQuJG1ldGhvZC4kYWNjZXNzXSA9IGZhbHNlOw0KCQl9DQoJCXJldHVybiBzZWxmOjokZXhwZXJ0RGV0YWlsc1skaWQuJG1ldGhvZC4kYWNjZXNzXTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRleHBlcnQgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiBHZXQgdGhlIA0KCSogDQoJKiBAcmV0dXJuICAgIGh0bWwgc3RyaW5nDQoJKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV4cGVydCgmJGlkLCAkbWV0aG9kID0gJ29iamVjdCcsICRhY2Nlc3MgPSAncHVibGljJykNCgl7DQoJCS8vIHdlIG5lZWQgdG8gbWFuYWdlIHNvbWUgbWVtb3J5IGhlcmUNCgkJaWYgKGNvdW50KHNlbGY6OiRleHBlcnQpID49IDEwMCkNCgkJew0KCQkJLy8gcmVtb3ZlIGZpcnN0IDUwIGZyb20gbWVtb3J5DQoJCQlmb3JlYWNoIChzZWxmOjokZXhwZXJ0IGFzICRyZW1vdmUgPT4gJG5vdykNCgkJCXsNCgkJCQkvLyByZW1vdmUgdGhlIGZpcnN0IHZhbHVlcyB0aGF0IHdhcyBzZXQNCgkJCQl1bnNldChzZWxmOjokZXhwZXJ0WyRyZW1vdmVdKTsNCgkJCQlpZiAoY291bnQoc2VsZjo6JGV4cGVydCkgPD0gNTApDQoJCQkJew0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJJGYgPSAnJzsNCgkJJGIgPSAnJzsNCgkJaWYgKCdwbGFjZWhvbGRlcicgPT0gJG1ldGhvZCkNCgkJew0KCQkJJGYgPSAnW2V4cGVydF8nOw0KCQkJJGIgPSAnXSc7DQoJCX0NCgkJaWYgKCFpc3NldChzZWxmOjokZXhwZXJ0WyRpZC4kbWV0aG9kLiRhY2Nlc3NdKSkNCgkJew0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCQkvLyBTZWxlY3Qgc29tZSBmaWVsZHMNCgkJCSRzZWxlY3Rpb24gPSBzZWxmOjpnZXRTZWxlY3Rpb24oJ2V4cGVydCcsICRmLCAkYik7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheV9rZXlzKCRzZWxlY3Rpb24pLCBhcnJheV92YWx1ZXMoJHNlbGVjdGlvbikpKTsNCg0KCQkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX2V4cGVydCB0YWJsZQ0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fZXhwZXJ0JywgJ2EnKSk7DQoNCgkJCS8vIEZyb20gdGhlIHVzZXJzIHRhYmxlLg0KCQkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX3VzZXJzJywgJ2cnKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS51c2VyJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdnLmlkJykgLiAnKScpOw0KCQkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX2NvdW50cnkgdGFibGUuDQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknLCAnaCcpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmNvdW50cnlyZXNpZGVuY2UnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2guaWQnKSAuICcpJyk7DQoJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fYXJlYV9vZl9leHBlcnRpc2UgdGFibGUuDQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2FyZWFfb2ZfZXhwZXJ0aXNlJywgJ2knKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5hcmVhX29mX2V4cGVydGlzZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnaS5pZCcpIC4gJyknKTsNCgkJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9jb3VudHJ5IHRhYmxlLg0KCQkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5JywgJ2onKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5uYXRpb25hbGl0eScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnai5pZCcpIC4gJyknKTsNCgkJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9hY2FkZW1pY19xdWFsaWZpY2F0aW9uIHRhYmxlLg0KCQkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9hY2FkZW1pY19xdWFsaWZpY2F0aW9uJywgJ2snKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5hY2FkZW1pY19xdWFsaWZpY2F0aW9uJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdrLmlkJykgLiAnKScpOw0KCQkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX3ByZWZpeCB0YWJsZS4NCgkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcHJlZml4JywgJ3AnKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5wcmVmaXgnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3AuaWQnKSAuICcpJyk7DQoJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fdGl0bGUgdGFibGUuDQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3RpdGxlJywgJ3QnKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS50aXRsZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgndC5pZCcpIC4gJyknKTsNCg0KCQkJJHF1ZXJ5LT53aGVyZSgnYS5pZCA9ICcuKGludCkgJGlkKTsNCgkJCS8vIG9ubHkgbG9hZCBjb25maXJtZWQgcHJvZmlsZXMgdG8gdGhlc2UgZ3JvdXBzDQoJCQlpZiAoJ3B1YmxpYycgPT0gJGFjY2VzcyB8fCAnc3BlY2lhbCcgPT0gJGFjY2VzcykNCgkJCXsNCgkJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uIHRhYmxlLg0KCQkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uJywgJ2MnKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnYy5leHBlcnQnKSAuICcpJyk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYy5jb25maXJtZWQgPSAxJyk7DQoJCQl9DQoJCQkvLyBtYWtlIHN1cmUgdGhleSBoYXZlIGFjY2VzcyB0byB0aGlzIHByb2ZpbGUgYW5kIGl0IGlzIHB1Ymxpc2hlZA0KCQkJaWYgKCdwdWJsaWMnID09ICRhY2Nlc3MpDQoJCQl7DQoJCQkJJHVzZXIJPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCQkJJGxldmVscwk9ICR1c2VyLT5nZXRBdXRob3Jpc2VkVmlld0xldmVscygpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGlzaGVkID0gMScpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJ2EuYWNjZXNzIElOICgnIC4gaW1wbG9kZSgnLCcsICRsZXZlbHMpIC4gJyknKTsNCgkJCX0NCg0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJaWYgKCdvYmplY3QnID09ICRtZXRob2QpDQoJCQkJew0KCQkJCQlzZWxmOjokZXhwZXJ0WyRpZC4kbWV0aG9kLiRhY2Nlc3NdID0gc2VsZjo6bW9kZWxFeHBlcnQoJGRiLT5sb2FkT2JqZWN0KCksICRtZXRob2QsICRhY2Nlc3MsICRmLCAkYik7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXNlbGY6OiRleHBlcnRbJGlkLiRtZXRob2QuJGFjY2Vzc10gPSBzZWxmOjptb2RlbEV4cGVydCgkZGItPmxvYWRBc3NvYygpLCAkbWV0aG9kLCAkYWNjZXNzLCAkZiwgJGIpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyByZXR1cm4gdGhlIHZhbHVlcw0KCQlpZiAoIWlzc2V0KHNlbGY6OiRleHBlcnRbJGlkLiRtZXRob2QuJGFjY2Vzc10pKQ0KCQl7DQoJCQlzZWxmOjokZXhwZXJ0WyRpZC4kbWV0aG9kLiRhY2Nlc3NdID0gZmFsc2U7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRleHBlcnRbJGlkLiRtZXRob2QuJGFjY2Vzc107DQoJfQ0KDQoJLyoqDQoJKiBSZXR1cm4gYXJyYXkgb2Ygc2VsZWN0aW9ucw0KCSogDQoJKiBAcmV0dXJuICAgIGFycmF5IGlmIHR5cGUgbWF0Y2gNCgkqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0eXBlLCAkZiwgJGIpDQoJew0KCQlpZiAoJ2V4cGVydCcgPT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheSgNCgkJCQknZy5uYW1lJyA9PiAkZi4nbmFtZScuJGIsCQ0KCQkJCSdnLmVtYWlsJyA9PiAkZi4nZW1haWwnLiRiLA0KCQkJCSdoLm5hbWUnID0+ICRmLidjb3VudHJ5cmVzaWRlbmNlJy4kYiwNCgkJCQknaS5uYW1lJyA9PiAkZi4nYXJlYV9vZl9leHBlcnRpc2UnLiRiLA0KCQkJCSdhLmNpdHknID0+ICRmLidjaXR5Jy4kYiwNCgkJCQknYS5waG9uZScgPT4gJGYuJ3Bob25lJy4kYiwNCgkJCQknYS5zdW1tYXJ5JyA9PiAkZi4nc3VtbWFyeScuJGIsDQoJCQkJJ2EuYWRkcmVzcycgPT4gJGYuJ2FkZHJlc3MnLiRiLA0KCQkJCSdhLmN2a2V5JyA9PiAkZi4nY3ZsaW5rJy4kYiwNCgkJCQkncC5uYW1lJyA9PiAkZi4ncHJlZml4Jy4kYiwNCgkJCQknYS5tZW1iZXJzaGlwJyA9PiAkZi4nbWVtYmVyc2hpcCcuJGIsDQoJCQkJJ3QubmFtZScgPT4gJGYuJ3RpdGxlJy4kYiwNCgkJCQknYS5wcm9mZXNzaW9uJyA9PiAkZi4ncHJvZmVzc2lvbicuJGIsDQoJCQkJJ2EuZXhwZXJpZW5jZScgPT4gJGYuJ2V4cGVyaWVuY2UnLiRiLA0KCQkJCSdhLm1vYmlsZV9waG9uZScgPT4gJGYuJ21vYmlsZV9waG9uZScuJGIsDQoJCQkJJ2oubmFtZScgPT4gJGYuJ25hdGlvbmFsaXR5Jy4kYiwNCgkJCQknYS5vcmdhbmlzYXRpb24nID0+ICRmLidvcmdhbmlzYXRpb24nLiRiLA0KCQkJCSdrLm5hbWUnID0+ICRmLidhY2FkZW1pY19xdWFsaWZpY2F0aW9uJy4kYiwNCgkJCQknYS5zcGVjaWFsaXNhdGlvbicgPT4gJGYuJ3NwZWNpYWxpc2F0aW9uJy4kYiwNCgkJCQknYS53b3JrZWRfZm9yJyA9PiAkZi4nd29ya2VkX2ZvcicuJGIsDQoJCQkJJ2Eud2Vic2l0ZScgPT4gJGYuJ3dlYnNpdGUnLiRiLA0KCQkJCSdhLmdlb2dyYXBoaWNfZm9jdXMnID0+ICRmLidnZW9ncmFwaGljX2ZvY3VzJy4kYiwNCgkJCQknYS5wcm9mZXNzaW9uYWxfbmV0d29ya3MnID0+ICRmLidwcm9mZXNzaW9uYWxfbmV0d29ya3MnLiRiLA0KCQkJCSdhLnByaXZhY3lfYWNhZGVtaWNfcXVhbGlmaWNhdGlvbicgPT4gJGYuJ3ByaXZhY3lfYWNhZGVtaWNfcXVhbGlmaWNhdGlvbicuJGIsDQoJCQkJJ2EucHJpdmFjeV9hZGRyZXNzJyA9PiAkZi4ncHJpdmFjeV9hZGRyZXNzJy4kYiwNCgkJCQknYS5wcml2YWN5X2NpdHknID0+ICRmLidwcml2YWN5X2NpdHknLiRiLA0KCQkJCSdhLnByaXZhY3lfY291bnRyeXJlc2lkZW5jZScgPT4gJGYuJ3ByaXZhY3lfY291bnRyeXJlc2lkZW5jZScuJGIsDQoJCQkJJ2EucHJpdmFjeV9jdicgPT4gJGYuJ3ByaXZhY3lfY3ZsaW5rJy4kYiwNCgkJCQknYS5wcml2YWN5X21lbWJlcnNoaXAnID0+ICRmLidwcml2YWN5X21lbWJlcnNoaXAnLiRiLA0KCQkJCSdhLnByaXZhY3lfbW9iaWxlX3Bob25lJyA9PiAkZi4ncHJpdmFjeV9tb2JpbGVfcGhvbmUnLiRiLA0KCQkJCSdhLnByaXZhY3lfbmF0aW9uYWxpdHknID0+ICRmLidwcml2YWN5X25hdGlvbmFsaXR5Jy4kYiwNCgkJCQknYS5wcml2YWN5X29yZ2FuaXNhdGlvbicgPT4gJGYuJ3ByaXZhY3lfb3JnYW5pc2F0aW9uJy4kYiwNCgkJCQknYS5wcml2YWN5X3Bob25lJyA9PiAkZi4ncHJpdmFjeV9waG9uZScuJGIsDQoJCQkJJ2EucHJpdmFjeV9wcm9mZXNzaW9uJyA9PiAkZi4ncHJpdmFjeV9wcm9mZXNzaW9uJy4kYiwNCgkJCQknYS5wcml2YWN5X3Byb2Zlc3Npb25hbF9uZXR3b3JrcycgPT4gJGYuJ3ByaXZhY3lfcHJvZmVzc2lvbmFsX25ldHdvcmtzJy4kYiwNCgkJCQknYS5wcml2YWN5X3dvcmtlZF9mb3InID0+ICRmLidwcml2YWN5X3dvcmtlZF9mb3InLiRiDQoJCQkpOw0KCQl9DQoJCWlmICgncmVmZXJyYWwnID09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsDQoJCQkJJ2EuZXhwZXJ0JyA9PiAkZi4nZXhwZXJ0X2lkJy4kYiwNCgkJCQknYS5uYW1lJyA9PiAkZi4nbmFtZScuJGIsDQoJCQkJJ2Eub3JnYW5pc2F0aW9uJyA9PiAkZi4nb3JnYW5pc2F0aW9uJy4kYiwNCgkJCQknYS5wb3NpdGlvbicgPT4gJGYuJ3Bvc2l0aW9uJy4kYiwNCgkJCQknYi5uYW1lJyA9PiAkZi4nY291bnRyeScuJGIsDQoJCQkJJ2EuZW1haWwnID0+ICRmLidlbWFpbCcuJGINCgkJCSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogVGhlIG1vZGVsbGluZyBvZiBFeHBlcnQgZGF0YQ0KCSogDQoJKiBAcmV0dXJuICAgIG9iamVjdCBvZiBhbGxvd2VkIHZhbHVlcw0KCSovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBtb2RlbEV4cGVydCgkaXRlbSwgJiRtZXRob2QsICYkYWNjZXNzLCAmJGYsICYkYikNCgl7DQoJCS8vIGZpbGVyIGFsbCBwcml2YWN5IGluZm8gdGhhdCB0aGV5IHVzZXIgZG9lcyBub3Qgd2FudCBwdWJsaWMNCgkJaWYgKCdwdWJsaWMnID09ICRhY2Nlc3MpDQoJCXsNCgkJCWZvcmVhY2ggKCRpdGVtIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJew0KCQkJCWlmIChzdHJwb3MoJGtleSwgJGYuJ3ByaXZhY3lfJykgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJaWYgKCR2YWx1ZSA9PSAwKQ0KCQkJCQl7DQoJCQkJCQkvLyByZW1vdmUgZnJvbSBkYXRhIGl0IGlzIG5vdCBwdWJsaWMNCgkJCQkJCSR2YWx1ZUtleSA9IHN0cl9yZXBsYWNlKCdwcml2YWN5XycsICcnLCAka2V5KTsNCgkJCQkJCWlmICgnb2JqZWN0JyA9PSAkbWV0aG9kKQ0KCQkJCQkJew0KCQkJCQkJCXVuc2V0KCRpdGVtLT4kdmFsdWVLZXkpOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCXVuc2V0KCRpdGVtWyR2YWx1ZUtleV0pOw0KCQkJCQkJfQ0KCQkJCQkJLy8gYWxzbyByZW1vdmUgdGhlIHByaXZhY3kgdmFsdWVzDQoJCQkJCQlpZiAoJ29iamVjdCcgPT0gJG1ldGhvZCkNCgkJCQkJCXsNCgkJCQkJCQl1bnNldCgkaXRlbS0+JGtleSk7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJdW5zZXQoJGl0ZW1bJGtleV0pOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQkNCgkJCX0NCgkJfQ0KCQkvLyBHZXQgdGhlIGJhc2ljIGVuY3JpcHRpb24uDQoJCSRiYXNpY2tleSA9IHNlbGY6OmdldENyeXB0S2V5KCdiYXNpYycpOw0KCQkvLyBHZXQgdGhlIGVuY3JpcHRpb24gb2JqZWN0Lg0KCQkkYmFzaWMgPSBuZXcgU3VwZXJfX185OTE3NWY2ZF9kYmE4XzQwODZfOGE2NV81YzRlYzE3NWU2MWRfX19Qb3dlcigkYmFzaWNrZXksIDEyOCk7DQoJCS8vIG5vdCBmb3VuZCwgcmVtb3ZlDQoJCSRyZW1vdmVMaW5rID0gdHJ1ZTsNCgkJLy8gc3RhcnQgaW1wbGVtZW50YXRpb24gdG8gYnVpbGQgQ1YgbGluaw0KCQlpZiAoJGJhc2lja2V5ICYmICdvYmplY3QnID09ICRtZXRob2QgJiYgaXNzZXQoJGl0ZW0tPnskZi4nY3ZsaW5rJy4kYn0pKQ0KCQl7DQoJCQlpZiAoIWVtcHR5KCRpdGVtLT57JGYuJ2N2bGluaycuJGJ9KSAmJiAhaXNfbnVtZXJpYygkaXRlbS0+eyRmLidjdmxpbmsnLiRifSkgJiYgJGl0ZW0tPnskZi4nY3ZsaW5rJy4kYn0gPT09IGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkaXRlbS0+eyRmLidjdmxpbmsnLiRifSwgdHJ1ZSkpKQ0KCQkJew0KCQkJCSRrZXkgPSBydHJpbSgkYmFzaWMtPmRlY3J5cHRTdHJpbmcoJGl0ZW0tPnskZi4nY3ZsaW5rJy4kYn0pLCAiXDAiKTsNCgkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGtleSkgJiYgIWlzX251bWVyaWMoJGtleSkpDQoJCQkJew0KCQkJCQkka2V5QXJyYXkgPSBleHBsb2RlKCcuJywgJGtleSk7DQoJCQkJCSRpdGVtLT57JGYuJ2N2bGluaycuJGJ9ID0gVXJpOjpyb290KCkuJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWRvd25sb2FkLnBkZiZ0b2tlbj0nLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4nJmZpbGU9JyAuICRrZXlBcnJheVswXSAuICcucGRmJzsNCgkJCQkJJHJlbW92ZUxpbmsgPSBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJZWxzZWlmICgkYmFzaWNrZXkgJiYgaXNzZXQoJGl0ZW1bJGYuJ2N2bGluaycuJGJdKSkNCgkJew0KCQkJaWYgKCFlbXB0eSgkaXRlbVskZi4nY3ZsaW5rJy4kYl0pICYmICFpc19udW1lcmljKCRpdGVtWyRmLidjdmxpbmsnLiRiXSkgJiYgJGl0ZW1bJGYuJ2N2bGluaycuJGJdID09PSBiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGl0ZW1bJGYuJ2N2bGluaycuJGJdLCB0cnVlKSkpDQoJCQl7DQoJCQkJJGtleSA9IHJ0cmltKCRiYXNpYy0+ZGVjcnlwdFN0cmluZygkaXRlbVskZi4nY3ZsaW5rJy4kYl0pLCAiXDAiKTsNCgkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGtleSkgJiYgIWlzX251bWVyaWMoJGtleSkpDQoJCQkJew0KCQkJCQkka2V5QXJyYXkgPSBleHBsb2RlKCcuJywgJGtleSk7DQoJCQkJCSRpdGVtWyRmLidjdmxpbmsnLiRiXSA9IFVyaTo6cm9vdCgpLidpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1kb3dubG9hZC5wZGYmdG9rZW49Jy5Kb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCkuJyZmaWxlPScgLiAka2V5QXJyYXlbMF0gLiAnLnBkZic7DQoJCQkJCSRyZW1vdmVMaW5rID0gZmFsc2U7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmICgkcmVtb3ZlTGluaykNCgkJew0KCQkJaWYgKGlzc2V0KCRpdGVtLT57JGYuJ2N2bGluaycuJGJ9KSkNCgkJCXsNCgkJCQl1bnNldCgkaXRlbS0+eyRmLidjdmxpbmsnLiRifSk7DQoJCQl9DQoJCQllbHNlaWYgKGlzc2V0KCRpdGVtWyRmLidjdmxpbmsnLiRiXSkpDQoJCQl7DQoJCQkJdW5zZXQoJGl0ZW1bJGYuJ2N2bGluaycuJGJdKTsNCgkJCX0NCgkJfQ0KCQkvLyBidWlsZCB0aGUgbmFtZQ0KCQlpZiAoJ29iamVjdCcgPT0gJG1ldGhvZCAmJiBpc3NldCgkaXRlbS0+eyRmLiduYW1lJy4kYn0pKQ0KCQl7DQoJCQkkdGl0bGUgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkaXRlbS0+eyRmLid0aXRsZScuJGJ9KSkgPyAkaXRlbS0+eyRmLid0aXRsZScuJGJ9LicuICcgOiAoKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJGl0ZW0tPnskZi4ncHJlZml4Jy4kYn0pKSA/ICRpdGVtLT57JGYuJ3ByZWZpeCcuJGJ9LicuICc6ICcnKTsNCgkJCSRpdGVtLT57JGYuJ25hbWUnLiRifSA9ICR0aXRsZS4kaXRlbS0+eyRmLiduYW1lJy4kYn07DQoJCQkvLyBhbHNvIHJlbW92ZSB0aXRsZSBhbmQgcHJlZml4DQoJCQl1bnNldCgkaXRlbS0+eyRmLidwcmVmaXgnLiRifSk7DQoJCQl1bnNldCgkaXRlbS0+eyRmLid0aXRsZScuJGJ9KTsNCgkJfQ0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PSAkbWV0aG9kICYmIGlzc2V0KCRpdGVtWyRmLiduYW1lJy4kYl0pKQ0KCQl7DQoJCQkkdGl0bGUgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkaXRlbVskZi4ndGl0bGUnLiRiXSkpID8gJGl0ZW1bJGYuJ3RpdGxlJy4kYl0uJy4gJyA6ICgoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkaXRlbVskZi4ncHJlZml4Jy4kYl0pKSA/ICRpdGVtWyRmLidwcmVmaXgnLiRiXS4nLiAnOiAnJyk7DQoJCQkkaXRlbVskZi4nbmFtZScuJGJdID0gJHRpdGxlLiRpdGVtWyRmLiduYW1lJy4kYl07DQoJCQkvLyBhbHNvIHJlbW92ZSB0aXRsZSBhbmQgcHJlZml4DQoJCQl1bnNldCgkaXRlbVskZi4ncHJlZml4Jy4kYl0pOw0KCQkJdW5zZXQoJGl0ZW1bJGYuJ3RpdGxlJy4kYl0pOw0KCQl9DQoJCS8vIGJ1aWxkIHRoZSBleHBlcmllbmNlDQoJCWlmICgnb2JqZWN0JyA9PSAkbWV0aG9kICYmIGlzc2V0KCRpdGVtLT57JGYuJ2V4cGVyaWVuY2UnLiRifSkpDQoJCXsNCgkJCSR5ZWFycyA9ICgkaXRlbS0+eyRmLidleHBlcmllbmNlJy4kYn0gPT0gMSkgPyBUZXh0OjpfKCdZZWFyJyk6IFRleHQ6Ol8oJ1llYXJzJyk7DQoJCQkkaXRlbS0+eyRmLidleHBlcmllbmNlJy4kYn0gPSAkaXRlbS0+eyRmLidleHBlcmllbmNlJy4kYn0uJyAnLiR5ZWFyczsNCgkJfQ0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PSAkbWV0aG9kICYmIGlzc2V0KCRpdGVtWyRmLidleHBlcmllbmNlJy4kYl0pKQ0KCQl7DQoJCQkkeWVhcnMgPSAoJGl0ZW1bJGYuJ2V4cGVyaWVuY2UnLiRiXSA9PSAxKSA/IFRleHQ6Ol8oJ1llYXInKTogVGV4dDo6XygnWWVhcnMnKTsNCgkJCSRpdGVtWyRmLidleHBlcmllbmNlJy4kYl0gPSAkaXRlbVskZi4nZXhwZXJpZW5jZScuJGJdLicgJy4keWVhcnM7DQoJCX0NCgkJLy8gc2V0IHNwZWNpYWxpc2F0aW9uIGFuZCBnZW9ncmFwaGljX2ZvY3VzIHRvIHN0cmluZw0KCQkkdGFibGVzID0gYXJyYXkoJ3NwZWNpYWxpc2F0aW9uJywnZ2VvZ3JhcGhpY19mb2N1cycpOw0KCQlmb3JlYWNoICgkdGFibGVzIGFzICR0YWJsZSkNCgkJew0KCQkJaWYgKCdvYmplY3QnID09ICRtZXRob2QgJiYgaXNzZXQoJGl0ZW0tPnskZi4kdGFibGUuJGJ9KSkNCgkJCXsNCgkJCQkkc3R1ZmYgPSBqc29uX2RlY29kZSgkaXRlbS0+eyRmLiR0YWJsZS4kYn0sdHJ1ZSk7DQoJCQkJJGxpbmUgPSBhcnJheSgpOw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkc3R1ZmYpKQ0KCQkJCXsNCgkJCQkJJG5hYW0gPSAnJzsNCgkJCQkJZm9yZWFjaCAoJHN0dWZmIGFzICR2YWwpDQoJCQkJCXsNCgkJCQkJCWlmICgkbmFhbSA9IHNlbGY6OmdldFZhcigkdGFibGUsICR2YWwsICdpZCcsICduYW1lJykpDQoJCQkJCQl7DQoJCQkJCQkJJGxpbmVbXSA9ICRuYWFtOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChpc3NldCgkbGluZSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGxpbmUpKQ0KCQkJCXsNCgkJCQkJJGl0ZW0tPnskZi4kdGFibGUuJGJ9ID0gaW1wbG9kZSgnLCAnLCAkbGluZSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXVuc2V0KCRpdGVtLT57JGYuJHRhYmxlLiRifSk7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmIChpc3NldCgkaXRlbVskZi4kdGFibGUuJGJdKSkNCgkJCXsNCgkJCQkkc3R1ZmYgPSBqc29uX2RlY29kZSgkaXRlbVskZi4kdGFibGUuJGJdLHRydWUpOw0KCQkJCSRsaW5lID0gYXJyYXkoKTsNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHN0dWZmKSkNCgkJCQl7DQoJCQkJCSRuYWFtID0gJyc7DQoJCQkJCWZvcmVhY2ggKCRzdHVmZiBhcyAkdmFsKQ0KCQkJCQl7DQoJCQkJCQlpZiAoJG5hYW0gPSBzZWxmOjpnZXRWYXIoJHRhYmxlLCAkdmFsLCAnaWQnLCAnbmFtZScpKQ0KCQkJCQkJew0KCQkJCQkJCSRsaW5lW10gPSAkbmFhbTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoaXNzZXQoJGxpbmUpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRsaW5lKSkNCgkJCQl7DQoJCQkJCSRpdGVtWyRmLiR0YWJsZS4kYl0gPSBpbXBsb2RlKCcsICcsICRsaW5lKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJdW5zZXQoJGl0ZW1bJGYuJHRhYmxlLiRiXSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIHJlbW92ZSAwIGFuZCByZXBsYWNlIHdpdGggZW1wdHkgc3RyaW5nDQoJCWlmICgncGxhY2Vob2xkZXInID09ICRtZXRob2QpDQoJCXsNCgkJCWZvcmVhY2ggKCRpdGVtIGFzICRrZXkgPT4gJiR2YWx1ZSkNCgkJCXsNCgkJCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR2YWx1ZSkpDQoJCQkJew0KCQkJCQkkdmFsdWUgPSAnJzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRpdGVtOw0KCX0NCltDVVNUT01DT0RFPWdldENvbXBhbnlEZXRhaWxzXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCltDVVNUT01DT0RFPXVzZXJJc1RocmVlK2FkbWludXNlcixvcmdhbmlzYXRpb251c2VyLGV4cGVydHVzZXIsb3JnYW5pc2F0aW9uLGV4cGVydF0NCgkvKioNCgkqIAlUaGUgb3duZXINCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRvd25lciA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhc0FjY2VzcygkcmVjb3JkSWQsICR1c2VySWQgPSBudWxsLCAkdG8gPSAnZXhwZXJ0JykNCgl7DQoJCWlmKCEkdXNlcklkKQ0KCQl7DQoJCQkkdXNlcklkID0gRmFjdG9yeTo6Z2V0VXNlcigpLT5pZDsNCgkJfQ0KCQkkdHlwZSA9IHNlbGY6OnVzZXJJcygkdXNlcklkKTsNCgkJaWYgKCR0eXBlICYmICRyZWNvcmRJZCA+IDApDQoJCXsNCgkJCXN3aXRjaCgkdG8pDQoJCQl7DQoJCQkJY2FzZSAnZXhwZXJ0JzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc0V4cGVydCgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdvcmdhbmlzYXRpb24nOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzT3JnYW5pc2F0aW9uKCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc09yZ2FuaXNhdGlvbigkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbmlzYXRpb24gaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ29yZ2FuaXNhdGlvbicuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ29yZ2FuaXNhdGlvbicuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignb3JnYW5pc2F0aW9uJywgJHJlY29yZElkLCAnaWQnLCAndXNlcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ29yZ2FuaXNhdGlvbicuJHJlY29yZElkXSA9PSAkdXNlcklkKQ0KCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0V4cGVydCgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAxOiAvLyBjaGVjayBpZiBleHBlcnQgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2V4cGVydCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2V4cGVydCcuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignZXhwZXJ0JywgJHJlY29yZElkLCAnaWQnLCAndXNlcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2V4cGVydCcuJHJlY29yZElkXSA9PSAkdXNlcklkKQ0KCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIGNoZWNrIGNvbmZpcm1hdGlvbg0KCSoNCgkqIEBpbnB1dAkgIGludCAgICAgICAgICAgICAgICAgICAgICAgJGlkICAgICBUaGUgZGF0YSBpZA0KCSogQGlucHV0CSAgYXJyYXkgICAgICAgICAgICAgICAgICAgJGRhdGEgICAgIFRoZSB2YWxpZCBkYXRhDQoJKg0KCSogQHJldHVybnMgIGJvb2xlYW4gb24gc3VjY2Vzcw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tDb25maXJtYXRpb24oJGlkLCAmJGRhdGEpDQoJew0KCQkkdXBkYXRlRGF0YSA9IGFycmF5KCk7DQoJCS8vIGxvYWQgdGhlIHJlZmVyZW5jZSBkYXRhIGlmIHNldA0KCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ3JlZmVyZW5jZSddKSkNCgkJew0KCQkJJHJlZmVyZW5jZSA9IGpzb25fZGVjb2RlKCRkYXRhWydyZWZlcmVuY2UnXSx0cnVlKTsNCgkJfQ0KCQkvLyBjaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBjb25maXJtYXRpb24gZGF0YSBzZXQNCgkJaWYgKCRjb25maXJtYXRpb24gPSBzZWxmOjpnZXRDb25maXJtYXRpb24oJGlkKSkNCgkJew0KCQkJLy8gdGhlcmUgaXMgYW55IHJlZmVyZW5jZSBkYXRhIHNldA0KCQkJaWYgKGlzc2V0KCRyZWZlcmVuY2UpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRyZWZlcmVuY2VbJ2VtYWlsJ10pKQ0KCQkJew0KCQkJCS8vIHdlIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGUgZGF0YSBpZiB0aGUgZW1haWwgY2hhbmdlZA0KCQkJCWlmICgJJHJlZmVyZW5jZVsnZW1haWwnXVswXSAhPT0gJGNvbmZpcm1hdGlvblsnZW1haWwnXSB8fA0KCQkJCQkkcmVmZXJlbmNlWydvcmdhbmlzYXRpb25fcmVmJ11bMF0gIT09ICRjb25maXJtYXRpb25bJ29yZ2FuaXNhdGlvbiddIHx8DQoJCQkJCSRyZWZlcmVuY2VbJ25hbWUnXVswXSAhPT0gJGNvbmZpcm1hdGlvblsnbmFtZSddIHx8DQoJCQkJCSRyZWZlcmVuY2VbJ3Bob25lJ11bMF0gIT09ICRjb25maXJtYXRpb25bJ3Bob25lJ10gfHwNCgkJCQkJJHJlZmVyZW5jZVsiY291bnRyeSJdWzBdICE9PSAkY29uZmlybWF0aW9uWydjb3VudHJ5J10gIHx8DQoJCQkJCSRyZWZlcmVuY2VbInBvc2l0aW9uIl1bMF0gIT09ICRjb25maXJtYXRpb25bJ3Bvc2l0aW9uJ10NCgkJCQkJKQ0KCQkJCXsNCgkJCQkJaWYgKChpc3NldCgkY29uZmlybWF0aW9uWydjb25maXJtZWQnXSkgJiYgJGNvbmZpcm1hdGlvblsnY29uZmlybWVkJ10gPT0gMSkgfHwgKCFzZWxmOjp1cGRhdGVDb25maXJtYXRpb24oJGlkLCAkcmVmZXJlbmNlLCAkZGF0YSkpKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgdGhlIHJlZmVyZW5jZSBkYXRhIGJhY2sgZW4gbG9hZCBlcnJvcg0KCQkJCQkJJHJlZmVyZW5jZVsib3JnYW5pc2F0aW9uX3JlZiJdWzBdID0gJGNvbmZpcm1hdGlvblsnb3JnYW5pc2F0aW9uJ107DQoJCQkJCQkkcmVmZXJlbmNlWyJuYW1lIl1bMF0gPSAkY29uZmlybWF0aW9uWyduYW1lJ107DQoJCQkJCQkkcmVmZXJlbmNlWyJlbWFpbCJdWzBdID0gJGNvbmZpcm1hdGlvblsnZW1haWwnXTsNCgkJCQkJCSRyZWZlcmVuY2VbInBob25lIl1bMF0gPSAkY29uZmlybWF0aW9uWydwaG9uZSddOw0KCQkJCQkJJHJlZmVyZW5jZVsicG9zaXRpb24iXVswXSA9ICRjb25maXJtYXRpb25bJ3Bvc2l0aW9uJ107DQoJCQkJCQkkcmVmZXJlbmNlWyJjb3VudHJ5Il1bMF0gPSAkY29uZmlybWF0aW9uWydjb3VudHJ5J107DQoJCQkJCQkvLyB1cGRhdGUgdGhlIHJlZmVyZW5jZSBkYXRhDQoJCQkJCQlzZWxmOjp1cGRhdGVSZWZlcmVuY2VEYXRhKCRpZCwganNvbl9lbmNvZGUoJHJlZmVyZW5jZSkpOw0KCQkJCQkJLy8gc2V0IHRoZSB3YXJuaW5nIG5vdGljZSBzaW5jZSBub3QgcmVmZXJyYWwgd2FzIHNldA0KCQkJCQkJaWYgKGlzc2V0KCRjb25maXJtYXRpb25bJ2NvbmZpcm1lZCddKSAmJiAkY29uZmlybWF0aW9uWydjb25maXJtZWQnXSA9PSAxKQ0KCQkJCQkJew0KCQkJCQkJCSRkYXRhWydlcnJvcnMnXVtdID0gVGV4dDo6XygnWW91IGNhbm5vdCBkZWxldGUgb3IgY2hhbmdlIHRoaXMgZmlyc3QgcmVmZXJlbmNlIHBlcnNvbiBkZXRhaWxzIGFmdGVyIHRoaXMgcGVyc29uIGhhcyB2ZXJpZmllZCB5b3VyIGluZm9ybWF0aW9uLCB1bmxlc3MgeW91IGNvbnRhY3Qgc3VwcG9ydCB3aXRoIHRoZSByZWFzb25zIGZvciBkb2luZyBzby4nKTsNCgkJCQkJCX0NCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJCS8vIHNldCB0aGUgcmVmZXJlbmNlIGRhdGEgYmFjayBlbiBsb2FkIGVycm9yDQoJCQkkdXBkYXRlRGF0YVsib3JnYW5pc2F0aW9uX3JlZiJdW10gPSAkY29uZmlybWF0aW9uWydvcmdhbmlzYXRpb24nXTsNCgkJCSR1cGRhdGVEYXRhWyJuYW1lIl1bXSA9ICRjb25maXJtYXRpb25bJ25hbWUnXTsNCgkJCSR1cGRhdGVEYXRhWyJlbWFpbCJdW10gPSAkY29uZmlybWF0aW9uWydlbWFpbCddOw0KCQkJJHVwZGF0ZURhdGFbInBob25lIl1bXSA9ICRjb25maXJtYXRpb25bJ3Bob25lJ107DQoJCQkkdXBkYXRlRGF0YVsicG9zaXRpb24iXVtdID0gJGNvbmZpcm1hdGlvblsncG9zaXRpb24nXTsNCgkJCSR1cGRhdGVEYXRhWyJjb3VudHJ5Il1bXSA9ICRjb25maXJtYXRpb25bJ2NvdW50cnknXTsNCgkJCS8vIHVwZGF0ZSB0aGUgcmVmZXJlbmNlIGRhdGENCgkJCXNlbGY6OnVwZGF0ZVJlZmVyZW5jZURhdGEoJGlkLCBqc29uX2VuY29kZSgkdXBkYXRlRGF0YSkpOw0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgY2Fubm90IGRlbGV0ZSBvciBjaGFuZ2UgdGhpcyBmaXJzdCByZWZlcmVuY2UgcGVyc29uIGRldGFpbHMgYWZ0ZXIgdGhpcyBwZXJzb24gaGFzIHZlcmlmaWVkIHlvdXIgaW5mb3JtYXRpb24sIHVubGVzcyB5b3UgY29udGFjdCBzdXBwb3J0IHdpdGggdGhlIHJlYXNvbnMgZm9yIGRvaW5nIHNvLicpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCS8vIHRoZXJlIGlzIGFueSByZWZlcmVuY2UgZGF0YSBzZXQNCgkJaWYgKGlzc2V0KCRyZWZlcmVuY2UpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRyZWZlcmVuY2VbJ2VtYWlsJ10pKQ0KCQl7DQoJCQlpZiAoc2VsZjo6c2V0Q29uZmlybWF0aW9uKCRpZCwgJHJlZmVyZW5jZSwgJGRhdGEpKQ0KCQkJew0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJCS8vIHNldCB0aGUgd2FybmluZyBub3RpY2Ugc2luY2Ugbm90IHJlZmVycmFsIHdhcyBzZXQNCgkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3VyIGFjY291bnQgd2lsbCBub3QgYmUgYWN0aXZhdGVkLiBJdCBpcyBtYW5kYXRvcnkgdG8gYWRkIGF0IGxlYXN0IG9uZSByZWZlcmVuY2UgcGVyc29uIGluIG9yZGVyIHRvIHZlcmlmeSB0aGUgaW5mb3JtYXRpb24geW91IHByb3ZpZGVkLicpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiB1cGRhdGUgUmVmZXJlbmNlIERhdGENCgkqDQoJKiBAaW5wdXQJICBpbnQgICAgICAgICRpZCAgICAgVGhlIGV4cGVydCBpZA0KCSogQGlucHV0CSAgc3RyaW5nICAgICAgICAkcmVmZXJlbmNlICAgICBUaGUgcmVmZXJlbmNlIGpzb24NCgkqDQoJKiBAcmV0dXJucyAgYm9vbCBvbiBzdWNjZXNzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVSZWZlcmVuY2VEYXRhKCRpZCwgJHZhbHVlLCAkdGFyZ2V0ID0gInJlZmVyZW5jZSIpDQoJewkJDQoJCS8vIENyZWF0ZSBhbiBvYmplY3QgZm9yIHRoZSByZWNvcmQgd2UgYXJlIGdvaW5nIHRvIHVwZGF0ZS4NCgkJJG9iamVjdCA9IG5ldyBcc3RkQ2xhc3MoKTsNCiANCgkJLy8gTXVzdCBiZSBhIHZhbGlkIHByaW1hcnkga2V5IHZhbHVlLg0KCQkkb2JqZWN0LT5pZCA9ICRpZDsNCgkJJG9iamVjdC0+JHRhcmdldCA9ICR2YWx1ZTsNCiANCgkJLy8gVXBkYXRlIHRoZWlyIGRldGFpbHMgaW4gdGhlIGV4cGVydCB0YWJsZSB1c2luZyBpZCBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCXJldHVybiBGYWN0b3J5OjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fZXhwZXJ0JywgJG9iamVjdCwgJ2lkJyk7DQoJfQ0KDQoJLyoqDQoJKiBnZXQgY29uZmlybWF0aW9uDQoJKg0KCSogQGlucHV0CSAgaW50ICAgICAgICAkaWQgICAgIFRoZSBleHBlcnQgaWQNCgkqDQoJKiBAcmV0dXJucyAgb2JqZWN0IGlmIGZvdW5kDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRDb25maXJtYXRpb24oJGlkKQ0KCXsJCQ0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJ2EuKicpOw0KCQkkcXVlcnktPmZyb20oJyNfX1tbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24gQVMgYScpOw0KCQkkcXVlcnktPndoZXJlKCdhLmV4cGVydCA9ICcuIChpbnQpICRpZCk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gJGRiLT5sb2FkQXNzb2MoKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiB1cGRhdGUgY29uZmlybWF0aW9uDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVDb25maXJtYXRpb24oJGlkLCAkcmVmZXJlbmNlLCAmJGRhdGEpDQoJew0KCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggZGF0YSBhbmQgdGhhdCBpdCBpcyBjb3JyZWN0DQoJCSRtYWlsID0gRmFjdG9yeTo6Z2V0TWFpbGVyKCk7DQoJCSR1cGRhdGUgPSB0cnVlOw0KCQlpZiAoISRtYWlsLT5WYWxpZGF0ZUFkZHJlc3MoJHJlZmVyZW5jZVsnZW1haWwnXVswXSkpDQoJCXsNCgkJCSRkYXRhWydlcnJvcnMnXVtdID0gJHJlZmVyZW5jZVsnZW1haWwnXVswXSAuICcgJyAuIFRleHQ6Ol8oJ2lzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuIDxiPihSZWZlcmVuY2VzIEVSUk9SISk8L2I+Jyk7DQoJCQkkdXBkYXRlID0gZmFsc2U7DQoJCX0NCgkJaWYgKCFTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcmVmZXJlbmNlWyduYW1lJ11bMF0pKQ0KCQl7DQoJCQkkZGF0YVsnZXJyb3JzJ11bXSA9IFRleHQ6Ol8oJ1lvdSBuZWVkIHRvIGFkZCByZWZlcmVuY2UgbmFtZS4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSR1cGRhdGUgPSBmYWxzZTsNCgkJfQ0KCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRyZWZlcmVuY2VbJ29yZ2FuaXNhdGlvbl9yZWYnXVswXSkpDQoJCXsNCgkJCSRkYXRhWydlcnJvcnMnXVtdID0gVGV4dDo6XygnWW91IG5lZWQgdG8gYWRkIHJlZmVyZW5jZSBvcmdhbmlzYXRpb24gbmFtZS4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSR1cGRhdGUgPSBmYWxzZTsNCgkJfQ0KCQlpZiAoIWlzc2V0KCRyZWZlcmVuY2VbJ2NvdW50cnknXVswXSkgfHwgJHJlZmVyZW5jZVsnY291bnRyeSddWzBdIDw9IDApDQoJCXsNCgkJCSRkYXRhWydlcnJvcnMnXVtdID0gVGV4dDo6XygnWW91IG5lZWQgdG8gYWRkIHJlZmVyZW5jZSBjb3VudHJ5LiA8Yj4oUmVmZXJlbmNlcyBFUlJPUiEpPC9iPicpOw0KCQkJJHVwZGF0ZSA9IGZhbHNlOw0KCQl9DQoJCWlmICgkdXBkYXRlKQ0KCQl7DQoJCQkvLyBDcmVhdGUgYW4gb2JqZWN0IGZvciB0aGUgcmVjb3JkIHdlIGFyZSBnb2luZyB0byB1cGRhdGUuDQoJCQkkb2JqZWN0ID0gbmV3IFxzdGRDbGFzcygpOw0KCQkJLy8gTXVzdCBiZSBhIHZhbGlkIHByaW1hcnkga2V5IHZhbHVlLg0KCQkJJG9iamVjdC0+ZXhwZXJ0ID0gJGlkOw0KCQkJJG9iamVjdC0+b3JnYW5pc2F0aW9uID0gJHJlZmVyZW5jZVsnb3JnYW5pc2F0aW9uX3JlZiddWzBdOw0KCQkJJG9iamVjdC0+bmFtZSA9ICRyZWZlcmVuY2VbJ25hbWUnXVswXTsNCgkJCSRvYmplY3QtPmVtYWlsID0gJHJlZmVyZW5jZVsnZW1haWwnXVswXTsNCgkJCSRvYmplY3QtPnBob25lID0gJHJlZmVyZW5jZVsncGhvbmUnXVswXTsNCgkJCSRvYmplY3QtPnBvc2l0aW9uID0gJHJlZmVyZW5jZVsncG9zaXRpb24nXVswXTsNCgkJCSRvYmplY3QtPmNvdW50cnkgPSAoaW50KSAkcmVmZXJlbmNlWydjb3VudHJ5J11bMF07DQoJCQkkb2JqZWN0LT5lbWFpbHNlbmQgPSAyOw0KDQoJCQkvLyBVcGRhdGUgdGhlaXIgZGV0YWlscyBpbiB0aGUgZXhwZXJ0IHRhYmxlIHVzaW5nIGV4cGVydCBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCQlyZXR1cm4gRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX2NvbmZpcm1hdGlvbicsICRvYmplY3QsICdleHBlcnQnKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBzZXQgY29uZmlybWF0aW9uDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRDb25maXJtYXRpb24oJGlkLCAkcmVmZXJlbmNlLCAmJGRhdGEpDQoJew0KCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggZGF0YSBhbmQgdGhhdCBpdCBpcyBjb3JyZWN0DQoJCSRtYWlsID0gRmFjdG9yeTo6Z2V0TWFpbGVyKCk7DQoJCSRzdG9yZSA9IHRydWU7DQoJCWlmICghJG1haWwtPlZhbGlkYXRlQWRkcmVzcygkcmVmZXJlbmNlWydlbWFpbCddWzBdKSkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSAkcmVmZXJlbmNlWydlbWFpbCddWzBdIC4gJyAnIC4gVGV4dDo6XygnaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcy4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSRzdG9yZSA9IGZhbHNlOw0KCQl9DQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHJlZmVyZW5jZVsnbmFtZSddWzBdKSkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgbmVlZCB0byBhZGQgcmVmZXJlbmNlIG5hbWUuIDxiPihSZWZlcmVuY2VzIEVSUk9SISk8L2I+Jyk7DQoJCQkkc3RvcmUgPSBmYWxzZTsNCgkJfQ0KCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRyZWZlcmVuY2VbJ29yZ2FuaXNhdGlvbl9yZWYnXVswXSkpDQoJCXsNCgkJCSRkYXRhWydlcnJvcnMnXVtdID0gVGV4dDo6XygnWW91IG5lZWQgdG8gYWRkIHJlZmVyZW5jZSBvcmdhbmlzYXRpb24gbmFtZS4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSRzdG9yZSA9IGZhbHNlOw0KCQl9DQoJCWlmICghaXNzZXQoJHJlZmVyZW5jZVsnY291bnRyeSddWzBdKSB8fCAkcmVmZXJlbmNlWydjb3VudHJ5J11bMF0gPD0gMCkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgbmVlZCB0byBhZGQgcmVmZXJlbmNlIGNvdW50cnkuIDxiPihSZWZlcmVuY2VzIEVSUk9SISk8L2I+Jyk7DQoJCQkkc3RvcmUgPSBmYWxzZTsNCgkJfQ0KCQlpZiAoJHN0b3JlKQ0KCQl7DQoJCQkvLyBDcmVhdGUgYW4gb2JqZWN0IGZvciB0aGUgcmVjb3JkIHdlIGFyZSBnb2luZyB0byB1cGRhdGUuDQoJCQkkb2JqZWN0ID0gbmV3IFxzdGRDbGFzcygpOw0KCQkJLy8gTXVzdCBiZSBhIHZhbGlkIHByaW1hcnkga2V5IHZhbHVlLg0KCQkJJG9iamVjdC0+ZXhwZXJ0ID0gJGlkOw0KCQkJJG9iamVjdC0+b3JnYW5pc2F0aW9uID0gJHJlZmVyZW5jZVsnb3JnYW5pc2F0aW9uX3JlZiddWzBdOw0KCQkJJG9iamVjdC0+bmFtZSA9ICRyZWZlcmVuY2VbJ25hbWUnXVswXTsNCgkJCSRvYmplY3QtPmVtYWlsID0gJHJlZmVyZW5jZVsnZW1haWwnXVswXTsNCgkJCSRvYmplY3QtPnBob25lID0gJHJlZmVyZW5jZVsncGhvbmUnXVswXTsNCgkJCSRvYmplY3QtPnBvc2l0aW9uID0gJHJlZmVyZW5jZVsncG9zaXRpb24nXVswXTsNCgkJCSRvYmplY3QtPmNvdW50cnkgPSAoaW50KSAkcmVmZXJlbmNlWydjb3VudHJ5J11bMF07DQoJCQkkb2JqZWN0LT5lbWFpbHNlbmQgPSAyOw0KDQoJCQkvLyBVcGRhdGUgdGhlaXIgZGV0YWlscyBpbiB0aGUgZXhwZXJ0IHRhYmxlIHVzaW5nIGlkIGFzIHRoZSBwcmltYXJ5IGtleS4NCgkJCXJldHVybiBGYWN0b3J5OjpnZXREYm8oKS0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uJywgJG9iamVjdCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPWhlbHBlckVycm9yc10=', 'CS8qKg0KCSogCUxvYWQgdGhlIENvbmZpcm1hdGlvbiBBamF4IHRvIHBhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRDb25maXJtYXRpb25BamF4KCRkb2N1bWVudCkNCgl7DQoJCS8vIGFkZCBhbiBldmVudCB0aGF0IHdpbGwgc2VuZCBvdXQgYWxsIGNvbmZpcm1hdGlvbiBlbWFpbHMsIG5vdCB5ZXQgc2VuZA0KCQkkZG9jdW1lbnQtPmFkZFNjcmlwdERlY2xhcmF0aW9uKCINCgkJCWpRdWVyeSh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJc2VuZENvbmZpcm1hdGlvbkVtYWlscygxKTsNCgkJCX0pOw0KCQkJDQoJCQlmdW5jdGlvbiBzZW5kQ29uZmlybWF0aW9uRW1haWxzKHR5cGUpIHsNCgkJCQl2YXIgZ2V0VXJsID0gJyIuVXJpOjpyb290KCkuImluZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguc2VuZENvbmZpcm1hdGlvbkVtYWlscyZmb3JtYXQ9anNvbic7DQoJCQkJaWYodHlwZSA+IDApew0KCQkJCQl2YXIgcmVxdWVzdCA9ICd0b2tlbj0iLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4iJnR5cGU9Jyt0eXBlOw0KCQkJCX0NCgkJCQlyZXR1cm4galF1ZXJ5LmFqYXgoew0KCQkJCQl0eXBlOiAnUE9TVCcsDQoJCQkJCXVybDogZ2V0VXJsLA0KCQkJCQlkYXRhVHlwZTogJ2pzb25wJywNCgkJCQkJZGF0YTogcmVxdWVzdCwNCgkJCQkJanNvbnA6ICdjYWxsYmFjaycNCgkJCQl9KTsNCgkJCX0iKTsNCgl9', '', '', '', '', '', 'CQlzZWxmOjpsb2FkQ29uZmlybWF0aW9uQWpheCgkZG9jdW1lbnQpOw==', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXSgvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV8jIyNjb21wb25lbnQjIyMvYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMgQ29tcG9uZW50IE51bWJlcg0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCiMgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyDQoNCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEpDQiB2aXNpdCBbVkRNXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKSBUb2RheSEgVGhlIGZ1dHVyZSBpcyBoZXJlIQ==', '', '', 'Expert Database', '', '', 'Expert Database (public)', '.git', '', 1, 1, 'https://www.vdm.io/updates/expertdatabase_update_server.xml', 'http://www.vdm.io', '', '+0F3f7K0ampGK9b6ZYmR+QGwNik51oBRG+Mail7kHsJ3c4Td3MPUUp290mkpqjm2FElXcGch52OM0I19xHtStQ==', 'https://www.vdm.io/access/', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 221, '', 1, 60), +(25, '', '', '', '', '', '', '', '', 1, '', '', '', 1, '', 1, '', '', '', '', 1, '', '', '', '', 1, '{}', '', 1, 1, 3, 'Llewellyn van der Merwe', '', 'default.txt', '', '', 'Vast Development Method', '2.1.0', 'Copyright (C) 2015. All Rights Reserved', '2016-10-18 11:44:09', '', 'mvVkzmHCEIoBhzD3gR3uTzXRGwNVNRWw8Hr1vrXxb+I=', 'BbloLSYT6Yup6v3I/YNmrdOwzjbI4BGfDvJSB82N9DU=', '', 'VtSt2RMz+AHCrwc7jk1G70t83ZwZsNp2upqfzMyaVHE=', '', '', '', 1, '', 'Just a basic demo of the most basic implementations of the [Joomla](http://www.joomla.org) Component Builder\'s ability.', 'joomla@vdm.io', '', '', 'nZDegSPK87rXA4KMC6P8I6zEldjVIJpPYGRPZlKBI+U=', '', 'efde995e-60aa-4b39-b644-44349dfb660d', 'images/vdm/demo500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Demo-Component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2024-01-19 11:57:08', '', 'Demo', 'demo', 'JCB', 4, '', '', '', 'CS8qKg0KCSAqCUNoYW5nZSB0byBuaWNlIGZhbmN5IGRhdGUNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhbmN5RGF0ZSgkZGF0ZSkNCgl7DQoJCWlmICghc2VsZjo6aXNWYWxpZFRpbWVTdGFtcCgkZGF0ZSkpDQoJCXsNCgkJCSRkYXRlID0gc3RydG90aW1lKCRkYXRlKTsNCgkJfQ0KCQlyZXR1cm4gZGF0ZSgnalMgXG9cZiBGIFknLCRkYXRlKTsNCgl9DQoNCgkvKioNCgkgKglDaGFuZ2UgdG8gbmljZSBmYW5jeSB0aW1lIGFuZCBkYXRlDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYW5jeURhdGVUaW1lKCR0aW1lKQ0KCXsNCgkJaWYgKCFzZWxmOjppc1ZhbGlkVGltZVN0YW1wKCR0aW1lKSkNCgkJew0KCQkJJHRpbWUgPSBzdHJ0b3RpbWUoJHRpbWUpOw0KCQl9DQoJCXJldHVybiBkYXRlKCcoRzppKSBqUyBcb1xmIEYgWScsJHRpbWUpOw0KCX0NCg0KCS8qKg0KCSAqCUNoYW5nZSB0byBuaWNlIGhvdXI6bWludXRlcyB0aW1lDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYW5jeVRpbWUoJHRpbWUpDQoJew0KCQlpZiAoIXNlbGY6OmlzVmFsaWRUaW1lU3RhbXAoJHRpbWUpKQ0KCQl7DQoJCQkkdGltZSA9IHN0cnRvdGltZSgkdGltZSk7DQoJCX0NCgkJcmV0dXJuIGRhdGUoJ0c6aScsJHRpbWUpOw0KCX0NCg0KCS8qKg0KCSAqCUNoZWNrIGlmIHN0cmluZyBpcyBhIHZhbGlkIHRpbWUgc3RhbXANCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzVmFsaWRUaW1lU3RhbXAoJHRpbWVzdGFtcCkNCgl7DQoJCXJldHVybiAoKGludCkgJHRpbWVzdGFtcCA9PT0gJHRpbWVzdGFtcCkNCgkJJiYgKCR0aW1lc3RhbXAgPD0gUEhQX0lOVF9NQVgpDQoJCSYmICgkdGltZXN0YW1wID49IH5QSFBfSU5UX01BWCk7DQoJfQ0K', '', 'CQkvLyBHZXQgQXBwbGljYXRpb24gb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnVGhpcyBpcyBhIGRlbW8gY29tcG9uZW50IGRldmVsb3BlZCBpbiA8YSBocmVmPSJodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyIiB0YWdldD0iX2JhbG5rIiB0aXRsZT0iSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIj5KQ0I8L2E+ISBZb3UgY2FuIGJ1aWxkIG1vcmUgY29tcG9uZW50cyBsaWtlIHRoaXMgd2l0aCBKQ0IsIGNoZWNrb3V0IG91ciBwYWdlIG9uIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyIiB0YWdldD0iX2JhbG5rIiB0aXRsZT0iSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIj5naXRodWI8L2E+IGZvciBtb3JlIGluZm8uIFRoZSBmdXR1cmUgb2YgPGEgaHJlZj0iaHR0cDovL3ZkbS5iei9jb21wb25lbnQtYnVpbGRlciIgdGFnZXQ9Il9iYWxuayIgdGl0bGU9Ikpvb21sYSBDb21wb25lbnQgQnVpbGRlciI+Sm9vbWxhIENvbXBvbmVudCBEZXZlbG9wbWVudDwvYT4gaXMgSGVyZSEnLCAnSW5mbycpOw==', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIVsjIyNDb21wb25lbnRfbmFtZSMjIyBpbWFnZV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25hbWliaWEvZGVtby1qb29tbGEtMy1jb21wb25lbnQvbWFzdGVyL2FkbWluL2Fzc2V0cy9pbWFnZXMvdmRtLWNvbXBvbmVudC5qcGcgIlRoZSAjIyNDb21wb25lbnRfbmFtZSMjIyIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKSkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gbmV2ZXIgbWFraW5nIG9uZSBtaXN0YWtlIG9yIHRha2luZyBhbnkgY29mZmVlIGJyZWFrLikNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KKiojIyNhY3R1YWxIb3Vyc1NwZW50IyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxEYXlzU3BlbnQjIyMgRWlnaHQgSG91ciBEYXlzKiogKHRoZSBhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNwZW50KQ0KDQo+ICh3aXRoIHRoZSBmb2xsb3dpbmcgYnJlYWsgZG93bjoNCj4gKipkZWJ1Z2dpbmcgQCMjI2RlYnVnZ2luZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA0Ow0KPiAqKnBsYW5uaW5nIEAjIyNwbGFubmluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA3Ow0KPiAqKm1hcHBpbmcgQCMjI21hcHBpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gMTA7DQo+ICoqb2ZmaWNlIEAjIyNvZmZpY2VIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNjspDQoNCioqIyMjYWN0dWFsVG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsVG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqDQooYSB0b3RhbCBvZiB0aGUgcmVhbGlzdGljIHRpbWUgZnJhbWUgZm9yIHRoaXMgcHJvamVjdCkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gd2l0aCB0aGUgbm9ybWFsIGV2ZXJ5ZGF5IHJlYWxpdGllcyBhdCB0aGUgb2ZmaWNlLCB0aGF0IGluY2x1ZGVzIHRoZSBjb21wb25lbnQgcGxhbm5pbmcsIG1hcHBpbmcgJiBkZWJ1Z2dpbmcuKQ0KDQpQcm9qZWN0IGR1cmF0aW9uOiAqKiMjI3Byb2plY3RXZWVrVGltZSMjIyB3ZWVrcyoqIG9yICoqIyMjcHJvamVjdE1vbnRoVGltZSMjIyBtb250aHMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCltDVVNUT01DT0RFPXJlYWRNRWNvbnRyaWJ1dG9yc10=', '', '', 'Demo Component', '', '', 'Demo (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/namibia/demo-joomla-3-component/master/demo_updateserver.xml', 'https://www.vdm.io/', '', '6GeGhXcYZEQosGCi0ZXeuAj3oXBwARl7OnRm9h3rxPQ=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 54, '', 1, 10), +(26, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.5', 'Copyright (C) 2015. All Rights Reserved', '2016-10-18 11:44:09', '', 'V57IYyl69MoRbHvbC+yMIgFWIddrGmkXyPSp1h92rwI=', 'S6GyJe2D2H9ZYjSpC3AQucfZQLo6Dh+PwMvHmOTXgaE=', '', 'awUIYFU9kVsk5AJjwLVFX+F3goHgHrjjKrcQiXnn3k0=', '', '', 'A_110', 2, '', 'Just a basic Notice Board.', 'info@vdm.io', '', '', 'UNL4cGpxdFD7CctzvGO1ixIUs28WPZKXLEcrp9+GXNHbF4gQux3b2G7AqI2n+AxprTYcmla/cEn2C72BdnAvAw==', '', 'c327d3ae-57a4-4403-817d-6f1c694b4b29', 'images/demo300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2021-05-16 15:19:34', '', 'Notice Board', 'noticeboard', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Notice Board', '', '', 'Notice Board', '.git', '', '', 1, '', 'https://www.vdm.io/', '', 'lmEbDzExkqR4uqaWVPEL/ysXmPo6eNVDGOYmP3V3zb0=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 49, '', 1, 9), +(27, '', '', '', '', '', '', '', '', 1, '', 1, '', 1, '', '', '', '', '', '', 1, '', '', '', '', 1, '', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.1', 'Copyright (C) 2015. All Rights Reserved', '2016-10-24 02:49:33', '', '', '', '', '', '', '', '', 1, 1, 'Expert Database component adds the ability to your Joomla to manage various experts and their related details.', 'llewellyn@vdm.io', '', '', '', '', 'f051c1f2-cedb-41e4-bd3c-3cc0cd594979', 'images/expertdatabase.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2016-10-12 09:25:30', '', 'Expert Database', 'expertdatabase', '', 4, '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0Q3VycmVuY3koJGFtb3VudCwkc3VwcG9ydF9ncm91cCkNCgl7DQoJCS8vIGdldCB0aGUgY3VycmVuY3kgaWQNCgkJJGN1cnJlbmN5ID0gc2VsZjo6Z2V0Q3VycmVuY3koJHN1cHBvcnRfZ3JvdXApOw0KCQkvLyBtYWtlIG1vbmV5DQoJCXJldHVybiBzZWxmOjptYWtlTW9uZXkoJGFtb3VudCwkY3VycmVuY3kpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJGN1cnJlbmN5ID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VycmVuY3koJHN1cHBvcnRfZ3JvdXApDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRjdXJyZW5jeVskc3VwcG9ydF9ncm91cF0pKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGxvY2F0aW9uDQoJCQkkYXJlYSA9IHNlbGY6OmdldFZhcignc3VwcG9ydF9ncm91cCcsICRzdXBwb3J0X2dyb3VwLCAnaWQnLCAnYXJlYScpOw0KCQkJLy8gZ2V0IHRoZSBSZWdpb24NCgkJCSRyZWdpb24gPSBzZWxmOjpnZXRWYXIoJ2FyZWEnLCAkYXJlYSwgJ2lkJywgJ3JlZ2lvbicpOw0KCQkJLy8gZ2V0IHRoZSBDb3VudHJ5DQoJCQkkY291bnRyeSA9IHNlbGY6OmdldFZhcigncmVnaW9uJywgJHJlZ2lvbiwgJ2lkJywgJ2NvdW50cnknKTsNCgkJCS8vIGdldCB0aGUgQ3VycmVuY3kgQ29kZXRocmVlDQoJCQkkY29kZXRocmVlID0gc2VsZjo6Z2V0VmFyKCdjb3VudHJ5JywgJGNvdW50cnksICdpZCcsICdjdXJyZW5jeScpOw0KCQkJLy8gZ2V0IGN1cnJlbmN5IGlkDQoJCQlzZWxmOjokY3VycmVuY3lbJHN1cHBvcnRfZ3JvdXBdID0gc2VsZjo6Z2V0VmFyKCdjdXJyZW5jeScsICRjb2RldGhyZWUsICdjb2RldGhyZWUnLCAnaWQnKTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGN1cnJlbmN5WyRzdXBwb3J0X2dyb3VwXTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRjdXJyZW5jeURldGFpbHMgPSBhcnJheSgpOw0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDdXJyZW5jeURldGFpbHMoJGlkID0gZmFsc2UpDQoJew0KCQlpZihpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skaWRdKSkNCgkJCXsNCgkJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJCQlhcnJheSgJJ2EuaWQnLCdhLm5hbWUnLCdhLmNvZGV0aHJlZScsJ2EubnVtZXJpY2NvZGUnLCdhLnN5bWJvbCcsJ2EudGhvdXNhbmRzJywnYS5kZWNpbWFscGxhY2UnLA0KCQkJCQkJJ2EuZGVjaW1hbHN5bWJvbCcsJ2EucG9zaXRpdmVzdHlsZScsJ2EubmVnYXRpdmVzdHlsZScpLA0KCQkJCQlhcnJheSgJJ2N1cnJlbmN5X2lkJywnY3VycmVuY3lfbmFtZScsJ2N1cnJlbmN5X2NvZGV0aHJlZScsJ2N1cnJlbmN5X251bWVyaWNjb2RlJywnY3VycmVuY3lfc3ltYm9sJywNCgkJCQkJCSdjdXJyZW5jeV90aG91c2FuZHMnLCdjdXJyZW5jeV9kZWNpbWFscGxhY2UnLCdjdXJyZW5jeV9kZWNpbWFsc3ltYm9sJywnY3VycmVuY3lfcG9zaXRpdmVzdHlsZScsDQoJCQkJCQknY3VycmVuY3lfbmVnYXRpdmVzdHlsZScpKSk7DQoJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY3VycmVuY3knLCAnYScpKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcuKGludCkgJGlkKTsNCgkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skaWRdID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGlkXSA9IGZhbHNlOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiBzZWxmOjokY3VycmVuY3lEZXRhaWxzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1ha2VNb25leSgkbnVtYmVyLCRjdXJyZW5jeSA9IGZhbHNlKQ0KCXsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgd2UgaGF2ZSBhIG51bWJlcg0KCQlpZiAoaXNfbnVtZXJpYygkbnVtYmVyKSkNCgkJew0KCQkJLy8gbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlIG5lZ2F0aXZlIGZpbmRlciBmaWxlDQoJCQlpbmNsdWRlX29uY2UgJ25lZ2F0aXZlZmluZGVyLnBocCc7DQoJCQkvLyBjaGVjayBpZiB0aGUgbnVtYmVyIGlzIG5lZ2F0aXZlDQoJCQkkbmVnYXRpdmVGaW5kZXJPYmogPSBuZXcgTmVnYXRpdmVGaW5kZXIobmV3IEV4cHJlc3Npb24oIiRudW1iZXIiKSk7DQoJCQkkbmVnYXRpdmUgPSAkbmVnYXRpdmVGaW5kZXJPYmotPmlzSXROZWdhdGl2ZSgpID8gVFJVRSA6IEZBTFNFOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbignRVJST1IhICgnLiRudW1iZXIuJykgaXMgbm90IGEgbnVtYmVyIScpOw0KCQl9DQoJCS8vIHNldHVwIHRoZSBjdXJyZW5jeQ0KCQkkY3VycmVuY3kgPSBzZWxmOjpnZXRDdXJyZW5jeURldGFpbHMoJGN1cnJlbmN5KTsNCgkJLy8gc2V0IHRoZSBudW1iZXIgdG8gY3VycmVuY3kNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRjdXJyZW5jeSkpDQoJCXsNCgkJCWlmICghJG5lZ2F0aXZlKQ0KCQkJew0KCQkJCSRmb3JtYXQgPSAkY3VycmVuY3ktPmN1cnJlbmN5X3Bvc2l0aXZlc3R5bGU7DQoJCQkJJHNpZ24gPSAnKyc7DQoJCQl9DQoJCQllbHNlIA0KCQkJew0KCQkJCSRmb3JtYXQgPSAkY3VycmVuY3ktPmN1cnJlbmN5X25lZ2F0aXZlc3R5bGU7DQoJCQkJJHNpZ24gPSAnLSc7DQoJCQkJJG51bWJlciA9IGFicygkbnVtYmVyKTsNCgkJCX0NCgkJCSRzZXR1cE51bWJlciA9IG51bWJlcl9mb3JtYXQoKGZsb2F0KSRudW1iZXIsIChpbnQpJGN1cnJlbmN5LT5jdXJyZW5jeV9kZWNpbWFscGxhY2UsICRjdXJyZW5jeS0+Y3VycmVuY3lfZGVjaW1hbHN5bWJvbCwgJyAnKTsgLy8kY3VycmVuY3ktPmN1cnJlbmN5X3Rob3VzYW5kcyBUT0RPKTsNCgkJCSRzZWFyY2ggPSBhcnJheSgne3NpZ259JywgJ3tudW1iZXJ9JywgJ3tzeW1ib2x9Jyk7DQoJCQkkcmVwbGFjZSA9IGFycmF5KCRzaWduLCAkc2V0dXBOdW1iZXIsICRjdXJyZW5jeS0+Y3VycmVuY3lfc3ltYm9sKTsNCgkJCSRtb25leU1hZGUgPSBzdHJfcmVwbGFjZSAoJHNlYXJjaCwkcmVwbGFjZSwkZm9ybWF0KTsNCg0KCQkJcmV0dXJuICRtb25leU1hZGU7DQoJCX0NCgkJcmV0dXJuICRudW1iZXI7DQoJfQ==', '', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0VG90YWxzKCYkZGF0YSwmJHR5cGUsJiRpZCkNCgl7DQoJCWxpc3QoJHBhdGgsICRmaWxlTmFtZSwgJGZ1bGxQYXRoKSA9IHNlbGY6OmdldFRvdGFsc0ZpbGVQYXRoKCR0eXBlLCRpZCk7DQoJCS8vIGRpZCB3ZSBnZXQgYSB2YWxpZCByZXN1bHQgc2V0DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIG5vdyBzYXZlIGZvciBuZXh0IHRpbWUNCgkJCXJldHVybiBzZWxmOjpzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VG90YWxzKCYkdHlwZSwmJGlkKQ0KCXsNCgkJbGlzdCgkcGF0aCwgJGZpbGVOYW1lLCAkZnVsbFBhdGgpID0gc2VsZjo6Z2V0VG90YWxzRmlsZVBhdGgoJHR5cGUsJGlkKTsNCgkJLy8gY2hlY2sgaWYgZmlsZSBleGlzdHMNCgkJaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkgJiYgKCgkanNvbkZpbGUgPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRDb250ZW50KCRmdWxsUGF0aCwgRkFMU0UpKSAhPT0gRkFMU0UpKQ0KCQl7DQoJCQkvLyBncmVhdCB3ZSBhcmUgZG9uZSByZXR1cm4gcmVzdWx0cyBhcyBhcnJheQ0KCQkJcmV0dXJuIGpzb25fZGVjb2RlKCRqc29uRmlsZSx0cnVlKTsNCgkJfQ0KCQkvLyByZW1vdmUgdGhlIG9sZCBmaWxlcw0KCQlzZWxmOjpyZW1vdmVGaWxlKCRwYXRoLCAkZmlsZU5hbWUpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VG90YWxzRmlsZVBhdGgoJiR0eXBlLCYkaWQpDQoJew0KCQkkcGF0aFswXSA9IEpQQVRIX0FETUlOSVNUUkFUT1IuJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy90b3RhbHMnOw0KCQkkcGF0aFsxXSA9IHNlbGY6OmdldEZpbGVLRVkoJHR5cGUsJGlkKTsNCgkJLy8gYnVpbGQgZnVsbCBwYXRoIHRvIGZpbGUNCgkJJHBhdGhbMl0gPSAkcGF0aFswXS4nLycuJHBhdGhbMV0uJy5qc29uJzsNCg0KCQlyZXR1cm4gJHBhdGg7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZUtFWSgmJHR5cGUsJiRpZCkNCgl7DQoJCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkvLyBHZXQgZnJvbSAjX19zdXBwb3J0Z3JvdXBzX3N1cHBvcnRfZ3JvdXAgYXMgYQ0KCQkkcXVlcnktPnNlbGVjdCgnTUFYKGEubW9kaWZpZWQpJyk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fc3VwcG9ydGdyb3Vwc19zdXBwb3J0X2dyb3VwJywgJ2EnKSk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGlzaGVkID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAnVkRNXycuJHR5cGUuJ19fJy5tZDUoJGRiLT5sb2FkUmVzdWx0KCkpLidfXycuJGlkOw0KCQl9DQoJCXJldHVybiAnVkRNXycuJHR5cGUuJ19fMjg5ZDdiMDUyNzg2OGQ3ZjlhNWY4YzdiMWM4MGQ3YTZfXycuJGlkOw0KCX0NCg0KCS8qKg0KCSogU2FmZXMganNvbiB0byBhIGZpbGUNCgkqDQoJKiBAaW5wdXQJICBvYmplY3QvYXJyYXkvanNvbiAgJGRhdGEgICAgICBEYXRhIHRvIGJlIHN0b3JlZA0KCSogQGlucHV0CSAgc3RyaW5nICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoIEZ1bGwgcGF0aCB0byBmaWxlDQoJKiBAaW5wdXQJICBzdHJpbmcgICAgICAgICAgICAgICAgICAkcGF0aCAgICAgIEZ1bGwgcGF0aCB0byBmb2xkZXINCgkqDQoJKiBAcmV0dXJucyAgYm9vbGVhbiBvbiBzdWNjZXNzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzYXZlSnNvbigkZGF0YSwgJGZ1bGxQYXRoLCAkcGF0aCA9IF9fRElSX18pDQoJew0KCQkvLyBjaGVjayBpZiBwYXRoIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJew0KCQkJLy8gaWYgbm90IHRoZSBtYWtlIHRoZSBwYXRoDQoJCQlta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSk7DQoJCX0NCgkJLy8gY2hlY2sgdGhhdCB0aGUgc3RyaW5nIGlzIGpzb24NCgkJaWYgKCFTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCS8vIGpzb24gZW5jb2RlIGlmIG5vdCBqc29uDQoJCQkkZGF0YSA9IGpzb25fZW5jb2RlKCRkYXRhKTsNCgkJfQ0KCQkvLyBtYWtlIHN1cmUgdGhpcyBpcyBhIHN0cmluZw0KCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQl7DQoJCQkkZnAgPSBmb3BlbigkZnVsbFBhdGgsICd3Jyk7DQoJCQlmd3JpdGUoJGZwLCAkZGF0YSk7DQoJCQlmY2xvc2UoJGZwKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLyoqDQoJICogUmVtb3ZlIGZpbGUNCgkgKiANCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZGlyICBUaGUgcGF0aCB0byBmb2xkZXIgdG8gcmVtb3ZlDQoJICogQHBhcmFtICAgc3RyaW5nICAgJG5ld0ZpbGVOYW1lIHRoZSBuZXcgZmlsZSBuYW1lDQoJICoNCgkgKiBAcmV0dXJuICBib29sZWFuICAgVHJ1ZSBpbiBhbGwgaXMgcmVtb3ZlZA0KCSAqIA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlRmlsZSgkZGlyLCAkbmV3RmlsZU5hbWUpDQoJew0KCQlpZiAoaXNfZGlyKCRkaXIpKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgb2xkIGZvbGRlciBuYW1lDQoJCQkkb2xkRmlsZU5hbWUgPSBleHBsb2RlKCdfXycsJG5ld0ZpbGVOYW1lKTsNCgkJCS8vIGxpdHRsZSBmaXggdG8gcmVtb3ZlIHRoaXMgaXRlbSBvbGQgZmlsZSBpZiBmb3VuZA0KCQkJJGZvdW5kID0gZ2xvYigkZGlyLicvJy4kb2xkRmlsZU5hbWVbMF0uJyonLiRvbGRGaWxlTmFtZVsyXS4nLmpzb24nKTsNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZm91bmQpICYmICgkZG9uZSA9IEBhcnJheV9tYXAoICJ1bmxpbmsiLCRmb3VuZCkpICE9PSBGQUxTRSkNCgkJCXsNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdICgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10gKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdICgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdIChodHRwczovL3d3dy52ZG0uaW8vam9vbWxhLWNvbXBvbmVudC1idWlsZGVyKSkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gbmV2ZXIgbWFraW5nIG9uZSBtaXN0YWtlIG9yIHRha2luZyBhbnkgY29mZmVlIGJyZWFrLikNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KKiojIyNhY3R1YWxIb3Vyc1NwZW50IyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxEYXlzU3BlbnQjIyMgRWlnaHQgSG91ciBEYXlzKiogKHRoZSBhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNwZW50KQ0KDQo+ICh3aXRoIHRoZSBmb2xsb3dpbmcgYnJlYWsgZG93bjoNCj4gKipkZWJ1Z2dpbmcgQCMjI2RlYnVnZ2luZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA0Ow0KPiAqKnBsYW5uaW5nIEAjIyNwbGFubmluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA3Ow0KPiAqKm1hcHBpbmcgQCMjI21hcHBpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gMTA7DQo+ICoqb2ZmaWNlIEAjIyNvZmZpY2VIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNjspDQoNCioqIyMjYWN0dWFsVG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsVG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqDQooYSB0b3RhbCBvZiB0aGUgcmVhbGlzdGljIHRpbWUgZnJhbWUgZm9yIHRoaXMgcHJvamVjdCkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gd2l0aCB0aGUgbm9ybWFsIGV2ZXJ5ZGF5IHJlYWxpdGllcyBhdCB0aGUgb2ZmaWNlLCB0aGF0IGluY2x1ZGVzIHRoZSBjb21wb25lbnQgcGxhbm5pbmcsIG1hcHBpbmcgJiBkZWJ1Z2dpbmcuKQ0KDQpQcm9qZWN0IGR1cmF0aW9uOiAqKiMjI3Byb2plY3RXZWVrVGltZSMjIyB3ZWVrcyoqIG9yICoqIyMjcHJvamVjdE1vbnRoVGltZSMjIyBtb250aHMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXSAoaHR0cHM6Ly93d3cudmRtLmlvL2pvb21sYS1jb21wb25lbnQtYnVpbGRlcikuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdIChtYWlsdG86am9vbWxhQHZkbS5pbyk=', '', '', 'Expert Database', '', '', 'Expert Database', '', '', 1, '', 'https://www.vdm.io/updates/expertdatabase_update_server.xml', 'http://www.vdm.io', '', '6Yhb0wT+oV3orb5BRtGGXTErmcOt5zbG9qvp6gXBAKE=', '', '', 2, 1, '', 1, 61), +(28, 1, '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', '', 1, '', 1, '', 1, '', '', 1, '{}', 3, 1, 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.1.0', 'Copyright (C) 2015. All Rights Reserved', '2017-01-30 13:53:54', '', 'W5w/1yunFpPFY2FzYnFJShB59TlJQgDT6OKL7VpdsHw=', '6bgN5/SL8NYyDfXP9WkSciik8zsDc4IFiZR2CxAR4o4=', '', 'CQPzu/5seQ3SMX8Wwe2NTYuybly28gzpYdqcsH11vbo=', '', '', '', 1, '', 'Just a basic Questions & Answers.', 'joomla@vdm.io', '', 'https://vdm.bz/jcb-questions-and-answers', '+vgKi8pQvsX3FKwpeuyJjwhf0lQDrMgAJHxAhPeiXn6otdpQhSZjMH5GN4ZMKUAj/HRP3gI5RWbSrPg8iBTOkA==', '', 'a9f20ea4-e0f6-481e-874f-9eb9536d274c', 'images/vdm/QA500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Questions-and-Answers', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2021-05-27 00:47:00', 2, 'Questions and Answers', 'questionsanswers', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'CS8qKg0KCSogCXRoZSBnbG9iYWxzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zOw0KCXByb3RlY3RlZCBzdGF0aWMgJHVzZXI7DQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9ja2VyOw0KCXByb3RlY3RlZCBzdGF0aWMgJGJhc2lja2V5Ow0KDQoJLyoqDQoJKiAJc2V0IHRoZSBzZXNzaW9uIGRlZmF1bHRzIGlmIG5vdCBzZXQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFNlc3Npb25EZWZhdWx0cygpDQoJew0KCQkvLyBub3Rpbmcgc2V0IGZvciBub3cNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGlkcw0KCSAqIEBwYXJhbSAkdHlwZQ0KCSAqIEByZXR1cm4gYXJyYXl8bnVsbA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TmFtZXMoJGlkcywgJHR5cGUpDQoJew0KCQkvLyBzZXR1cCB0aGUgZ2V0IGFycmF5DQoJCSRnZXQgPSBhcnJheSgnYS5pZCcpOw0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgJ2NhdGlkJzoNCgkJCQkvLyBzZXQgcmVsYXRlZCB2YWx1ZXMNCgkJCQkkZ2V0W10gPSAnYS50aXRsZSc7DQoJCQkJJHRhYmxlID0gJyNfX2NhdGVnb3JpZXMnOw0KCQkJYnJlYWs7CQkNCgkJfQ0KCQlpZiAoIWlzc2V0KCR0YWJsZSkgfHwgIVN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRpZHMpKQ0KCQl7DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KCQkvLyBjaGVjayB0aGUgYXJyYXkgb2YgaWRzDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSkNCgkJew0KCQkJZm9yZWFjaCAoJGlkcyBhcyAkaWQpDQoJCQl7IA0KCQkJCWlmICghKGlzX251bWVyaWMoJGlkKSkpDQoJCQkJew0KCQkJCQlyZXR1cm4gbnVsbDsNCgkJCQl9IA0KCQkJfQ0KCQl9DQoJCS8vIG5vdyBsb2FkIGFsbCBjdXN0b20gdmFsdWVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgkZ2V0KSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgkdGFibGUsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCdhLmlkIElOICgnIC4gaW1wbG9kZSgnLCAnLCAkaWRzKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGlzaGVkID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCSRpdGVtcyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCSRidWNrZXQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQkJew0KCQkJCXN3aXRjaCgkdHlwZSkNCgkJCQl7DQoJCQkJCWNhc2UgJ2NhdGlkJzoNCgkJCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCQkJJGJ1Y2tldFskaXRlbS0+aWRdID0gJGl0ZW0tPnRpdGxlOw0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gJGJ1Y2tldDsNCgkJfQ0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhc0VkaXRBY2Nlc3MoJHJlY29yZElkLCAkdXNlcklkID0gbnVsbCwgJHRvID0gJ3F1ZXN0aW9uX2FuZF9hbnN3ZXInKQ0KCXsNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCR1c2VySWQpICYmICR1c2VySWQgaW5zdGFuY2VvZiBKVXNlcikNCgkJew0KCQkJJHVzZXIgPSAkdXNlcklkOw0KCQl9DQoJCWVsc2VpZiAoaXNfbnVtZXJpYygkdXNlcklkKSAmJiAkdXNlcklkID4gMCkNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCX0NCgkJaWYgKCR1c2VyLT5hdXRob3Jpc2UoJHRvLicuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLicuJHRvLicuJyAuIChpbnQpICAkcmVjb3JkSWQpKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KW0NVU1RPTUNPREU9dGhlQnV0bGVyXQ0KW0NVU1RPTUNPREU9aW1hZ2VIZWxwZXJzXQ0KW0NVU1RPTUNPREU9Z2V0Rm9sZGVyUGF0aF0NCltDVVNUT01DT0RFPWdldEZpbGVQYXRoXQ0KW0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0NCltDVVNUT01DT0RFPWJhc2VTaXh0eUZvdXJVUkxdDQpbQ1VTVE9NQ09ERT1zZXREeW5hbWljRGF0YUlGXQ0KW0NVU1RPTUNPREU9Z2V0TGlua09wdGlvbnNdDQpbQ1VTVE9NQ09ERT1taW1lVHlwZV0=', '', '', '', '', '', 'CQkvLyBsb2FkIHRoZSBoZWxwZXIgY2xhc3MNCgkJSkxvYWRlcjo6cmVnaXN0ZXIoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnKTsNCgkJLy8gY2hlY2sgdGhlIHZlcnNpb24gb2YgUW5BDQoJCSRtYW5pZmVzdCA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6bWFuaWZlc3QoKTsNCgkJaWYgKGlzc2V0KCRtYW5pZmVzdC0+dmVyc2lvbikgJiYgc3RycG9zKCRtYW5pZmVzdC0+dmVyc2lvbiwgJy4nKSAhPT0gZmFsc2UpDQoJCXsNCgkJCSR2ZXJzaW9uID0gZXhwbG9kZSgnLicsICRtYW5pZmVzdC0+dmVyc2lvbik7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyB0YXJnZXQgdmVyc2lvbiBsZXNzIHRoZW4gb3IgZXF1YWwgdG8gMS4wLjMNCgkJCWlmIChjb3VudCgkdmVyc2lvbikgPT0gMyAmJiAkdmVyc2lvblswXSA9PSAxICYmICR2ZXJzaW9uWzFdID09IDAgJiYgJHZlcnNpb25bMl0gPD0gNCkNCgkJCXsNCgkJCQkvLyB3ZSBuZWVkIHRvIG1ha2UgYSBkYXRhYmFzZSBjb3JyZWN0aW9uDQoJCQkJJGZpeF9jYXRlZ29yaWVzID0gYXJyYXkoDQoJCQkJCSdjb21fcXVlc3Rpb25zYW5zd2Vycy5xdWVzdGlvbnNfYW5kX2Fuc3dlcnMnID0+ICdjb21fcXVlc3Rpb25zYW5zd2Vycy5xdWVzdGlvbl9hbmRfYW5zd2VyJw0KCQkJCSk7DQpbQ1VTVE9NQ09ERT1maXhDYXRlZ29yaWVzTmFtaW5nXQ0KCQkJfQ0KCQl9', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXShodHRwczovL2dpdGh1Yi5jb20vTGxld2VsbHludmRtL0pvb21sYS1RdWVzdGlvbnMtYW5kLUFuc3dlcnMvcmF3L21hc3Rlci9hZG1pbi9hc3NldHMvaW1hZ2VzL3ZkbS1jb21wb25lbnQuanBnICJUaGUgIyMjQ29tcG9uZW50X25hbWUjIyMiKQ0KDQojIyNERVNDUklQVElPTiMjIw0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCg0KIyBDb21wb25lbnQgTnVtYmVyDQoNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KW0NVU1RPTUNPREU9cmVhZE1FY29udHJpYnV0b3JzXQ==', '', '', 'Questions & Answers', '', '', 'Questions and Answers (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/Llewellynvdm/Joomla-Questions-and-Answers/master/questionsanswers_server.xml', 'https://www.vdm.io/', '', 'KzaMID78l8VUzhcvn64zaWH8zYrTFYKtsnTeY7CkXOw=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 70, '', 1, 7), +(29, 1, '', '', '', 1, '', '', '', 1, '', 1, 1, 1, '', '', '', '', '', '', 1, '', 1, '', '', '', '{}', 3, '', 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.1.1', 'Copyright (C) 2015. All Rights Reserved', '2017-03-02 01:16:34', 1, 'SPum2cLzUIYtL7B0+ssENc8brbn7pp6iBpbW0zLxMHo=', 'ewagRPPiNZsft15c4vz3DCDjtYsu+AKQw1SdqIdyEFw=', '', 'SLB9t4i32oC7pPDr+hk0B37QywO1uh10I3T8xRHAfvI=', '', '', 'A_76', 2, '', 'Event registration component.', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_registry', 'DNj5SxMf3DEhnKMVRBJfY9rvhxemC3cDMVbuWrWnBvRBmQWF+jpV/wkNfyjhfoNa8F4C2eOjtot7QDt7+E6NxA==', '', 'b7f99d5a-57ee-4d91-8470-dcee7d8fc5d6', 'images/vdm/ER500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2021-03-08 03:17:40', 2, 'Registry', 'registry', '', 4, 'CQkvLyBydW4gc29tZSBob3VzZSBjbGVhbmluZw0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQkvLyBydW4gdGhlIGxvY2F0aW9uIGRhdGEgcXVldWUgKHRvIGluc3VyZSBhbGwgY3JvbiBqb2JzIHJ1biB0aW1lbHkpDQoJCQlpZiAoJGRvY3VtZW50IGluc3RhbmNlb2YgSkRvY3VtZW50SHRtbCkNCgkJCXsNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OnRoZVF1ZXVlKCRkb2N1bWVudCk7DQoJCQl9DQoJCX0NCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw0KCQkvLyBjbGVhciB0aGUgY2FydCBpdGVtcyBpZiBleHBpcmVkDQoJCXNlbGY6OmNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KTs=', 'CS8qKg0KCSogCW1ha2Ugc3VyZSBsb2NhdGlvbiBkYXRhIGlzIGxvYWRlZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZExvY2F0aW9uRGF0YSgpDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygnTG9jYXRpb25kYXRhSGVscGVyJywgRkFMU0UpKQ0KCQl7DQoJCQkkcGF0aCA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX2xvY2F0aW9uZGF0YS9oZWxwZXJzL2xvY2F0aW9uZGF0YS5waHAnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJCXsNCgkJCQkvLyBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgaGVscGVyDQoJCQkJSkxvYWRlcjo6cmVnaXN0ZXIoJ0xvY2F0aW9uZGF0YUhlbHBlcicsICRwYXRoKTsNCgkJCQkvLyBmaXN0IHNldCB0aGUgZGVmYXVsdCBjb21wb25lbnQNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OiRkZWZhdWx0Q29tcG9uZW50ID0gJ2NvbV9bW1tjb21wb25lbnRdXV0nOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogCWNhbmNlbCBFeHBpcmVkIENhcnQgSXRlbXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KQ0KCXsNCgkJLy8gYWRkIGFuIGV2ZW50IHRoYXQgd2lsbCBzZW5kIG91dCBhbGwgY29uZmlybWF0aW9uIGVtYWlscywgbm90IHlldCBzZW5kDQoJCSRkb2N1bWVudC0+YWRkU2NyaXB0RGVjbGFyYXRpb24oIg0KCQkJalF1ZXJ5KHdpbmRvdykubG9hZChmdW5jdGlvbigpIHsNCgkJCQljYW5jZWxFeHBpcmVkQ2FydEl0ZW1zKDEpLmRvbmUoZnVuY3Rpb24ocmVzdWx0KSB7DQoJCQkJCWlmKHJlc3VsdCl7DQoJCQkJCQljb25zb2xlLmxvZyhyZXN1bHQpOw0KCQkJCQl9DQoJCQkJfSk7DQoJCQl9KTsNCgkJCQ0KCQkJZnVuY3Rpb24gY2FuY2VsRXhwaXJlZENhcnRJdGVtcyh0eXBlKSB7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJhZG1pbmlzdHJhdG9yL2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguY2FuY2VsRXhwaXJlZENhcnRJdGVtcyZmb3JtYXQ9anNvbic7DQoJCQkJaWYodHlwZSA+IDApew0KCQkJCQl2YXIgcmVxdWVzdCA9ICd0b2tlbj0iLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4iJnR5cGU9Jyt0eXBlOw0KCQkJCX0NCgkJCQlyZXR1cm4galF1ZXJ5LmFqYXgoew0KCQkJCQl0eXBlOiAnUE9TVCcsDQoJCQkJCXVybDogZ2V0VXJsLA0KCQkJCQlkYXRhVHlwZTogJ2pzb25wJywNCgkJCQkJZGF0YTogcmVxdWVzdCwNCgkJCQkJanNvbnA6ICdjYWxsYmFjaycNCgkJCQl9KTsNCgkJCX0iKTsNCgl9', 'CXB1YmxpYyBzdGF0aWMgJGV2ZW50Ow0KCXB1YmxpYyBzdGF0aWMgJGV2ZW50QnVpbGRlciA9IGFycmF5KCk7DQoJcHVibGljIHN0YXRpYyAkY29uY2VwdEhUTUwgPSBhcnJheSgpOw0KCXB1YmxpYyBzdGF0aWMgJGxvY2F0aW9ucyA9IGFycmF5KCk7DQoJcHVibGljIHN0YXRpYyAkZmlsdGVySW5wdXQ7DQoJcHVibGljIHN0YXRpYyAkb3JnYW5pemVyID0gbnVsbDsNCglwdWJsaWMgc3RhdGljICRyZWdpc3RlcmVkID0gbnVsbDsNCg0KCXByb3RlY3RlZCBzdGF0aWMgJGV2ZW50T3B0aW9ucyA9IGFycmF5KCdkaXNwbGF5JyA9PiBhcnJheSgpLCAnb3B0aW9ucycgPT4gYXJyYXkoKSk7DQoJcHJvdGVjdGVkIHN0YXRpYyAkZGlzYWJsZUJ1dHRvbnMgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJGRpc2FibGVCdXR0b25zQ2hlY2sgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJGNvbmNlcHRTd2l0Y2hPbmx5ID0gYXJyYXkoKTsNCglwcm90ZWN0ZWQgc3RhdGljICRidW5kbGVTd2l0Y2hPbmx5ID0gYXJyYXkoKTsNCglwcm90ZWN0ZWQgc3RhdGljICRjb25jZXB0cyA9IGFycmF5KCk7DQoJcHJvdGVjdGVkIHN0YXRpYyAkY29uY2VwdERhdGEgPSBhcnJheSgpOw0KCXByb3RlY3RlZCBzdGF0aWMgJGNvbnRlbnREYXRhID0gYXJyYXkoKTsNCglwcm90ZWN0ZWQgc3RhdGljICRidXR0b25TY3JpcHQgPSBhcnJheSgnICcpOw0KCXByb3RlY3RlZCBzdGF0aWMgJHJldHVyblR5cGU7DQoJcHJvdGVjdGVkIHN0YXRpYyAkZmlsZXBhdGggPSAnJzsNCglwcm90ZWN0ZWQgc3RhdGljICRmaWxlbGluayA9ICcnOw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCglwcm90ZWN0ZWQgc3RhdGljICR1c2VyOw0KCXByb3RlY3RlZCBzdGF0aWMgJGxvY2tlcjsNCglwcm90ZWN0ZWQgc3RhdGljICRiYXNpY2tleTsNCg0KCXByb3RlY3RlZCBzdGF0aWMgJGV2ZW50RmllbGRzID0gYXJyYXkoKTsNCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPWdldEhUTUxdDQoJLyoqDQoJKiAJc2V0IHRoZSBzZXNzaW9uIGRlZmF1bHRzIGlmIG5vdCBzZXQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFNlc3Npb25EZWZhdWx0cygpDQoJew0KCQkvLyBnZXQgdXNlciBvYmplY3QNCgkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCS8vIGZpcnN0IGNoZWNrIGlmIGFueSB3YXMgYWxyZWFkeSBzZXQNCgkJaWYgKCEkY3VycmVuY3kgPSBzZWxmOjpnZXQoJ0FDVElWRV9DVVJSRU5DWScsIG51bGwpKQ0KCQl7DQoJCQlpZiAoJHVzZXItPmlkID4gMCkNCgkJCXsNCgkJCQkvLyBzZXQgdGhlIGFjdGl2ZSB1c2VycyBjdXJyZW5jeQ0KCQkJCXNlbGY6OnNldCgnQUNUSVZFX0NVUlJFTkNZJywgc2VsZjo6Z2V0VXNlckN1cnJlbmN5KCR1c2VyKSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IHB1YmxpYyBjdXJyZW5jeQ0KCQkJCXNlbGY6OnNldCgnQUNUSVZFX0NVUlJFTkNZJywgc2VsZjo6Z2V0UHVibGljQ3VycmVuY3koKSk7DQoJCQl9DQoJCX0NCgkJLy8gc2V0IHB1YmxpYyBrZXkgaWYgbmVlZGVkDQoJCWlmICggJHVzZXItPmlkID09IDApDQoJCXsNCgkJCWlmICghJHB1YmxpYyA9IHNlbGY6OmdldCgncHVibGljS2VlWScsIG51bGwpKQ0KCQkJew0KCQkJCS8vIHNldCB0aGUgYWN0aXZlIHVzZXJzIHB1YmxpYw0KCQkJCXNlbGY6OnNldCgncHVibGljS2VlWScsIHNlbGY6OnJhbmRvbWtleSg3KSk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKglUbyBsb2FkIHRoZSBhcHBsaWNhdGlvbiBmb3JtDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQYXBlcldvcmsoJGlkLCAka2V5cykNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fIyMjY29tcG9uZW50IyMjJyk7DQoJCX0NCgkJLy8gZ2V0IGZvcm1zIHBhdGgNCgkJJHBhdGggPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3htbHBhdGgnLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vbW9kZWxzL2Zvcm1zJyk7DQoJCS8vIGJ1aWxkIGZ1bGwgcGF0aCB0byBmaWxlDQoJCSRmaWxlTmFtZSA9ICd2ZG1fZHluYW1pY19mb3JtJzsNCgkJJGZ1bGxQYXRoID0gJHBhdGguJy8nLiRmaWxlTmFtZS4nLnhtbCc7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHVzZXIpKQ0KCQl7DQoJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQlzZWxmOjokdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJfQ0KCQkvLyBjaGVjayBpZiBmaWxlIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpDQoJCXsNCgkJCS8vIGdyZWF0IHRoZSBmaWxlIGFuZCBzYWZlIHRvIHBhdGgNCgkJCXNlbGY6OnNldER5bmFtaWNGb3JtWE1MKCRmdWxsUGF0aCwgJHBhdGgpOw0KCQl9DQoJCS8vIGNoZWNrIGlmIGZpbGUgZXhpc3RzDQoJCWlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKQ0KCQl7DQoJCQkvLyBHZXQgdGhlIGZvcm0uDQoJCQlqaW1wb3J0KCAnam9vbWxhLmZvcm0uZm9ybScgKTsNCgkJCS8vIHNldCB0aGUgcGF0aHMNCgkJCUpGb3JtOjphZGRGb3JtUGF0aCgkcGF0aCk7DQoJCQlKRm9ybTo6YWRkRmllbGRQYXRoKEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9tb2RlbHMvZmllbGRzJyk7DQoJCQkvLyBncmVhdCB3ZSBhcmUgZG9uZSByZXR1cm4gcmVzdWx0cw0KCQkJJGZvcm0gPSBKRm9ybTo6Z2V0SW5zdGFuY2UoJ2NvbV9bW1tjb21wb25lbnRdXV0uJy4kZmlsZU5hbWUsICRmaWxlTmFtZSwgYXJyYXkoJ2NvbnRyb2wnID0+ICdqZm9ybScsICdsb2FkX2RhdGEnID0+IGZhbHNlKSwgZmFsc2UsIGZhbHNlKTsNCgkJCWlmIChzZWxmOjokdXNlci0+aWQgPT0gMCkNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIHVzZXIgZmllbGRzDQoJCQkJc2VsZjo6YWRkVXNlckZpZWxkcygkZm9ybSk7DQoJCQl9DQoJCQkvLyBsb2FkIHRoZSBkeW5hbWljIGZpZWxkDQoJCQlzZWxmOjpnZXREeW5hbWljRmllbGRzKCRpZCwgJGtleXMsICRmb3JtKTsNCgkJCS8vIG5vdyBsb2FkIHRoZSBkYXRhDQoJCQkkZGF0YSA9IHNlbGY6OmdldCgnZm9ybURhdGEnLiRpZCk7DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRhdGEpKQ0KCQkJew0KCQkJCSRmb3JtLT5iaW5kKCRkYXRhKTsNCgkJCX0NCgkJCXJldHVybiBzZWxmOjptb2RlbEZvcm0oJGZvcm0pOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKglNb2RlbCB0aGUgZm9ybSBkaXNwbGF5DQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBtb2RlbEZvcm0oJiRmb3JtKQ0KCXsNCgkJcmV0dXJuICdzb29uIHdlIHdpbGwgYWRkIG1vcmUgaHRtbCBoZXJlISc7DQoJfQ0KDQoJLyoqDQoJICoJR2V0IHRoZSBkeW5hbWljIGZpZWxkcw0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RHluYW1pY0ZpZWxkcygkaWQsICRidWlsZCwgJiRmb3JtKQ0KCXsNCgkJLy8gZ2V0IHRoZSBmb3JtIHNlbGVjdGlvbg0KCQkkZm9ybUJ1aWxkZXIgPSBqc29uX2RlY29kZShzZWxmOjpiYXNlNjRfdXJsZGVjb2RlKCRidWlsZCwgdHJ1ZSksIHRydWUpOw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZvcm1CdWlsZGVyKSkNCgkJew0KCQkJLy8gbG9vcCB0aGUgZXZlbnRzDQoJCQlzZWxmOjokZXZlbnRGaWVsZHMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGZvcm1CdWlsZGVyIGFzICRldmVudCA9PiAkYnVpbGRlcikNCgkJCXsNCgkJCQkvLyBnZXQgYWxsIGN1c3RvbSBmaWVsZHMgb2YgZXZlbnQNCgkJCQlpZiAoJGZpZWxkcyA9IHNlbGY6OmdldFZhcignZXZlbnQnLCAoaW50KSAkZXZlbnQsICdpZCcsICdjdXN0b21maWVsZCcpKQ0KCQkJCXsNCgkJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRmaWVsZHMpKQ0KCQkJCQl7DQoJCQkJCQkkZmllbGRzID0ganNvbl9kZWNvZGUoJGZpZWxkcywgdHJ1ZSk7DQoJCQkJCX0NCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRmaWVsZHMpKQ0KCQkJCQl7DQoJCQkJCQkvLyBva2F5IHNvIHdlIGhhdmUgY3VzdG9tIGZpZWxkcw0KCQkJCQkJc2VsZjo6c2V0RHluYW1pY0ZpZWxkcygkZXZlbnQsICRidWlsZGVyLCAkZmllbGRzKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRGaWVsZHMpKQ0KCQkJew0KCQkJCXZhcl9kdW1wKHNlbGY6OiRldmVudEZpZWxkcyk7ZXhpdDsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCgkvKioNCgkgKglTZXQgdGhlIGR5bmFtaWMgZmllbGRzDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXREeW5hbWljRmllbGRzKCYkZXZlbnQsICYkYnVpbGRlciwgJiRmaWVsZHMpDQoJew0KCQlmb3JlYWNoICgkZmllbGRzWydmaWVsZCddIGFzICRuciA9PiAkZmllbGQpDQoJCXsNCgkJCS8vIGZpcnN0IGxvYWQgdGhvc2UgYmFzZWQgb24gdmFyaWF0aW9uDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZpZWxkc1sndmFyaWF0aW9uJ11bJG5yXSkpDQoJCQl7DQoJCQkJLy8gb25seSBhZGQgaXQgaWYgdGhlIHZhcmlhdGlvbiBpcyBzZWxlY3RlZA0KCQkJCWlmICgkdmFyaWF0aW9ucyA9IGFycmF5X2ludGVyc2VjdCgkYnVpbGRlclsndmFyaWF0aW9uJ10sICRmaWVsZHNbJ3ZhcmlhdGlvbiddWyRucl0pKQ0KCQkJCXsNCgkJCQkJJHF0eSA9IGFycmF5KCk7DQoJCQkJCWZvcmVhY2ggKCR2YXJpYXRpb25zIGFzICR2YXJpYXRpb24pDQoJCQkJCXsNCgkJCQkJCSR2TnIgPSBhcnJheV9zZWFyY2goJHZhcmlhdGlvbiwgJGJ1aWxkZXJbJ3ZhcmlhdGlvbiddKTsNCgkJCQkJCXNlbGY6OnNldER5bmFtaWNGaWVsZCgkZXZlbnQsICRmaWVsZCwgICRidWlsZGVyWydxdHknXVskdk5yXSwgJGZpZWxkc1snZWFjaF9yZWdpc3RyYXRpb24nXVskbnJdLCAkYnVpbGRlclsnc3dpdGNoJ11bJHZOcl0sICRidWlsZGVyWydjb25jZXB0J11bJHZOcl0sICRidWlsZGVyWydidW5kbGUnXVskdk5yXSwgJGJ1aWxkZXJbJ3ZhcmlhdGlvbiddWyR2TnJdKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkvLyBhZGQgYWxsIGZpZWxkcyBub3QgbGlua2VkIHRvIHZhcmlhdGlvbnMNCgkJCQlzZWxmOjpzZXREeW5hbWljRmllbGQoJGV2ZW50LCAkZmllbGQsIGFycmF5X3N1bSgkYnVpbGRlclsncXR5J10pLCAkZmllbGRzWydlYWNoX3JlZ2lzdHJhdGlvbiddWyRucl0pOw0KCQkJfQ0KCQl9DQoJCWV4aXQ7DQoJfQ0KDQoJLyoqDQoJICoJU2V0IHRoZSBkeW5hbWljIGZpZWxkDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXREeW5hbWljRmllbGQoJGV2ZW50LCAkaWQsICRxdHksICRlYWNoLCAkc3dpdGNoID0gbnVsbCwgJGNvbmNlcHQgPSAwLCAkYnVuZGxlID0gMCwgJHZhcmlhdGlvbiA9IDApDQoJew0KCQkvLyBzdGFydCBldmVudCBmaWVsZCBhcnJheQ0KCQlpZiAoIWlzc2V0KHNlbGY6OiRldmVudEZpZWxkc1skZXZlbnRdKSkNCgkJew0KCQkJc2VsZjo6JGV2ZW50RmllbGRzWyRldmVudF0gPSBhcnJheSgpOw0KCQl9DQoJCS8vIGdldCB0aGUgZmllbGQNCgkJJGZpZWxkID0gc2VsZjo6Z2V0RmllbGQoJGlkKTsNCgkJdmFyX2R1bXAoJGZpZWxkKTsNCgl9DQoNCgkvKioNCgkgKglnZXQgdGhlIGZpZWxkDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWVsZCgkaWQpDQoJew0KCQkvLyBnZXQgZGF0YWJhc2UgdmFsdWVzIG9mIHRoaXMgZmllbGQNCgkJJGRiID0gc2VsZjo6Z2V0QWxsVmFsdWVzKCRpZCwgJ2N1c3RvbV9maWVsZCcpOw0KCQlJZiAoaXNzZXQoc2VsZjo6JGZpZWxkVHlwZXNbJGRiLT5maWVsZF90eXBlXSkpDQoJCXsNCgkJCSRmaWVsZCA9IGFycmF5KCk7DQoJCQlmb3JlYWNoIChzZWxmOjokZmllbGRUeXBlc1skZGItPmZpZWxkX3R5cGVdIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJew0KCQkJCWlmIChpc3NldCgkZGItPnska2V5fSkpDQoJCQkJew0KCQkJCQkkZmllbGRbJGtleV0gPSAkZGItPnska2V5fTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGZpZWxkWyRrZXldID0gJHZhbHVlOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGRvIHNvbWUgZXh0cmEgcHJlcA0KCQkJaWYgKCRkYi0+ZmllbGRfdHlwZSA9PSAxMSAmJiBpc3NldCgkZGItPmRlZmF1bHRjb3VudHJ5KSkNCgkJCXsNCgkJCQkvLyBsb2FkIHRoZSBjb3JyZWN0IGNvdW50cnkgZGVmYXVsdCB2YWx1ZQ0KCQkJCSRmaWVsZFsnZGVmYXVsdCddID0gJGRiLT5kZWZhdWx0Y291bnRyeTsNCgkJCX0NCgkJCWVsc2VpZiAoJGRiLT5maWVsZF90eXBlID09IDE3ICYmIGlzc2V0KCRkYi0+ZGVmYXVsdHJlZ2lvbikpDQoJCQl7DQoJCQkJLy8gbG9hZCB0aGUgY29ycmVjdCByZWdpb24gZGVmYXVsdCB2YWx1ZQ0KCQkJCSRmaWVsZFsnZGVmYXVsdCddID0gJGRiLT5kZWZhdWx0cmVnaW9uOw0KCQkJfQ0KCQkJZWxzZWlmICgoJGRiLT5maWVsZF90eXBlID09IDEgfHwgJGRiLT5maWVsZF90eXBlID09IDIpICYmIChpc3NldCgkZGItPnNlbGVjdGlvbikgJiYgaXNzZXQoJGRiLT5zZWxlY3Rpb250eXBlKSkpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdGhlIG9wdGlvbnMgYXJyYXkNCgkJCQlzZWxmOjpzZXRGaWVsZE9wdGlvbnMoJGZpZWxkLCAkZGIpOw0KCQkJfQ0KCQkJcmV0dXJuICRmaWVsZDsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICoJU2V0IHRoZSBvcHRpb25zIGZvciB0aGUgZmllbGQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldEZpZWxkT3B0aW9ucygmJGZpZWxkLCAmJGRiKQ0KCXsNCgkJLy8gc2V0IHRoZSBzZWxlY3Rpb24gb3B0aW9uDQoJCWlmICgkZGItPmZpZWxkX3R5cGUgPT0gMiAmJiAkZGItPnNlbGVjdGlvbnR5cGUgPT0gMikNCgkJew0KCQkJJGZpZWxkWydtdWx0aXBsZSddID0gJ3RydWUnOw0KCQkJJGZpZWxkWydmaWx0ZXInXSA9ICdBUlJBWSc7DQoJCX0NCgkJZWxzZWlmICgkZGItPmZpZWxkX3R5cGUgPT0gMiAmJiAkZGItPnNlbGVjdGlvbnR5cGUgPT0gMSkNCgkJew0KCQkJJGZpZWxkWydtdWx0aXBsZSddID0gJ2ZhbHNlJzsNCgkJfQ0KCQkvLyBzZXQgb3B0aW9ucw0KCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGRiLT5zZWxlY3Rpb24pKQ0KCQl7DQoJCQkkZGItPnNlbGVjdGlvbiA9IGpzb25fZGVjb2RlKCRkYi0+c2VsZWN0aW9uLCB0cnVlKTsNCgkJfQ0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRiLT5zZWxlY3Rpb24pKQ0KCQl7DQoJCQkkb3B0aW9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoKCRkYi0+c2VsZWN0aW9uWydzZWxlY3Rpb24nXSBhcyAkc2VsZWN0aW9uKQ0KCQkJew0KCQkJCXNlbGY6OnNldEZpZWxkT3B0aW9uKCRzZWxlY3Rpb24sICRvcHRpb25zKTsNCgkJCX0NCgkJCS8vIGxvYWQgdGhlIG9wdGlvbnMNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkb3B0aW9ucykpDQoJCQl7DQoJCQkJJGZpZWxkWydvcHRpb25zJ10gPSAkb3B0aW9uczsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqCVNldCB0aGUgb3B0aW9uIGZvciB0aGUgZmllbGQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldEZpZWxkT3B0aW9uKCRzZWxlY3Rpb24sICYkb3B0aW9ucykNCgl7DQoJCWlmIChzdHJwb3MoJHNlbGVjdGlvbiwnfCcpICE9PSBmYWxzZSkNCgkJew0KCQkJJGFycmF5X3NldHRlciA9IGV4cGxvZGUoJ3wnLCAkc2VsZWN0aW9uKTsNCgkJCWlmIChjb3VudCgkYXJyYXlfc2V0dGVyKSA9PSAyKQ0KCQkJew0KCQkJCWlmIChpc19udW1lcmljKCRhcnJheV9zZXR0ZXJbMF0pIHx8IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRhcnJheV9zZXR0ZXJbMF0pKQ0KCQkJCXsNCgkJCQkJJG9wdGlvbnNbJGFycmF5X3NldHRlclswXV0gPSAkYXJyYXlfc2V0dGVyWzFdOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkb3B0aW9uc1snJ10gPSAkYXJyYXlfc2V0dGVyWzFdOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoY291bnQoJGFycmF5X3NldHRlcikgPT0gMSkNCgkJCXsNCgkJCQkkb3B0aW9uc1snJ10gPSAkYXJyYXlfc2V0dGVyWzBdOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCWlmIChpc19udW1lcmljKCRzZWxlY3Rpb24pIHx8IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRzZWxlY3Rpb24pKQ0KCQkJCXsNCgkJCQkJJG9wdGlvbnNbJHNlbGVjdGlvbl0gPSAkc2VsZWN0aW9uOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCWlmIChpc19udW1lcmljKCRzZWxlY3Rpb24pIHx8IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRzZWxlY3Rpb24pKQ0KCQkJew0KCQkJCSRvcHRpb25zWyRzZWxlY3Rpb25dID0gJHNlbGVjdGlvbjsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqCVNldCB0aGUgZHluYW1pYyBiYXNlIGZvcm0geG1sDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXREeW5hbWljRm9ybVhNTCgkZnVsbFBhdGgsICRwYXRoKQ0KCXsNCgkJLy8gYWx3YXlzIHJlc2V0DQoJCSRmaWVsZFNldCA9IGFycmF5KCk7DQoJCS8vIHNldCB0aGUgZGVmYXVsdCBmaWVsZHMNCgkJJGZpZWxkU2V0W10gPSAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4nOw0KCQkkZmllbGRTZXRbXSA9ICc8Zm9ybSBhZGRmaWVsZHBhdGg9Ii9hZG1pbmlzdHJhdG9yL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9tb2RlbHMvZmllbGRzIj4nOw0KCQkkZmllbGRTZXRbXSA9ICc8ZmllbGRzZXQgbmFtZT0iZGVmYXVsdCI+JzsNCgkJJGZpZWxkU2V0W10gPSAiXHQ8IS0tIEp1c3QgdG8gaGF2ZSBhIGZvcm0gdG8gc3RhcnQgd2l0aC4gLS0+IjsNCgkJJGZpZWxkU2V0W10gPSAiPC9maWVsZHNldD4iOw0KCQkkZmllbGRTZXRbXSA9ICI8L2Zvcm0+IjsNCgkJLy8gc2V0IHRoZSBmb3JtDQoJCSRmb3JtID0gaW1wbG9kZSgiXG4iLCRmaWVsZFNldCk7DQoJCS8vIHNldCB0aGUgZmlsZQ0KCQlyZXR1cm4gc2VsZjo6c2F2ZVhNTCgkZm9ybSwgJGZ1bGxQYXRoLCAkcGF0aCk7DQoJfQ0KDQoJLyoqDQoJKiAJc2F2ZSBYTUwNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhdmVYTUwoJGRhdGEsICRmdWxsUGF0aCwgJHBhdGgpDQoJew0KCQkvLyBjaGVjayBpZiBwYXRoIGV4aXN0cw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJew0KCQkJLy8gaWYgbm90IHRoZSBtYWtlIHRoZSBwYXRoDQoJCQlta2RpcigkcGF0aCwgMDc1NSwgdHJ1ZSk7DQoJCX0NCgkJbGlieG1sX3VzZV9pbnRlcm5hbF9lcnJvcnModHJ1ZSk7DQoJCS8vIG1ha2Ugc3VyZSB0aGlzIGlzIHZhbGlkIHhtbA0KCQlpZiAoc2ltcGxleG1sX2xvYWRfc3RyaW5nKCRkYXRhKSkNCgkJew0KCQkJJGZwID0gZm9wZW4oJGZ1bGxQYXRoLCAndycpOw0KCQkJZndyaXRlKCRmcCwgJGRhdGEpOw0KCQkJZmNsb3NlKCRmcCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQkNCgkJLy8gc2V0IGVycm9yDQoJCUpFcnJvcjo6cmFpc2VXYXJuaW5nKDUwMCwgVGV4dDo6XygnVGhlIHhtbCBmb3IgdGhpcyBmcm9tIGNvdWxkIG5vdCBiZSB2YWxpZGF0ZWQsIHBsZWFzZSBub3RpZnkgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yLicpKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqCUFkZCB1c2VyIGZpZWxkcyB0byBhcHBsaWNhdGlvbg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWRkVXNlckZpZWxkcygmJGZvcm0pDQoJew0KCQkvLyB3ZSBtdXN0IGFkZCBzb21lIHVzZXIgZmllbGRzDQoJCSR1c2VyRmllbGRzID0NCgkJCWFycmF5KA0KCQkJCSduYW1lJyA9Pg0KCQkJCQlhcnJheSgnbmFtZScsJ3VzZXJuYW1lJywnZW1haWwnLCdwYXNzd29yZCcsJ3Bhc3N3b3JkMicsICdjYXB0Y2hhJyksDQoJCQkJJ3R5cGUnID0+DQoJCQkJCWFycmF5KCd0ZXh0JywndGV4dCcsJ2VtYWlsJywncGFzc3dvcmQnLCdwYXNzd29yZCcsJ2NhcHRjaGEnKSwNCgkJCQknbGFiZWwnID0+DQoJCQkJCWFycmF5KFRleHQ6Ol8oJ05hbWUnKSwgVGV4dDo6XygnVXNlcm5hbWUvTG9naW4tbmFtZScpLCBUZXh0OjpfKCdFbWFpbCcpLCBUZXh0OjpfKCdQYXNzd29yZCcpLCBUZXh0OjpfKCdDb25maXJtIFBhc3N3b3JkJyksIFRleHQ6Ol8oJ1JlQ2FwdGNoYScpKSwNCgkJCQknZGVzY3JpcHRpb24nID0+DQoJCQkJCWFycmF5KFRleHQ6Ol8oJ1lvdXIgRnVsbCBOYW1lJyksIFRleHQ6Ol8oJ1NldCB0aGUgdXNlcm5hbWUvbG9naW4tbmFtZSBvZiB5b3VyIGNob2ljZS4nKSwgVGV4dDo6XygnWW91ciBFbWFpbCBBZGRyZXNzJyksIFRleHQ6Ol8oJ1VzZSBhdCBsZWFzdCA2IGNoYXJhY3RlcnMsIHVwcGVyLWNhc2UgYW5kIGxvd2VyLWNhc2UgbGV0dGVyLCBudW1iZXJzIGFuZCBhdCBsZWFzdCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXIuJyksIFRleHQ6Ol8oJ0NvbmZpcm0gUGFzc3dvcmQnKSwgVGV4dDo6XygnSnVzdCBjaGVja2luZyB0aGF0IHlvdXIgbm90IGEgcm9ib3QuJykpLA0KCQkJCSdoaW50JyA9Pg0KCQkJCQlhcnJheShUZXh0OjpfKCdZb3VyIEZ1bGwgTmFtZScpLCBUZXh0OjpfKCdVc2VybmFtZScpLCAneW91ckBlbWFpbC5jb20nLG51bGwsbnVsbCxudWxsKSwNCgkJCQknY2xhc3MnID0+DQoJCQkJCWFycmF5KCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLG51bGwpLA0KCQkJCSd2YWxpZGF0ZScgPT4NCgkJCQkJYXJyYXkobnVsbCwgbnVsbCwgJ2VtYWlsJywgbnVsbCwgbnVsbCwgJ2NhcHRjaGEnKSwNCgkJCQknZmlsdGVyJyA9Pg0KCQkJCQlhcnJheSgnc3RyaW5nJywgJ3N0cmluZycsICdlbWFpbCcsIG51bGwsIG51bGwsbnVsbCksDQoJCQkJJ2ZpZWxkJyA9Pg0KCQkJCQlhcnJheShudWxsLCBudWxsLCBudWxsLCAncGFzc3dvcmQyJywgbnVsbCwgbnVsbCkNCgkJCSk7DQoJCSRhZGRSZUNhcHRjaGEgPSBGYWN0b3J5OjpnZXRDb25maWcoKS0+Z2V0KCdjYXB0Y2hhJyk7DQoJCS8vIG5vdyBsb29wIHRoZSBmaWVsZHMgYW5kIGFkZCB0byBmb3JtDQoJCWZvcmVhY2ggKCR1c2VyRmllbGRzWyduYW1lJ10gYXMgJG5yID0+ICRuYW1lKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgZmllbGQNCgkJCSR4bWwgPSBhcnJheSgpOw0KCQkJLy8gb25seSBsb2FkIFJlQ2FwdGNoYSBpZiB0dXJuZWQgb24gaW4gc3lzdGVtDQoJCQlpZiAoJ2NhcHRjaGEnICE9ICRuYW1lIHx8ICRhZGRSZUNhcHRjaGEpDQoJCQl7DQoJCQkJJHhtbFtdID0gJzxmaWVsZCAnOw0KCQkJCSR4bWxbXSA9ICd0eXBlPSInLiR1c2VyRmllbGRzWyd0eXBlJ11bJG5yXS4nIiAnOw0KCQkJCSR4bWxbXSA9ICduYW1lPSInLiRuYW1lLiciICc7DQoJCQkJaWYgKCR1c2VyRmllbGRzWydsYWJlbCddWyRucl0pDQoJCQkJew0KCQkJCQkkeG1sW10gPSAnbGFiZWw9IicuJHVzZXJGaWVsZHNbJ2xhYmVsJ11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ2Rlc2NyaXB0aW9uJ11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdkZXNjcmlwdGlvbj0iJy4kdXNlckZpZWxkc1snZGVzY3JpcHRpb24nXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCWlmICgkdXNlckZpZWxkc1snY2xhc3MnXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2NsYXNzPSInLiR1c2VyRmllbGRzWydjbGFzcyddWyRucl0uJyIgJzsNCgkJCQl9DQoJCQkJaWYgKCdjYXB0Y2hhJyAhPSAkbmFtZSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdyZXF1aXJlZD0idHJ1ZSIgJzsNCgkJCQl9DQoJCQkJaWYgKCR1c2VyRmllbGRzWydmaWx0ZXInXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2ZpbHRlcj0iJy4kdXNlckZpZWxkc1snZmlsdGVyJ11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ3ZhbGlkYXRlJ11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICd2YWxpZGF0ZT0iJy4kdXNlckZpZWxkc1sndmFsaWRhdGUnXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCWlmICgkdXNlckZpZWxkc1snZmllbGQnXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2ZpZWxkPSInLiR1c2VyRmllbGRzWydmaWVsZCddWyRucl0uJyIgJzsNCgkJCQl9DQoJCQkJaWYgKCR1c2VyRmllbGRzWydoaW50J11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdoaW50PSInLiR1c2VyRmllbGRzWydoaW50J11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQkkeG1sW10gPSAnLz4nOw0KCQkJCS8vIHNldCB0aGUgZmllbGQNCgkJCQkkZm9ybS0+c2V0RmllbGQoIHNpbXBsZXhtbF9sb2FkX3N0cmluZyhpbXBsb2RlKCJcbiIsICR4bWwpKSk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkqIAlmaWVsZFR5cGVzIERlZmF1bHQgU2V0dGluZ3MNCgkqKi8NCglwdWJsaWMgc3RhdGljICRmaWVsZFR5cGVzID0gYXJyYXkoDQoJCQkxID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAncmFkaW8nLCANCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknY2xhc3MnID0+ICdidG4tZ3JvdXAgYnRuLWdyb3VwLXllc25vJywNCgkJCQknb3B0aW9ucycgPT4gYXJyYXkoJ1llcycsJ05vJyksDQoJCQkJJ2ZpbHRlcicgPT4gJ3dvcmQnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMiA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ2xpc3QnLCANCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknY2xhc3MnID0+ICdsaXN0X2NsYXNzJywNCgkJCQknbXVsdGlwbGUnID0+ICdmYWxzZScsDQoJCQkJJ29wdGlvbnMnID0+IGFycmF5KCksDQoJCQkJJ2ZpbHRlcicgPT4gJ2ludCcsIA0KCQkJCSd2YWxpZGF0ZScgPT4gJycsDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnICksDQoJCQkzID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnZWRpdG9yJywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3dpZHRoJyA9PiAnMTAwJScsIA0KCQkJCSdoZWlnaHQnID0+ICc1MDBweCcsIA0KCQkJCSdmaWx0ZXInID0+ICdzYWZlaHRtbCcsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdidXR0b25zJyA9PiAnZmFsc2UnLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknaGlkZScgPT4gJycsDQoJCQkJJ2VkaXRvcicgPT4gJ2pjZXxub25lJywNCgkJCQkncm93cycgPT4gJycsDQoJCQkJJ2NvbHMnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTQgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICd0ZXh0YXJlYScsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE0MDAnLA0KCQkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYSB1ay13aWR0aC0xLTEnLA0KCQkJCSd3aWR0aCcgPT4gJzEwMCUnLCANCgkJCQknaGVpZ2h0JyA9PiAnNTAwcHgnLCANCgkJCQknZmlsdGVyJyA9PiAnc3RyaW5nJywgDQoJCQkJJ3ZhbGlkYXRlJyA9PiAnJywNCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2hpbnQnID0+ICcnLA0KCQkJCSdyb3dzJyA9PiAnMjAnLA0KCQkJCSdjb2xzJyA9PiAnMTAnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTUgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICd0ZXh0JywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEnLA0KCQkJCSdhdXRvY29tcGxldGUnID0+ICdvbicsDQoJCQkJJ3ZhbGlkYXRlJyA9PiAnJywgDQoJCQkJJ2ZpZWxkJyA9PiAnJywNCgkJCQknc2l6ZScgPT4gJzYwJywgDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE1MCcsIA0KCQkJCSdmaWx0ZXInID0+ICdzdHJpbmcnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknaGludCcgPT4gJycsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQk2ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAndXJsJywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEnLA0KCQkJCSdhdXRvY29tcGxldGUnID0+ICdvbicsDQoJCQkJJ3ZhbGlkYXRlJyA9PiAnJywgDQoJCQkJJ2ZpZWxkJyA9PiAnJywNCgkJCQknc2l6ZScgPT4gJzYwJywgDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE1MCcsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdoaW50JyA9PiAnJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTcgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdlbWFpbCcsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknYXV0b2NvbXBsZXRlJyA9PiAnb24nLA0KCQkJCSd2YWxpZGF0ZScgPT4gJycsIA0KCQkJCSdmaWVsZCcgPT4gJycsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdtYXhsZW5ndGgnID0+ICcxNTAnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknaGludCcgPT4gJycsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdkZWZhdWx0JyA9PiAnJywNCgkJCQknc2hvd29uJyA9PiAnJyksDQoJCQk4ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAndGVsJywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEnLA0KCQkJCSdhdXRvY29tcGxldGUnID0+ICdvbicsDQoJCQkJJ3ZhbGlkYXRlJyA9PiAnJywgDQoJCQkJJ2ZpZWxkJyA9PiAnJywNCgkJCQknc2l6ZScgPT4gJzYwJywgDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE1MCcsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdoaW50JyA9PiAnJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTkgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdjYWxlbmRhcicsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknc2l6ZScgPT4gJzYwJywgDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE1MCcsDQoJCQkJJ2ZpbHRlcicgPT4gJ3NlcnZlcl91dGMnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknZm9ybWF0JyA9PiAnJWQtJW0tJVknLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMTAgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdjb2xvcicsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndGV4dF9hcmVhJywNCgkJCQknc2l6ZScgPT4gJzYwJywgDQoJCQkJJ21heGxlbmd0aCcgPT4gJzE1MCcsDQoJCQkJJ2ZpbHRlcicgPT4gJ3N0cmluZycsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMTEgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdjb3VudHJ5bmFtZScsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAnbGlzdF9jbGFzcycsDQoJCQkJJ2ZpbHRlcicgPT4gJ3N0cmluZycsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMTIgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdoaWRkZW4nLCANCgkJCQknY2xhc3MnID0+ICd0ZXh0X2hpZGRlbicsIA0KCQkJCSdmaWx0ZXInID0+ICdpbnQnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknZGVmYXVsdCcgPT4gJzEnICksDQoJCQkxMyA9PiBhcnJheSgNCgkJCQkndHlwZScgPT4gJ2ZpbGUnLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYScsDQoJCQkJJ3NpemUnID0+ICc2MCcsIA0KCQkJCSdmaWx0ZXInID0+ICcnLCANCgkJCQkncmVxdWlyZWQnID0+ICd0cnVlJywNCgkJCQknYWNjZXB0JyA9PiAnaW1hZ2UvKicsDQoJCQkJJ21lc3NhZ2UnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTE0ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnbm90ZScsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2hlYWRpbmcnID0+ICdoNCcsDQoJCQkJJ2NsYXNzJyA9PiAnYWxlcnQnLA0KCQkJCSdjbG9zZScgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMTUgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdzcGFjZXInLCANCgkJCQknZGVzY3JpcHRpb24nID0+ICcnLA0KCQkJCSdocicgPT4gJ3RydWUnLA0KCQkJCSdjbGFzcycgPT4gJ3RleHRfYXJlYScsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMTYgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdub3RlJywgDQoJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQknaGVhZGluZycgPT4gJ2g0JywNCgkJCQknY2xhc3MnID0+ICd0ZXh0X2FyZWEnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTE3ID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAncmVnaW9ubmFtZScsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAnbGlzdF9jbGFzcycsDQoJCQkJJ2ZpbHRlcicgPT4gJ3N0cmluZycsIA0KCQkJCSdyZXF1aXJlZCcgPT4gJ3RydWUnLA0KCQkJCSdtZXNzYWdlJyA9PiAnJywNCgkJCQknZGVmYXVsdCcgPT4gJycsDQoJCQkJJ3Nob3dvbicgPT4gJycpLA0KCQkJMzAgPT4gYXJyYXkoDQoJCQkJJ3R5cGUnID0+ICdwYXNzd29yZCcsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ2NsYXNzJyA9PiAndmFsaWRhdGUtcGFzc3dvcmQnLA0KCQkJCSdzaXplJyA9PiAnNjAnLCANCgkJCQknbWF4bGVuZ3RoJyA9PiAnMTUwJywgDQoJCQkJJ2ZpbHRlcicgPT4gJ3JhdycsIA0KCQkJCSd2YWxpZGF0ZScgPT4gJ3Bhc3N3b3JkJywgDQoJCQkJJ3JlcXVpcmVkJyA9PiAndHJ1ZScsDQoJCQkJJ2F1dG9jb21wbGV0ZScgPT4gJ29mZicsDQoJCQkJJ2ZpZWxkJyA9PiAnJywNCgkJCQknbWVzc2FnZScgPT4gJycsDQoJCQkJJ2RlZmF1bHQnID0+ICcnLA0KCQkJCSdzaG93b24nID0+ICcnKSwNCgkJCTMxID0+IGFycmF5KA0KCQkJCSd0eXBlJyA9PiAnY2FwdGNoYScsIA0KCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsDQoJCQkJJ3ZhbGlkYXRlJyA9PiAnY2FwdGNoYScsIA0KCQkJCSduYW1lc3BhY2UnID0+ICcnKQ0KCQkJKTsNCltDVVNUT01DT0RFPXVzZXJJc1RocmVlK2FkbWludXNlcixvcmdhbml6ZXJ1c2VyLHJlZ2lzdGVyZWR1c2VyLG9yZ2FuaXplcixyZWdpc3RlcmVkX3VzZXJdDQoJLyoqDQoJKiAJdGhlIHB1YmxpYyBjdXJyZW5jeQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHVzZXJzQ3VycmVuY3kgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJZ2V0IHRoZSB1c2VyIGN1cnJlbmN5DQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVc2VyQ3VycmVuY3koJHVzZXJJZCA9IG51bGwpDQoJew0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJHVzZXJJZCkgJiYgJHVzZXJJZCBpbnN0YW5jZW9mIEpVc2VyKQ0KCQl7DQoJCQkkdXNlciA9ICR1c2VySWQ7DQoJCX0NCgkJZWxzZWlmIChpc19udW1lcmljKCR1c2VySWQpICYmICR1c2VySWQgPiAwKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJfQ0KCQkvLyBvbmx5IHNldCBhZ2FpbiBpZiBub3QgZm91bmQNCgkJaWYgKCFpc3NldChzZWxmOjokdXNlcnNDdXJyZW5jeVskdXNlci0+aWRdKSkNCgkJew0KCQkJJGFycmF5ID0gKGFycmF5KSBzZWxmOjp1c2VySXMoJHVzZXIsIHRydWUpOw0KCQkJLy8gc2V0IGluIHJlbGF0aW9uDQoJCQlzd2l0Y2goJGFycmF5WydpcyddKQ0KCQkJew0KCQkJCS8vIGFkbWluIHVzZSBnbG9iYWwNCgkJCQljYXNlIDM6IA0KCQkJCXNlbGY6OiR1c2Vyc0N1cnJlbmN5WyR1c2VyLT5pZF0gPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnY3VycmVuY3knLCAnVVNEJyk7DQoJCQkJYnJlYWs7DQoJCQkJLy8gb3JnYW5pemVyIGN1cnJlbmN5DQoJCQkJY2FzZSAyOg0KCQkJCXNlbGY6OiR1c2Vyc0N1cnJlbmN5WyR1c2VyLT5pZF0gPSBzZWxmOjpnZXRWYXIoJ29yZ2FuaXplcicsICRhcnJheVsnaWQnXSwgJ2lkJywgICdjdXJyZW5jeScpOw0KCQkJCWJyZWFrOw0KCQkJCS8vIHJlZ2lzdGVyZWQgdXNlciBjdXJyZW5jeQ0KCQkJCWNhc2UgMToNCgkJCQlzZWxmOjokdXNlcnNDdXJyZW5jeVskdXNlci0+aWRdID0gc2VsZjo6Z2V0UmVnVXNlclZhbHVlKCRhcnJheVsnaWQnXSwgJ2N1cnJlbmN5X2NvZGV0aHJlZScsIHNlbGY6OmdldFB1YmxpY0N1cnJlbmN5KCkpOw0KCQkJCWJyZWFrOw0KCQkJCS8vIGFsbCBvdGhlciBnZXRzIHRoZSBwdWJsaWMNCgkJCQlkZWZhdWx0Og0KCQkJCXJldHVybiBzZWxmOjpnZXRQdWJsaWNDdXJyZW5jeSgpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBzZWxmOjokdXNlcnNDdXJyZW5jeVskdXNlci0+aWRdOw0KCX0NCg0KCS8qKg0KCSogCXRoZSBldmVudCBjdXJyZW5jeQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGV2ZW50Q3VycmVuY3kgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJZ2V0IHRoZSB1c2VyIGN1cnJlbmN5DQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFdmVudEN1cnJlbmN5KCRpZCA9IG51bGwpDQoJew0KCQlpZiAoaXNfbnVtZXJpYygkaWQpICYmICRpZCA+IDApDQoJCXsNCgkJCSRldmVudCA9IChpbnQpICRpZDsNCgkJfQ0KCQllbHNlaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+aWQpICYmIHNlbGY6OiRldmVudC0+aWQgPiAwKQ0KCQl7DQoJCQkkZXZlbnQgPSAoaW50KSBzZWxmOjokZXZlbnQtPmlkOw0KCQl9DQoJCWVsc2VpZiAoISRpZCAmJiBpc3NldChzZWxmOjokZXZlbnQtPm9yZ2FuaXplcikgJiYgc2VsZjo6JGV2ZW50LT5vcmdhbml6ZXIgPiAwKQ0KCQl7DQoJCQlpZiAoJGN1cnJlbmN5ID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCBzZWxmOjokZXZlbnQtPm9yZ2FuaXplciwgJ2lkJywgJ2N1cnJlbmN5JykpDQoJCQl7DQoJCQkJcmV0dXJuICRjdXJyZW5jeTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIHJldHVybiBkZWZhdWx0IGN1cnJlbmN5IG9mIHRoZSBjdXJyZW50IHVzZXINCgkJCXJldHVybiBzZWxmOjpnZXRVc2VyQ3VycmVuY3koKTsNCgkJfQ0KCQkvLyBjaGVjayBpZiBhbHJlYWR5IHNldA0KCQlpZiAoIWlzc2V0KHNlbGY6OiRldmVudEN1cnJlbmN5WyRldmVudF0pKQ0KCQl7DQoJCQkvLyBnZXQgZXZlbnQgb3JnYW5pemVyDQoJCQlpZiAoISRpZCAmJiBpc3NldChzZWxmOjokZXZlbnQtPm9yZ2FuaXplcikgJiYgc2VsZjo6JGV2ZW50LT5vcmdhbml6ZXIgPiAwKQ0KCQkJew0KCQkJCWlmICgkY3VycmVuY3kgPSBzZWxmOjpnZXRWYXIoJ29yZ2FuaXplcicsIHNlbGY6OiRldmVudC0+b3JnYW5pemVyLCAnaWQnLCAnY3VycmVuY3knKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudEN1cnJlbmN5WyRldmVudF0gPSAkY3VycmVuY3k7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmICgkb3JnSWQgPSBzZWxmOjpnZXRWYXIoJ2V2ZW50JywgJGV2ZW50LCAnaWQnLCAnb3JnYW5pemVyJykpDQoJCQl7DQoJCQkJaWYgKCRjdXJyZW5jeSA9IHNlbGY6OmdldFZhcignb3JnYW5pemVyJywgJG9yZ0lkLCAnaWQnLCAnY3VycmVuY3knKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudEN1cnJlbmN5WyRldmVudF0gPSAkY3VycmVuY3k7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIHJldHVybiBpZiBmb3VuZA0KCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50Q3VycmVuY3lbJGV2ZW50XSkpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokZXZlbnRDdXJyZW5jeVskZXZlbnRdOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCg0KCS8qKg0KCSogCXRoZSBwdWJsaWMgY3VycmVuY3kNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRwdWJsaWNDdXJyZW5jeSA9ICdzZXQnOw0KDQoJLyoqDQoJKiAJc2V0IHRoZSBwdWJsaWMvZGVmYXVsdCBjdXJyZW5jeQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHVibGljQ3VycmVuY3koKQ0KCXsNCgkJaWYgKCdzZXQnID09PSBzZWxmOjokcHVibGljQ3VycmVuY3kpDQoJCXsNCgkJCS8vIGdldCB0aGlzIGxvY2F0aW9uIGRhdGENCgkJCSRsb2NhdGlvbkRhdGEgPSBzZWxmOjpnZXRMb2NhdGlvbmRhdGEoKTsNCgkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgbG9jYXRpb24gZGF0YQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRsb2NhdGlvbkRhdGEpICYmIGlzc2V0KCRsb2NhdGlvbkRhdGFbJ0NVUlJFTkNZX0NPREVfVEhSRUUnXSkpDQoJCQl7DQoJCQkJc2VsZjo6JHB1YmxpY0N1cnJlbmN5ID0gJGxvY2F0aW9uRGF0YVsnQ1VSUkVOQ1lfQ09ERV9USFJFRSddOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIGZhbGwgb3ZlciB0byB5b3VyIGNvbXBvbmVudCBkZWZhdWx0IGN1cnJlbmN5DQoJCQkJc2VsZjo6JHB1YmxpY0N1cnJlbmN5ID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJ2N1cnJlbmN5JywgJ1VTRCcpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBzZWxmOjokcHVibGljQ3VycmVuY3k7DQoJfQ0KDQoJLyoqDQoJKiAJVGhlIG93bmVyDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkb3duZXIgPSBhcnJheSgpOw0KDQoJLyoqDQoJKiAJYXJyYXkgdG8gY2hlY2sgdXNlcg0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGNoZWNrVXNlciA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAl3YW50cyB0byBlZGl0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdmlld0FjY2VzczsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzQWNjZXNzKCRyZWNvcmRJZCwgJHVzZXJJZCA9IG51bGwsICR0byA9ICdldmVudCcsICR2aWV3QWNjZXNzID0gZmFsc2UpDQoJew0KCQkvLyBzZXQgaWYgdmlldyBhY2Nlc3MgaXMgYWxsIHRoYXQgaXMgcmVxdWlyZWQgDQoJCXNlbGY6OiR2aWV3QWNjZXNzID0gJHZpZXdBY2Nlc3M7DQoJCWlmKCEkdXNlcklkKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokdXNlcikpDQoJCQl7DQoJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCXNlbGY6OiR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigpOw0KCQkJfQ0KCQkJJHVzZXJJZCA9IHNlbGY6OiR1c2VyLT5pZDsNCgkJfQ0KCQkkYXJyYXkgPSAoYXJyYXkpIHNlbGY6OnVzZXJJcygkdXNlcklkLCB0cnVlKTsNCgkJaWYgKGlzc2V0KCRhcnJheVsnaXMnXSkgJiYgJGFycmF5WydpcyddICYmICRyZWNvcmRJZCA+IDApDQoJCXsNCgkJCXN3aXRjaCgkdG8pDQoJCQl7DQoJCQkJY2FzZSAnZXZlbnQnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzRXZlbnQoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAndmVudWUnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzVmVudWUoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ29yZ2FuaXplcic6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NPcmdhbml6ZXIoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2ludm9pY2UnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzSW52b2ljZSgkYXJyYXlbJ2lzJ10sICRyZWNvcmRJZCwgJGFycmF5WydpZCddLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdwYXltZW50X21ldGhvZCc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NQYXltZW50TWV0aG9kKCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkYXJyYXlbJ2lkJ10sICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3RheF9ydWxlJzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc1RheFJ1bGUoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAnbWVzc2FnZXNfYnVpbGRlcic6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NNZXNzYWdlc0J1aWxkZXIoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICRhcnJheVsnaWQnXSwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQkJY2FzZSAnY29uY2VwdCc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NDb25jZXB0KCRhcnJheVsnaXMnXSwgJHJlY29yZElkLCAkdXNlcklkKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdjb250ZW50JzoNCgkJCQkJcmV0dXJuIHNlbGY6OmFjY2Vzc0NvbnRlbnQoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2J1bmRsZSc6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NCdW5kbGUoJGFycmF5WydpcyddLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc0V2ZW50KCR0eXBlLCAkcmVjb3JkSWQsICRvcmdJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdldmVudCcsICRyZWNvcmRJZCwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID09ICRvcmdJZCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokdmlld0FjY2VzcykNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgnZXZlbnQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmV2ZW50LicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NWZW51ZSgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ3ZlbnVlJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsndmVudWUnLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ3ZlbnVlJywgJHJlY29yZElkLCAnaWQnLCAnY3JlYXRlZF9ieScpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ3ZlbnVlJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ3ZlbnVlLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS52ZW51ZS4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzT3JnYW5pemVyKCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnb3JnYW5pemVyJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnb3JnYW5pemVyJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdvcmdhbml6ZXInLCAkcmVjb3JkSWQsICdpZCcsICdjcmVhdGVkX2J5Jyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnb3JnYW5pemVyJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ29yZ2FuaXplci5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0ub3JnYW5pemVyLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NJbnZvaWNlKCR0eXBlLCAkcmVjb3JkSWQsICRsb2NhbElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIGV2ZW50IG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2ludm9pY2UnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydpbnZvaWNlJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdpbnZvaWNlJywgJHJlY29yZElkLCAnaWQnLCAnb3JnYW5pemVyJyk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCQlkZWZhdWx0OiAvLyBzZXQgdGhlIGRlZmF1bHQgdG8NCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQlicmVhazsNCgkJfQ0KCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQlpZiAoc2VsZjo6JG93bmVyWydpbnZvaWNlJy4kcmVjb3JkSWRdID09ICRsb2NhbElkKQ0KCQl7DQoJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCXsNCgkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdpbnZvaWNlLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5pbnZvaWNlLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NQYXltZW50TWV0aG9kKCR0eXBlLCAkcmVjb3JkSWQsICRsb2NhbElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ3BheW1lbnRfbWV0aG9kJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsncGF5bWVudF9tZXRob2QnLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ3BheW1lbnRfbWV0aG9kJywgJHJlY29yZElkLCAnaWQnLCAnb3JnYW5pemVyJyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsncGF5bWVudF9tZXRob2QnLiRyZWNvcmRJZF0gPT0gJGxvY2FsSWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ3BheW1lbnRfbWV0aG9kLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5wYXltZW50X21ldGhvZC4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzVGF4UnVsZSgkdHlwZSwgJHJlY29yZElkLCAkbG9jYWxJRCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCd0YXhfcnVsZScsICRyZWNvcmRJZCwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdID09ICRsb2NhbElEKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdwYXltZW50X21ldGhvZC5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0ucGF5bWVudF9tZXRob2QuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc01lc3NhZ2VzQnVpbGRlcigkdHlwZSwgJHJlY29yZElkLCAkbG9jYWxJZCwgJHVzZXJJZCkNCgl7DQoJCXN3aXRjaCAoJHR5cGUpDQoJCXsNCgkJCWNhc2UgMzogLy8gYWRtaW4gaXMgYWxsb3dlZCB0byBlZGl0DQoJCQkJcmV0dXJuIHRydWU7DQoJCQlicmVhazsNCgkJCWNhc2UgMjogLy8gY2hlY2sgaWYgb3JnYW5pemVyIGlzIHRoZSBvd25lcg0KCQkJCWlmICghaXNzZXQoc2VsZjo6JG93bmVyWydldmVudCcuJHJlY29yZElkXSkpDQoJCQkJew0KCQkJCQkvLyBsb2FkIHRoZSBvd25lcg0KCQkJCQlzZWxmOjokb3duZXJbJ21lc3NhZ2VzX2J1aWxkZXInLiRyZWNvcmRJZF0gPSBzZWxmOjpnZXRWYXIoJ21lc3NhZ2VzX2J1aWxkZXInLCAkcmVjb3JkSWQsICdpZCcsICdvcmdhbml6ZXInKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydtZXNzYWdlc19idWlsZGVyJy4kcmVjb3JkSWRdID09ICRsb2NhbElkKQ0KCQkJCXsNCgkJCQkJaWYgKHNlbGY6OiR2aWV3QWNjZXNzKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0pKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgY3VycmVudCB1c2VyDQoJCQkJCQlzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXS0+YXV0aG9yaXNlKCdtZXNzYWdlc19idWlsZGVyLmVkaXQnLCAnY29tX1tbW2NvbXBvbmVudF1dXS5tZXNzYWdlc19idWlsZGVyLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhY2Nlc3NDb25jZXB0KCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnZXZlbnQnLiRyZWNvcmRJZF0pKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCB0aGUgb3duZXINCgkJCQkJc2VsZjo6JG93bmVyWydjb25jZXB0Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdjb25jZXB0JywgJHJlY29yZElkLCAnaWQnLCAnY3JlYXRlZF9ieScpOw0KCQkJCX0NCgkJCQkvLyBvbmx5IHRydWUgaWYgb3duZXIgaXMgdGhlIHNhbWUgYXMgdXNlcg0KCQkJCWlmIChzZWxmOjokb3duZXJbJ2NvbmNlcHQnLiRyZWNvcmRJZF0gPT0gJHVzZXJJZCkNCgkJCQl7DQoJCQkJCWlmIChzZWxmOjokdmlld0FjY2VzcykNCgkJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCX0NCgkJCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCQkJaWYgKCFpc3NldChzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdKSkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJCQkJc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuIHNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0tPmF1dGhvcmlzZSgnY29uY2VwdC5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0uY29uY2VwdC4nIC4gKGludCkgICRyZWNvcmRJZCk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzQ29udGVudCgkdHlwZSwgJHJlY29yZElkLCAkdXNlcklkKQ0KCXsNCgkJc3dpdGNoICgkdHlwZSkNCgkJew0KCQkJY2FzZSAzOiAvLyBhZG1pbiBpcyBhbGxvd2VkIHRvIGVkaXQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAyOiAvLyBjaGVjayBpZiBvcmdhbml6ZXIgaXMgdGhlIG93bmVyDQoJCQkJaWYgKCFpc3NldChzZWxmOjokb3duZXJbJ2V2ZW50Jy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnY29uY2VwdCcuJHJlY29yZElkXSA9IHNlbGY6OmdldFZhcignY29uY2VwdCcsICRyZWNvcmRJZCwgJ2lkJywgJ2NyZWF0ZWRfYnknKTsNCgkJCQl9DQoJCQkJLy8gb25seSB0cnVlIGlmIG93bmVyIGlzIHRoZSBzYW1lIGFzIHVzZXINCgkJCQlpZiAoc2VsZjo6JG93bmVyWydjb25jZXB0Jy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ2NvbmNlcHQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmNvbmNlcHQuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgkJcmV0dXJuIHNlbGY6OiR1c2VyLT5hdXRob3Jpc2UoJ2NvbnRlbnQuZWRpdCcsICdjb21fW1tbY29tcG9uZW50XV1dLmNvbnRlbnQuJyAuIChpbnQpICAkcmVjb3JkSWQpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzQnVuZGxlKCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXplciBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnYnVuZGxlJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnYnVuZGxlJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdidW5kbGUnLCAkcmVjb3JkSWQsICdpZCcsICdjcmVhdGVkX2J5Jyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnYnVuZGxlJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQlpZiAoc2VsZjo6JHZpZXdBY2Nlc3MpDQoJCQkJCXsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9DQoJCQkJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNoZWNrVXNlclskdXNlcklkXSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBjdXJyZW50IHVzZXINCgkJCQkJCXNlbGY6OiRjaGVja1VzZXJbJHVzZXJJZF0gPSBGYWN0b3J5OjpnZXRVc2VyKCR1c2VySWQpOw0KCQkJCQl9DQoJCQkJCXJldHVybiBzZWxmOjokY2hlY2tVc2VyWyR1c2VySWRdLT5hdXRob3Jpc2UoJ2J1bmRsZS5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0uYnVuZGxlLicgLiAoaW50KSAgJHJlY29yZElkKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaXNJdGVtcygkdGFibGUsICR1c2VySWQgPSBudWxsKQ0KCXsNCgkJaWYoJHVzZXJJZCA+IDApDQoJCXsNCgkJCSRhcnJheSA9IChhcnJheSkgc2VsZjo6dXNlcklzKCR1c2VySWQsIHRydWUpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGFycmF5ID0gKGFycmF5KSBzZWxmOjp1c2VySXMoRmFjdG9yeTo6Z2V0VXNlcigpLT5pZCwgdHJ1ZSk7DQoJCX0NCgkJLy8gcmV0dXJuIGluIHJlbGF0aW9uDQoJCXN3aXRjaCgkYXJyYXlbJ2lzJ10pDQoJCXsNCgkJCS8vIHJlZ2lzdGVyZWQgKG9ubHkgbG9hZCBpdGVtcyB0aGF0IGJlbG9uZyB0byB0aGUgcmVnaXN0ZXJlZCB1c2VyKQ0KCQkJY2FzZSAxOg0KCQkJcmV0dXJuIHNlbGY6OmdldFZhcnMoJHRhYmxlLCAkYXJyYXlbJ2lkJ10sICdyZWdpc3RlcmVkX3VzZXInKTsNCgkJCWJyZWFrOw0KCQkJLy8gb3JnYW5pemVyIChvbmx5IGxvYWQgaXRlbXMgdGhhdCBiZWxvbmcgdG8gdGhlIG9yZ2FuaXplcikNCgkJCWNhc2UgMjoNCgkJCXJldHVybiBzZWxmOjpnZXRWYXJzKCR0YWJsZSwgJGFycmF5WydpZCddLCAnb3JnYW5pemVyJyk7DQoJCQlicmVhazsNCgkJCS8vIGFkbWluIGNhbiBhY2Nlc3MgYWxsDQoJCQljYXNlIDM6IA0KCQkJcmV0dXJuIC0xOw0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJExvY2F0aW9uZGF0YUhlbHBlciA9IGZhbHNlOyANCg0KCS8qKg0KCSogCUxvYWQgdGhlIGRhdGEgZm9yIElQIGFuZCBDdXJyZW5jeSANCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldExvY2F0aW9uZGF0YSgkaXAgPSBudWxsLCAkcHJvdG9jb2wgPSBudWxsLCAka2V5ID0gbnVsbCwgJGJhc2UgPSAnVVNEJywgJG1vZGUgPSAwLCAkc3RyaW5nID0gMCwgJHZhbHVlID0gMS4wMCkNCgl7CQkNCgkJaWYgKHNlbGY6OmxvYWRMb2NhdGlvbkRhdGEoKSkNCgkJew0KCQkJcmV0dXJuIExvY2F0aW9uZGF0YUhlbHBlcjo6Z2V0TG9jYXRpb25kYXRhKCRpcCwgJHByb3RvY29sLCAka2V5LCAkYmFzZSwgJG1vZGUsICRzdHJpbmcsICR2YWx1ZSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIHJldHVybnMgRXhjaGFuZ2VSYXRlcw0KCSAqDQoJICogQHJldHVybiBzdHJpbmcNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV4Y2hhbmdlUmF0ZSgkZnJvbSwgJGZyb21WYWx1ZSwgJHRvID0gJ1VTRCcpDQoJew0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQlyZXR1cm4gTG9jYXRpb25kYXRhSGVscGVyOjpnZXRFeGNoYW5nZVJhdGUoJGZyb20sICRmcm9tVmFsdWUsICR0byk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkZGF0YQ0KCSAqIEBwYXJhbSAkdHlwZQ0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50KCRldmVudCwgJHR5cGUpDQoJew0KCQkvLyBpZiBvbmx5IGlkIGdpdmVuIGdldCB0aGUgb2JqZWN0DQoJCWlmIChpc19udW1lcmljKCRldmVudCkgJiYgJGV2ZW50ID4gMCApDQoJCXsNCgkJCSRldmVudCA9IHNlbGY6OmdldEFsbFZhbHVlcygkZXZlbnQsICdldmVudCcsIGFycmF5KCdldmVudF9kb2N1bWVudHMnLCdiYW5uZXJfaW1hZ2UnLCdwb3N0ZXJfaW1hZ2UnLCd0ZWFzZXJfaW1hZ2UnLCdldmVudF9pbWFnZXMnKSk7DQoJCX0NCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgZXZlbnQgb2JqZWN0LCBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVlZGVkIGRhdGENCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRldmVudCkpDQoJCXsNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBuZWVkZWQgZGF0ZXMNCgkJCWlmIChpc3NldCgkZXZlbnQtPmRhdGUpICYmICduZWUnICE9ICRldmVudC0+ZGF0ZSAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZXZlbnQtPmRhdGUpKQ0KCQkJew0KCQkJCSRldmVudC0+ZGF0ZSA9IGpzb25fZGVjb2RlKCRldmVudC0+ZGF0ZSwgdHJ1ZSk7DQoJCQl9DQoJCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgbmVlZGVkIGNvc3QNCgkJCWlmIChpc3NldCgkZXZlbnQtPmNvc3QpICYmICduZWUnICE9ICRldmVudC0+Y29zdCAmJiBTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZXZlbnQtPmNvc3QpKQ0KCQkJew0KCQkJCSRldmVudC0+Y29zdCA9IGpzb25fZGVjb2RlKCRldmVudC0+Y29zdCwgdHJ1ZSk7DQoJCQl9DQoJCQkvLyBtYWtlIHN1cmUgaW1wb3J0YW50IGRhdGEgd2FzIHNldA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudC0+Y29zdCkgfHwgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGV2ZW50LT5kYXRlKSkNCgkJCXsNCgkJCQkvLyBzZXQgYWRqdXN0bWVudHMNCgkJCQlpZiAoaXNzZXQoJGV2ZW50LT5hZGp1c3RtZW50KSAmJiAnbmVlJyAhPSAkZXZlbnQtPmFkanVzdG1lbnQgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGV2ZW50LT5hZGp1c3RtZW50KSkNCgkJCQl7DQoJCQkJCSRldmVudC0+YWRqdXN0bWVudCA9IGpzb25fZGVjb2RlKCRldmVudC0+YWRqdXN0bWVudCwgdHJ1ZSk7DQoJCQkJfQ0KCQkJCS8vIHNldCBsaW1pdCBwZXIgZ3JvdXANCgkJCQlpZiAoaXNzZXQoJGV2ZW50LT5saW1pdHBlcmdyb3VwKSAmJiAnbmVlJyAhPSAkZXZlbnQtPmxpbWl0cGVyZ3JvdXAgJiYgU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJGV2ZW50LT5saW1pdHBlcmdyb3VwKSkNCgkJCQl7DQoJCQkJCSRldmVudC0+bGltaXRwZXJncm91cCA9IGpzb25fZGVjb2RlKCRldmVudC0+bGltaXRwZXJncm91cCwgdHJ1ZSk7DQoJCQkJfQ0KCQkJCS8vIGZpbmFsIGNoZWNrDQoJCQkJaWYgKAlpc3NldCgkZXZlbnQtPnR5cGUpICYmIGlzX251bWVyaWMoJGV2ZW50LT50eXBlKSAmJg0KCQkJCQlpc3NldCgkZXZlbnQtPmlkKSAmJiBpc19udW1lcmljKCRldmVudC0+aWQpKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50ID0gJGV2ZW50Ow0KCQkJCQkvLyBkYXRlIG9yIGp1c3QgY29zdA0KCQkJCQlyZXR1cm4gc2VsZjo6ZXZlbnRCdWlsZGVyKCR0eXBlKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkcmV0dXJuVHlwZQ0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGV2ZW50QnVpbGRlcigkcmV0dXJuVHlwZSkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fIyMjY29tcG9uZW50IyMjJyk7DQoJCX0NCgkJLy8gc2V0IHRoZSByZXR1cm4gdHlwZQ0KCQlzZWxmOjokcmV0dXJuVHlwZSA9ICRyZXR1cm5UeXBlOw0KCQkvLyBzZXR1cCBhIGZpbHRlcklucHV0DQoJCXNlbGY6OiRmaWx0ZXJJbnB1dCA9IG5ldyBKRmlsdGVySW5wdXQoKTsNCgkJLy8gc2V0IHRoZSBmaWxlIHBhdGgNCgkJc2VsZjo6JGZpbGVwYXRoID0gc2VsZjo6Z2V0Rm9sZGVyUGF0aCgpOw0KCQkvLyBub3cgYWRkIHRoZSB1cmwgcGF0aCB0byBzaG93IHRoZSBpbWFnZQ0KCQlzZWxmOjokZmlsZWxpbmsgPSBzZWxmOjpnZXRGb2xkZXJQYXRoKCd1cmwnKTsNCgkJLy8gR2V0IHRoZSBiYXNpYyBlbmNyeXB0aW9uLg0KCQlzZWxmOjokYmFzaWNrZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnYmFzaWMnKTsNCgkJLy8gR2V0IHRoZSBlbmNyeXB0aW9uIG9iamVjdC4NCgkJc2VsZjo6JGxvY2tlciA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKHNlbGY6OiRiYXNpY2tleSwgMTI4KTsNCgkJLy8gcmVzZXQgZ2xvYmFsDQoJCSR0aW1lU2V0ID0gZmFsc2U7DQoJCS8vIGxvYWQgY29uY2VwdCBwZXIgZGF0ZQ0KCQlpZiAoc2VsZjo6c2V0RGF0ZXMoKSkNCgkJew0KCQkJJHRpbWVTZXQgPSB0cnVlOw0KCQl9DQoJCS8vIGxvYWQgY29uY2VwdCBwZXIgY29zdA0KCQllbHNlaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkpDQoJCXsNCgkJCXNlbGY6OiRjb25jZXB0cyA9IGFycmF5X3VuaXF1ZShhcnJheV9maWx0ZXIoc2VsZjo6JGV2ZW50LT5jb3N0Wydjb25jZXB0J10pKTsNCgkJfQ0KCQkvLyBjaGVjayBidW5kbGVyDQoJCXNlbGY6OnNldEJ1bmRsZXIoKTsNCgkJaWYgKGlzc2V0KHNlbGY6OiRjb25jZXB0cykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGNvbmNlcHRzKSkNCgkJew0KCQkJLy8gYnVpbGQgY29uY2VwdHMNCgkJCWZvcmVhY2ggKHNlbGY6OiRjb25jZXB0cyBhcyAkZXZlbnRfY29uY2VwdF90aW1lID0+ICRjb25jZXB0KQ0KCQkJew0KCQkJCWlmICghJHRpbWVTZXQpDQoJCQkJew0KCQkJCQkkZXZlbnRfY29uY2VwdF90aW1lID0gc2VsZjo6JGV2ZW50LT5pZC4nXycuJGNvbmNlcHQuJ19fMCc7DQoJCQkJfQ0KCQkJCS8vIGJ1aWxkIGNvbmNlcHQgZGl2DQoJCQkJc2VsZjo6JGNvbmNlcHRIVE1MWyRldmVudF9jb25jZXB0X3RpbWVdID0gc2VsZjo6YnVpbGRDb25jZXB0KCRjb25jZXB0LCRldmVudF9jb25jZXB0X3RpbWUpOw0KCQkJfQ0KDQoJCQkvLyBsb2FkIG9ycGhhbiBwcmljZSB2YXJpYXRpb25zDQoJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5jb3N0Wydjb25jZXB0J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSkNCgkJCXsNCgkJCQlzZWxmOjpsb2FkT3JwaGFuVmFyaWF0aW9ucygpOw0KCQkJfQ0KDQoJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQl7DQoJCQkJLy8gYnVpbGQgdGhlIERpc3BsYXkgQ29udGVudA0KCQkJCSRjb250ZW50ID0gYXJyYXkoKTsNCgkJCQkkY29udGVudFtdID0gJzxkaXYgaWQ9InByZXZpZXciIGNsYXNzPSJ3aXJlLWJvcmRlciI+PGRpdiBjbGFzcz0idWstZ3JpZCI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstd2lkdGgtMS0xIj4nOw0KDQoJCQkJLy8gc2V0IHRoZSBFdmVudCBTdGFydCBhbmQgRW5kIERhdGUNCgkJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10pKQ0KCQkJCXsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJldmVudC1zdGFydC1lbmQiPicuc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10uJzwvZGl2Pic7DQoJCQkJfQ0KCQkJCS8vIHNldCBldmVudCBuYW1lDQoJCQkJaWYgKHNlbGY6OiRldmVudC0+aWQgPiAwKQ0KCQkJCXsNCgkJCQkJJGVkaXQgPSAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKSA/IHNlbGY6OmxvYWRFZGl0QnV0dG9uKCdldmVudCcsc2VsZjo6JGV2ZW50LT5pZCkgOiAnJzsNCgkJCQkJJGVkaXRDbGFzcyA9IChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZWRpdCkpID8gJyBjbGFzcz0idWstdmlzaWJsZS1ob3Zlci1pbmxpbmUiJyA6ICcnOw0KCQkJCQlzZWxmOjokZXZlbnQtPm5hbWUgPSBzZWxmOjpsb2FkTmFtZSgnZXZlbnQnLHNlbGY6OiRldmVudC0+aWQpOw0KCQkJCQkkY29udGVudFtdID0gJzxoMicuJGVkaXRDbGFzcy4nPicuIHNlbGY6OiRldmVudC0+bmFtZSAuICRlZGl0IC4nPC9oMj4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlzZWxmOjokZXZlbnQtPm5hbWUgPSBUZXh0OjpfKCdUaGUgRXZlbnQgTmFtZScpOw0KCQkJCQkkY29udGVudFtdID0gJzxoMj48c3BhbiBpZD0iZXZlbnROYW1lIj4nLiBzZWxmOjokZXZlbnQtPm5hbWUgLic8L3NwYW4+PC9oMj4nOw0KCQkJCX0NCgkJCQkvLyBub3cgbG9hZCB0aGUgYmFubmVyDQoJCQkJaWYgKCRiYW5uZXIgPSBzZWxmOjpnZXRFdmVudEltYWdlKCdiYW5uZXJfaW1hZ2UnLCAxLCBzZWxmOjokZXZlbnQtPm5hbWUsICd1ay10aHVtYm5haWwgdWstbWFyZ2luJykpDQoJCQkJew0KCQkJCQkkY29udGVudFtdID0gJGJhbm5lcjsNCgkJCQl9DQoJCQkJLy8gc2V0IGV2ZW50IGRldGFpbHMNCgkJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5kZXRhaWxzKSAmJiAgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5kZXRhaWxzKSkNCgkJCQl7DQoJCQkJCSRjb250ZW50W10gPSBzZWxmOjokZXZlbnQtPmRldGFpbHM7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRjb250ZW50W10gPSAnPHA+Jy5UZXh0OjpfKCdUaGUgZXZlbnQgZGV0YWlscyBjb21lIGhlcmUnKS4nLCBsb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yLjwvcD4nOw0KCQkJCX0NCgkJCQkvLyBsb2FkIHRoZSBjb25jZXB0cw0KCQkJCSRjb250ZW50W10gPSBzZWxmOjpsb2FkQ29uY2VwdExheW91dCgpOw0KDQoJCQkJaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicpDQoJCQkJew0KCQkJCQkvLyBhZGQgZHVtbXkgYnV5IGJ1dHRvbg0KCQkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwiPic7DQoJCQkJCSRjb250ZW50W10gPSAnPGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1sYXJnZSB1ay13aWR0aC0xLTEgdWstYnV0dG9uLXN1Y2Nlc3MiIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iYWxlcnQoXCdDYXJ0IG5vdCBhY3RpdmUgaW4gYWRtaW4gYXJlYVwnKTsiPiAnOw0KCQkJCQkkY29udGVudFtdID0gVGV4dDo6XygnVG90YWwnKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc6IDxzcGFuIGlkPSJ0b3RhbCI+MC4wMDwvc3Bhbj4gLSAnOw0KCQkJCQkkY29udGVudFtdID0gVGV4dDo6XygnQnV5IE5vdycpOw0KCQkJCQkkY29udGVudFtdID0gJzwvYnV0dG9uPic7DQoJCQkJCSRjb250ZW50W10gPSAnPC9kaXY+PC9kaXY+PC9kaXY+JzsNCgkJCQl9DQoJCQkJZWxzZWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQkJew0KCQkJCQkvLyB0aGUgcmVhbCBzaG9wcGluZyBjYXJ0IGJ1dHRvbg0KCQkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwiPic7DQoJCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0iY2FydC1hY3RpdmUtYnV0dG9ucyB1ay1idXR0b24tZ3JvdXAgdWstd2lkdGgtMS0xIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPic7DQoJCQkJCSRjb250ZW50W10gPSAnPGEgY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tbGFyZ2UgdWstd2lkdGgtMS00IHVrLWJ1dHRvbi1wcmltYXJ5IiBocmVmPSIjVkRNLXZpZXctY2FydC1ub3ciIGRhdGEtdWstbW9kYWw+PGkgY2xhc3M9InVrLWljb24tZXllIj48L2k+IDxzcGFuIGNsYXNzPSJ1ay1oaWRkZW4tc21hbGwiPic7DQoJCQkJCSRjb250ZW50W10gPSBUZXh0OjpfKCdWaWV3IENhcnQnKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8L3NwYW4+PC9hPic7DQoJCQkJCSRjb250ZW50W10gPSAnPGEgY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tbGFyZ2UgdWstd2lkdGgtMy00IHVrLWJ1dHRvbi1zdWNjZXNzIiBocmVmPSInLiBKb29tbGFfX19kNGM3NjA5OV80YzMyXzQwOGFfODcwMV9kMGE3MjQ0ODRkZmRfX19Qb3dlcjo6XyhbW1tDb21wb25lbnRdXV1IZWxwZXJSb3V0ZTo6Z2V0Q2hlY2tvdXRSb3V0ZSgpKSAuJyI+PHNwYW4gY2xhc3M9IlZETS1jYXJ0LXRvdGFsIj48L3NwYW4+IDxzcGFuIGNsYXNzPSJ1ay1oaWRkZW4tc21hbGwiPic7DQoJCQkJCSRjb250ZW50W10gPSBUZXh0OjpfKCdDaGVjayBPdXQnKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8L3NwYW4+IDxpIGNsYXNzPSJ1ay1pY29uLXNob3BwaW5nLWNhcnQiPjwvaT48L2E+PC9kaXY+JzsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJjYXJ0LWluYWN0aXZlLWJ1dHRvbiI+JzsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8YSBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1sYXJnZSB1ay13aWR0aC0xLTEgdWstYnV0dG9uLXByaW1hcnkiIGhyZWY9IiNWRE0tdmlldy1jYXJ0LW5vdyIgZGF0YS11ay1tb2RhbD48aSBjbGFzcz0idWstaWNvbi1leWUiPjwvaT4gPHNwYW4gY2xhc3M9InVrLWhpZGRlbi1zbWFsbCI+JzsNCgkJCQkJJGNvbnRlbnRbXSA9IFRleHQ6Ol8oJ1ZpZXcgRW1wdHkgQ2FydCcpOw0KCQkJCQkkY29udGVudFtdID0gJzwvc3Bhbj48L2E+PC9kaXY+JzsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj48L2Rpdj48L2Rpdj4nOw0KCQkJCX0NCg0KCQkJCSRjb250ZW50W10gPSAnPC9kaXY+PC9kaXY+PC9kaXY+JzsNCg0KDQoJCQkJaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicpDQoJCQkJew0KCQkJCQkvLyBhZGQgc29tZSBzY3JpcHQ7DQoJCQkJCSRzY3JpcHQgPSBhcnJheSgpOw0KCQkJCQkkc2NyaXB0W10gPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPic7DQoJCQkJCSRzY3JpcHRbXSA9ICd2YXIgdG90YWwgPSB7fTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIGF2YWlsYWJsZSA9IHt9Oyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd2YXIgdGFrZW4gPSB7fTsgdmFyIHRpY2tldHMgPSB7fTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIGNhcGFjaXR5ID0gJy5zZWxmOjokZXZlbnQtPmNhcGFjaXR5Lic7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2pRdWVyeSgiI2V2ZW50TmFtZSIpLnRleHQoalF1ZXJ5KCIjamZvcm1fbmFtZSIpLnZhbCgpKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2pRdWVyeSgiLnNlbGVjdC1idXR0b24iKS5jbGljayhmdW5jdGlvbigpIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIGJ1dHRvbiA9IHRoaXMuaWQuc3BsaXQoIi0iKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIGN1cnJlbnRWYWx1ZSA9IGpRdWVyeSgiIyIrYnV0dG9uWzBdKyItbnVtYmVyIikuZGF0YSgicXR5Iik7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2lmIChidXR0b25bMV0gPT0gInBsdXMiKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBuZXdWYWx1ZSA9IDEgKyArY3VycmVudFZhbHVlOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAodGlja2V0cy5oYXNPd25Qcm9wZXJ0eShidXR0b25bMF0pKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3Rha2VuW2J1dHRvblswXV0gPSBuZXdWYWx1ZTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIHRvdGFsVGFrZW4gPSBzdW0odGFrZW4pOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAoY2FwYWNpdHkgIT0gMCAmJiB0b3RhbFRha2VuID4gY2FwYWNpdHkpIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAnbmV3VmFsdWUgPSBuZXdWYWx1ZSAtIDE7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3Rha2VuW2J1dHRvblswXV0gPSBuZXdWYWx1ZTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnVUlraXQyLm5vdGlmeSgiVGhlIEV2ZW50IElzIEZ1bGwuIiwge3N0YXR1czpcJ3dhcm5pbmdcJ30pOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9fSc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAoYXZhaWxhYmxlLmhhc093blByb3BlcnR5KGJ1dHRvblswXSkgJiYgYXZhaWxhYmxlW2J1dHRvblswXV0gIT0gMCAmJiBuZXdWYWx1ZSA9PSBhdmFpbGFibGVbYnV0dG9uWzBdXSkgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdVSWtpdDIubm90aWZ5KCJUaGlzIE9wdGlvbiBpcyBGdWxsLiIsIHtzdGF0dXM6XCd3YXJuaW5nXCd9KTsgalF1ZXJ5KCIjIitidXR0b25bMF0rIi1wbHVzIikuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnfSc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9IGVsc2UgaWYgKGJ1dHRvblsxXSA9PSAibWludXMiICYmIGN1cnJlbnRWYWx1ZSAhPSAwKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBuZXdWYWx1ZSA9ICtjdXJyZW50VmFsdWUgLSAxOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd0YWtlbltidXR0b25bMF1dID0gbmV3VmFsdWU7IGpRdWVyeSgiIyIrYnV0dG9uWzBdKyItcGx1cyIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30gZWxzZSBpZiAoYnV0dG9uWzFdID09ICJzZWxlY3QiKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBwcmVzc2VkID0galF1ZXJ5KHRoaXMpLmRhdGEoInNlbGVjdGlvbiIpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAocHJlc3NlZCA9PSAxKSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBuZXdWYWx1ZSA9IDE7IGpRdWVyeSh0aGlzKS5kYXRhKCJzZWxlY3Rpb24iLCAyKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnfSBlbHNlIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIG5ld1ZhbHVlID0gMDsgalF1ZXJ5KHRoaXMpLmRhdGEoInNlbGVjdGlvbiIsIDEpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30gZWxzZSB7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBuZXdWYWx1ZSA9IDA7JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30nOw0KCQkJCQkkc2NyaXB0W10gPSAnaWYoalF1ZXJ5KHRoaXMpLmRhdGEoIm9ubHkiKSkgeyBvbmx5U3dpdGNoKHRoaXMsbmV3VmFsdWUpOyB9JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3RvdGFsU2V0dGVyKHRoaXMsbmV3VmFsdWUpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdpZiAoYnV0dG9uWzFdID09ICJtaW51cyIgfHwgYnV0dG9uWzFdID09ICJwbHVzIikgeyc7DQoJCQkJCSRzY3JpcHRbXSA9ICdqUXVlcnkoIiMiK2J1dHRvblswXSsiLW51bWJlciIpLmRhdGEoInF0eSIsIG5ld1ZhbHVlKTsnOw0KCQkJCQkkc2NyaXB0W10gPSAnaWYgKG5ld1ZhbHVlID09IDApIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAnbmV3VmFsdWVIVE1MID0gMDsnOw0KCQkJCQkkc2NyaXB0W10gPSAnfSBlbHNlIHsnOw0KCQkJCQkkc2NyaXB0W10gPSAnbmV3VmFsdWVIVE1MID0gXCc8c3BhbiBjbGFzcz0idWstYmFkZ2UgdWstYmFkZ2Utbm90aWZpY2F0aW9uIHVrLWJhZGdlLXN1Y2Nlc3MiPlwnK25ld1ZhbHVlK1wnPC9zcGFuPlwnOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9JzsNCgkJCQkJJHNjcmlwdFtdID0gJ2pRdWVyeSgiIyIrYnV0dG9uWzBdKyItbnVtYmVyIikuaHRtbChuZXdWYWx1ZUhUTUwpOyc7DQoJCQkJCSRzY3JpcHRbXSA9ICd9JzsNCgkJCQkJJHNjcmlwdFtdID0gJ30pO30pOyc7DQoJCQkJCSRzY3JpcHRbXSA9IGltcGxvZGUoJycsc2VsZjo6JGJ1dHRvblNjcmlwdCk7DQoJCQkJCSRzY3JpcHRbXSA9ICc8L3NjcmlwdD4nOw0KCQkJCQkvLyBsb2FkIHRoZSBkaXNwbGF5DQoJCQkJCXJldHVybiBpbXBsb2RlKCcnLCRjb250ZW50KS5pbXBsb2RlKCcnLCRzY3JpcHQpOw0KCQkJCX0NCgkJCQllbHNlaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJCQl7DQoJCQkJCS8vIGFkZCBzb21lIHNjcmlwdDsNCgkJCQkJJHNjcmlwdCA9IGFycmF5KCk7DQoJCQkJCSRzY3JpcHRbXSA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBhdmFpbGFibGUgPSB7fTsnOw0KCQkJCQkkc2NyaXB0W10gPSAndmFyIHRha2VuID0ge307IHZhciB0aWNrZXRzID0ge307JzsNCgkJCQkJJHNjcmlwdFtdID0gJ3ZhciBjYXBhY2l0eSA9ICcuc2VsZjo6JGV2ZW50LT5jYXBhY2l0eS4nOyc7DQoJCQkJCSRzY3JpcHRbXSA9IGltcGxvZGUoJycsc2VsZjo6JGJ1dHRvblNjcmlwdCk7DQoJCQkJCSRzY3JpcHRbXSA9ICc8L3NjcmlwdD4nOw0KDQoJCQkJCS8vIGxvYWQgdGhlIGRpc3BsYXkNCgkJCQkJJGNvbnRlbnQgPSBpbXBsb2RlKCcnLCRjb250ZW50KS5pbXBsb2RlKCcnLCRzY3JpcHQpOw0KDQoJCQkJCS8vIGdldCB0aGUgZG9jdW1lbnRzIGZvciBkb3dubG9hZHMNCgkJCQkJaWYgKCRkb3dubG9hZHMgPSBzZWxmOjpnZXRFdmVudERvd25sb2FkcygpKQ0KCQkJCQl7DQoJCQkJCQkkY29udGVudCA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJGRvd25sb2FkcyksIGFycmF5X3ZhbHVlcygkZG93bmxvYWRzKSwgJGNvbnRlbnQpOw0KCQkJCQkJLy8gcmVtb3ZlIGxpbmtzDQoJCQkJCQlmb3JlYWNoICgkZG93bmxvYWRzIGFzICRrZXkgPT4gJGxpbmspDQoJCQkJCQl7DQoJCQkJCQkJaWYgKHN0cnBvcygka2V5LCAnW0RPQ0xJTks9JykgIT09IGZhbHNlKQ0KCQkJCQkJCXsNCgkJCQkJCQkJdW5zZXQoJGRvd25sb2Fkc1ska2V5XSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoNCgkJCQkJLy8gc2V0IGV2ZW50IHBvc3Rlcg0KCQkJCQkkcG9zdGVyID0gc2VsZjo6Z2V0RXZlbnRJbWFnZSgncG9zdGVyX2ltYWdlJyk7DQoJCQkJCS8vIHNldCBldmVudCBpbWFnZXMNCgkJCQkJJGV2ZW50SW1hZ2VzID0gc2VsZjo6Z2V0RXZlbnRJbWFnZSgnZXZlbnRfaW1hZ2VzJywgMik7DQoJCQkJCSRldmVudEltYWdlV2lkdGggPSBzZWxmOjokcGFyYW1zLT5nZXQoJ2V2ZW50X3dpZHRoJywgODAwKTsNCgkJCQkJJGV2ZW50SW1hZ2VIZWlnaHQgPSAgc2VsZjo6JHBhcmFtcy0+Z2V0KCdldmVudF9oZWlnaHQnLCA2MDApOw0KCQkJCQkNCgkJCQkJLy8gbm93IHNldCB0aGUgc2VsZWN0aW9uIG9ubHkgc3dpdGNoZXMgICgoJGJ1bmRsZSAhPSAwICYmICRidW5kbGUgPT0gJG90aGVyQnVuZGxlKSB8fCAoJGJ1bmRsZSA9PSAkb3RoZXJCdW5kbGUgJiYgJGNvbmNlcHQgPT0gJG90aGVyQ29uY2VwdCkpIDwtLS0gdGhlIEphdmFTY3JpcHQgbG9naWMNCgkJCQkJZm9yZWFjaCAoc2VsZjo6JGRpc2FibGVCdXR0b25zQ2hlY2sgYXMgJGJ1dHRvbklkID0+ICRhdCkNCgkJCQkJew0KCQkJCQkJaWYgKGlzc2V0KHNlbGY6OiRjb25jZXB0U3dpdGNoT25seVskYXRbJ2NvbmNlcHQnXV0pKQ0KCQkJCQkJew0KCQkJCQkJCWZvcmVhY2ggKHNlbGY6OiRjb25jZXB0U3dpdGNoT25seVskYXRbJ2NvbmNlcHQnXV0gYXMgJG5yID0+ICRidWNrZXQpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoKChpbnQpICRhdFsnYnVuZGxlJ10gPiAwICYmIChpbnQpICRhdFsnYnVuZGxlJ10gPT0gKGludCkgJGJ1Y2tldFsnYnVuZGxlJ10pKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlzZWxmOjokZGlzYWJsZUJ1dHRvbnNbJyMjIycuJGJ1dHRvbklkLicjIyMnXSA9ICdkaXNhYmxlZCc7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQlpZiAoaXNzZXQoc2VsZjo6JGJ1bmRsZVN3aXRjaE9ubHlbJGF0WydidW5kbGUnXV0pKQ0KCQkJCQkJew0KCQkJCQkJCWZvcmVhY2ggKHNlbGY6OiRidW5kbGVTd2l0Y2hPbmx5WyRhdFsnYnVuZGxlJ11dIGFzICRuciA9PiAkYnVja2V0KQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKChpbnQpICRhdFsnYnVuZGxlJ10gPiAwIHx8IChpbnQpICRhdFsnY29uY2VwdCddID09IChpbnQpICRidWNrZXRbJ2NvbmNlcHQnXSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJc2VsZjo6JGRpc2FibGVCdXR0b25zWycjIyMnLiRidXR0b25JZC4nIyMjJ10gPSAnZGlzYWJsZWQnOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIHVwZGF0ZSB0aGUgZGlzYWJsZWQgYnV0dG9ucw0KCQkJCQkkY29udGVudCA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoc2VsZjo6JGRpc2FibGVCdXR0b25zKSwgYXJyYXlfdmFsdWVzKHNlbGY6OiRkaXNhYmxlQnV0dG9ucyksICRjb250ZW50KTsNCg0KCQkJCQkvLyBub3cgbGV0cyBhZGQgdGhlIHBvc3RlciBldmVudCBpbWFnZXMgYW5kIHRoZSBkb3dubG9hZCBidXR0b25zIGlmIGZvdW5kDQoJCQkJCSR0YWJzID0gZmFsc2U7DQoJCQkJCWlmICgkcG9zdGVyIHx8IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkb3dubG9hZHMpKQ0KCQkJCQl7DQoJCQkJCQlpZiAoJHBvc3RlciAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZG93bmxvYWRzKSkNCgkJCQkJCXsNCgkJCQkJCQlpZiAoY291bnQoJGRvd25sb2FkcykgPT0gMSkNCgkJCQkJCQl7DQoJCQkJCQkJCSR0YWJOYW1lMiA9IFRleHQ6Ol8oJ1Bvc3RlciAmIERvd25sb2FkJyk7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCSR0YWJOYW1lMiA9IFRleHQ6Ol8oJ1Bvc3RlciAmIERvd25sb2FkcycpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWVsc2VpZiAoJHBvc3RlcikNCgkJCQkJCXsNCgkJCQkJCQkkdGFiTmFtZTIgPSBUZXh0OjpfKCdQb3N0ZXInKTsNCgkJCQkJCX0NCgkJCQkJCWVsc2VpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGRvd25sb2FkcykpDQoJCQkJCQl7DQoJCQkJCQkJaWYgKGNvdW50KCRkb3dubG9hZHMpID09IDEpDQoJCQkJCQkJew0KCQkJCQkJCQkkdGFiTmFtZTIgPSBUZXh0OjpfKCdEb3dubG9hZCcpOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlDQoJCQkJCQkJew0KCQkJCQkJCQkkdGFiTmFtZTIgPSBUZXh0OjpfKCdEb3dubG9hZHMnKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQkkdGFicyA9IHRydWU7DQoJCQkJCX0NCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudEltYWdlcykpDQoJCQkJCXsNCgkJCQkJCWlmIChjb3VudCgkZXZlbnRJbWFnZXMpID09IDEpDQoJCQkJCQl7DQoJCQkJCQkJJHRhYk5hbWUzID0gVGV4dDo6XygnRXZlbnQgSW1hZ2UnKTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkkdGFiTmFtZTMgPSBUZXh0OjpfKCdFdmVudCBJbWFnZXMnKTsNCgkJCQkJCX0NCgkJCQkJCSR0YWJzID0gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBidWlsZCB0YWJzDQoJCQkJCWlmICgkdGFicykNCgkJCQkJew0KCQkJCQkJJHRhYkNvbnRyb2xJRCA9IG1kNShzZWxmOjokZXZlbnQtPm5hbWUuc2VsZjo6JGV2ZW50LT5pZCk7DQoJCQkJCQkkYm9keSA9IGFycmF5KCk7DQoJCQkJCQkkYm9keVtdID0gJzx1bCBjbGFzcz0idWstc3VibmF2IHVrLXN1Ym5hdi1waWxsIiBkYXRhLXVrLXN3aXRjaGVyPSJ7Y29ubmVjdDpcJyMnLiR0YWJDb250cm9sSUQuJ1wnfSI+JzsNCgkJCQkJCSRib2R5W10gPSAnPGxpPjxhIGhyZWY9IiI+Jy4gVGV4dDo6XygnUmVnaXN0ZXInKSAuJzwvYT48L2xpPic7DQoJCQkJCQlpZiAoaXNzZXQoJHRhYk5hbWUyKSkNCgkJCQkJCXsNCgkJCQkJCQkkYm9keVtdID0gJzxsaT48YSBocmVmPSIiPicuICR0YWJOYW1lMiAuJzwvYT48L2xpPic7DQoJCQkJCQl9DQoJCQkJCQlpZiAoaXNzZXQoJHRhYk5hbWUzKSkNCgkJCQkJCXsNCgkJCQkJCQkkYm9keVtdID0gJzxsaT48YSBocmVmPSIiPicuICR0YWJOYW1lMyAuJzwvYT48L2xpPic7DQoJCQkJCQl9DQoJCQkJCQkkYm9keVtdID0gJzwvdWw+JzsNCg0KCQkJCQkJJGJvZHlbXSA9ICc8dWwgaWQ9IicuJHRhYkNvbnRyb2xJRC4nIiBjbGFzcz0idWstc3dpdGNoZXIiPic7DQoJCQkJCQkkYm9keVtdID0gJzxsaT4nIC4gJGNvbnRlbnQgLiAnPC9saT4nOw0KCQkJCQkJaWYgKGlzc2V0KCR0YWJOYW1lMikpDQoJCQkJCQl7DQoJCQkJCQkJJGJvZHlbXSA9ICc8bGk+JzsNCgkJCQkJCQlpZiAoJHBvc3RlciAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZG93bmxvYWRzKSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRib2R5W10gPSAnPGRpdiBjbGFzcz0idWstZ3JpZCI+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tNC01Ij4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzxkaXYgY2xhc3M9InVrLXBhbmVsIj4nIC4gJHBvc3RlciAuICc8L2Rpdj4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzwvZGl2Pic7DQoJCQkJCQkJCSRib2R5W10gPSAnPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLTEtNSI+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1wYW5lbCI+JyAuIGltcGxvZGUoJycsICRkb3dubG9hZHMpIC4gJzwvZGl2Pic7DQoJCQkJCQkJCSRib2R5W10gPSAnPC9kaXY+JzsNCgkJCQkJCQkJJGJvZHlbXSA9ICc8L2Rpdj4nOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlaWYgKCRwb3N0ZXIpDQoJCQkJCQkJew0KCQkJCQkJCQkkYm9keVtdID0gJHBvc3RlcjsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZG93bmxvYWRzKSkNCgkJCQkJCQl7DQoJCQkJCQkJCSRib2R5W10gPSBpbXBsb2RlKCcnLCAkZG93bmxvYWRzKTsNCgkJCQkJCQl9DQoJCQkJCQkJJGJvZHlbXSA9ICc8L2xpPic7DQoJCQkJCQl9DQoJCQkJCQlpZiAoaXNzZXQoJHRhYk5hbWUzKSkNCgkJCQkJCXsNCgkJCQkJCQkkYm9keVtdID0gJzxsaT4nOw0KCQkJCQkJCSRib2R5W10gPSAnPGRpdiBjbGFzcz0idWstZ3JpZCB1ay1ncmlkLXdpZHRoLW1lZGl1bS0xLTQiIGRhdGEtdWstZ3JpZC1tYXJnaW4+JzsNCgkJCQkJCQlmb3JlYWNoICgkZXZlbnRJbWFnZXMgYXMgJHZhbCkNCgkJCQkJCQl7DQoJCQkJCQkJCSRib2R5W10gPSAnPGRpdj4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzxhIGhyZWY9IicgLiAkdmFsWyd1cmwnXSAuICciIGRhdGEtdWstbGlnaHRib3g9Intncm91cDpcJ2dyb3VwLScgLiAkdGFiQ29udHJvbElEIC4gJ1wnfSIgdGl0bGU9IicgLiAkdmFsWyduYW1lJ10gLiAnIj4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzxpbWcgc3JjPSInIC4gJHZhbFsndXJsJ10gLiAnIiBhbHQ9IiIgd2lkdGg9IicgLiAkZXZlbnRJbWFnZVdpZHRoIC4gJyIgaGVpZ2h0PSInIC4gJGV2ZW50SW1hZ2VIZWlnaHQgLiAnIj4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzwvYT4nOw0KCQkJCQkJCQkkYm9keVtdID0gJzwvZGl2Pic7DQoJCQkJCQkJfQ0KCQkJCQkJCSRib2R5W10gPSAnPC9kaXY+JzsNCgkJCQkJCQkkYm9keVtdID0gJzwvbGk+JzsNCgkJCQkJCX0NCgkJCQkJCSRib2R5W10gPSAnPC91bD4nOw0KCQkJCQkJLy8gcmV0dXJuIGJvZHkNCgkJCQkJCXJldHVybiBpbXBsb2RlKCcnLCRib2R5KTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm4gJGNvbnRlbnQ7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnb3B0aW9ucycgJiYgJG9wdGlvbnMgPSBzZWxmOjpnZXRFdmVudE9wdGlvbnMoKSkNCgkJCXsNCgkJCQlyZXR1cm4gJG9wdGlvbnM7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEByZXR1cm4gc3RyaW5nIGltYWdlIGxpbmsNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50SW1hZ2UoJHRhcmdldCwgJHR5cGUgPSAxLCAkbmFtZSA9IG51bGwsICRjbGFzcyA9ICd1ay1tYXJnaW4nKQ0KCXsNCgkJLy8gZ2V0IGltYWdlIGlmIG5vdCBhdmFpbGFibGUNCgkJaWYgKCghaXNzZXQoc2VsZjo6JGV2ZW50LT4kdGFyZ2V0KSB8fCAhU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT4kdGFyZ2V0KSkgJiYgc2VsZjo6JGV2ZW50LT5pZCA+IDApDQoJCXsNCgkJCXNlbGY6OiRldmVudC0+JHRhcmdldCA9IHNlbGY6OmRlY3J5cHRTdHJpbmcoc2VsZjo6Z2V0VmFyKCdldmVudCcsIHNlbGY6OiRldmVudC0+aWQsICdpZCcsICR0YXJnZXQpKTsNCgkJfQ0KCQkvLyBjaGVjayB0aGF0IGltYWdlIGlzIGpzb24NCgkJaWYgKCR0eXBlID09IDIgJiYgc2VsZjo6JGV2ZW50LT4kdGFyZ2V0ICYmIFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudC0+JHRhcmdldCkpDQoJCXsNCgkJCSRzZXRGaWxlTmFtZSA9IGZhbHNlOw0KCQkJaWYgKCEkbmFtZSkNCgkJCXsNCgkJCQkkc2V0RmlsZU5hbWUgPSB0cnVlOw0KCQkJfQ0KCQkJLy8gYnVpbGQgYW4gYXJyYXkgb2YgaW1hZ2VzDQoJCQkkdG1wID0ganNvbl9kZWNvZGUoc2VsZjo6JGV2ZW50LT4kdGFyZ2V0LCB0cnVlKTsNCgkJCWlmICghU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRtcCkpDQoJCQl7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkdG1wIGFzICRmaWxlTmFtZSkNCgkJCXsNCgkJCQkvLyBidWlsZCB0aGUgYXJyYXkNCgkJCQlpZiAoc3RycG9zKCRmaWxlTmFtZSwgJ18nKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsICRmaWxlTmFtZSk7DQoJCQkJCSRhY3R1YWxOYW1lID0gc2VsZjo6JGV2ZW50LT5uYW1lOw0KCQkJCQlpZiAoJHNldEZpbGVOYW1lICYmIHN0cnBvcygkZmlsZU5hbWUsICdWRE0nKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCSRmaWxlTmFtZUFycmF5ID0gZXhwbG9kZSgnVkRNJywgJGZpbGVOYW1lKTsNCgkJCQkJCWlmIChpc3NldCgkZmlsZU5hbWVBcnJheVsxXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGZpbGVOYW1lQXJyYXlbMV0pKQ0KCQkJCQkJew0KCQkJCQkJCSRhY3R1YWxOYW1lID0gJGZpbGVOYW1lQXJyYXlbMV07DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCQl7DQoJCQkJCQlpZiAoJHNldEZpbGVOYW1lKQ0KCQkJCQkJew0KCQkJCQkJCSRuYW1lID0gJGFjdHVhbE5hbWU7DQoJCQkJCQl9DQoJCQkJCQkvLyBzZXQgYmFzaWMgYnVja2V0IGRldGFpbHMNCgkJCQkJCSR0bXBCdWNrZXQgPSBhcnJheSgpOw0KCQkJCQkJJHRtcEJ1Y2tldFsnbGluayddID0gJzxpbWcgY2xhc3M9IicuJGNsYXNzLiciIHNyYz0iJy5zZWxmOjokZmlsZWxpbmsuJGZpbGVOYW1lLicuJy4kZXh0ZW50aW9uWzJdLiciIGFsdD0iJy4gJG5hbWUgLiciPic7DQoJCQkJCQkkdG1wQnVja2V0Wyd1cmwnXSA9IHNlbGY6OiRmaWxlbGluay4kZmlsZU5hbWUuJy4nLiRleHRlbnRpb25bMl07DQoJCQkJCQkkdG1wQnVja2V0WyduYW1lJ10gPSAgJG5hbWU7DQoJCQkJCQkvLyBhZGQgdG8gYnVja2V0DQoJCQkJCQkkYnVja2V0W10gPSAkdG1wQnVja2V0Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJew0KCQkJCXJldHVybiAkYnVja2V0Ow0KCQkJfQ0KCQl9DQoJCS8vIGNoZWNrIHRoYXQgaW1hZ2UgaXMgb25seSBhIHN0cmluZw0KCQllbHNlaWYgKCR0eXBlID09IDEgJiYgaXNzZXQoc2VsZjo6JGV2ZW50LT4kdGFyZ2V0KSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPiR0YXJnZXQpKQ0KCQl7DQoJCQkvLyByZXR1cm4gb25lIGltYWdlIGxpbmsNCgkJCWlmIChzdHJwb3Moc2VsZjo6JGV2ZW50LT4kdGFyZ2V0LCAnXycpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsIHNlbGY6OiRldmVudC0+JHRhcmdldCk7DQoJCQkJJGFjdHVhbE5hbWUgPSBzZWxmOjokZXZlbnQtPm5hbWU7DQoJCQkJaWYgKHN0cnBvcyhzZWxmOjokZXZlbnQtPiR0YXJnZXQsICdWRE0nKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQkkZmlsZU5hbWVBcnJheSA9IGV4cGxvZGUoJ1ZETScsIHNlbGY6OiRldmVudC0+JHRhcmdldCk7DQoJCQkJCWlmIChpc3NldCgkZmlsZU5hbWVBcnJheVsxXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGZpbGVOYW1lQXJyYXlbMV0pKQ0KCQkJCQl7DQoJCQkJCQkkYWN0dWFsTmFtZSA9ICRmaWxlTmFtZUFycmF5WzFdOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChpc3NldCgkZXh0ZW50aW9uWzJdKSkNCgkJCQl7DQoJCQkJCWlmICghJG5hbWUpDQoJCQkJCXsNCgkJCQkJCSRuYW1lID0gJGFjdHVhbE5hbWU7DQoJCQkJCX0NCgkJCQkJcmV0dXJuICc8aW1nIGNsYXNzPSInLiRjbGFzcy4nIiBzcmM9Iicuc2VsZjo6JGZpbGVsaW5rLnNlbGY6OiRldmVudC0+JHRhcmdldC4nLicuJGV4dGVudGlvblsyXS4nIiBhbHQ9IicuICRuYW1lIC4nIj4nOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogQHJldHVybiBhcnJheSBvZiBsaW5rcw0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RXZlbnREb3dubG9hZHMoKQ0KCXsNCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+ZXZlbnRfZG9jdW1lbnRzKSkNCgkJew0KCQkJLy8gZmlyc3QgbWFrZSBzdXJlIGl0IGlzIEpzb24gdmFsdWVzDQoJCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5ldmVudF9kb2N1bWVudHMpKQ0KCQkJew0KCQkJCXNlbGY6OiRldmVudC0+ZXZlbnRfZG9jdW1lbnRzID0ganNvbl9kZWNvZGUoc2VsZjo6JGV2ZW50LT5ldmVudF9kb2N1bWVudHMsIHRydWUpOw0KCQkJfQ0KCQkJLy8gbm93IGNoZWNrIGlmIGl0IGlzIGFuIGFycmF5DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5ldmVudF9kb2N1bWVudHMpKQ0KCQkJew0KCQkJCSRzZXNzaW9uVG9rZW4gPSBKb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCk7DQoJCQkJJGRvbWFpbiA9IFVyaTo6cm9vdCgpOw0KCQkJCSRkb3dubG9hZHMgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2ggKHNlbGY6OiRldmVudC0+ZXZlbnRfZG9jdW1lbnRzIGFzICRmaWxlTmFtZSkNCgkJCQl7DQoJCQkJCS8vIG1ha2Ugc3VyZSB0aGlzIGEgY29ycmVjdCBmaWxlIG5hbWUNCgkJCQkJaWYgKHN0cnBvcygkZmlsZU5hbWUsICdfJykgIT09IGZhbHNlICYmIHN0cnBvcygkZmlsZU5hbWUsICdWRE0nKSAhPT0gZmFsc2UpDQoJCQkJCXsNCgkJCQkJCSRmaWxlQXJyYXkgPSBleHBsb2RlKCdfJywgJGZpbGVOYW1lKTsNCgkJCQkJCSRuYW1lQXJyYXkgPSBleHBsb2RlKCdWRE0nLCAkZmlsZU5hbWUpOw0KCQkJCQkJLy8gbW9yZSBjaGVja3MNCgkJCQkJCWlmIChpc3NldCgkbmFtZUFycmF5WzFdKSAmJiBpc3NldCgkZmlsZUFycmF5WzJdKSkNCgkJCQkJCXsNCgkJCQkJCQlpZiAoc2VsZjo6JGJhc2lja2V5KQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gR2V0IHRoZSBlbmNyeXB0aW9uIG9iamVjdC4NCgkJCQkJCQkJJGxvY2FsRmlsZSA9IHNlbGY6OmJhc2U2NF91cmxlbmNvZGUoc2VsZjo6JGxvY2tlci0+ZW5jcnlwdFN0cmluZygkZmlsZU5hbWUpKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gY2FuIG5vdCBnZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0IHNvIG9ubHkgYmFzZTY0IGVuY29kZQ0KCQkJCQkJCQkkbG9jYWxGaWxlID0gc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkZmlsZU5hbWUsIHRydWUpOw0KCQkJCQkJCX0NCgkJCQkJCQkvLyBidWlsZCBsaW5rIA0KCQkJCQkJCSRsaW5rID0gJGRvbWFpbiAuICdpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1kb3dubG9hZC5kb2N1bWVudCZmaWxlPScgLiAkbG9jYWxGaWxlIC4gJyZ0b2tlbj0nIC4gJHNlc3Npb25Ub2tlbjsNCgkJCQkJCQkvLyBidWlsZCB0aGUgZmlsZSBuYW1lDQoJCQkJCQkJJGZpbGVOYW1lID0gJG5hbWVBcnJheVsxXSAuICcuJyAuICRmaWxlQXJyYXlbMl07DQoJCQkJCQkJJGRvd25sb2Fkc1snW0RPQ0xJTks9Jy4kZmlsZU5hbWUuJ10nXSA9ICc8YSBocmVmPSInIC4gJGxpbmsgLiAnIiB0eXRsZT0iICcgLiBUZXh0OjpfKCdEb3dubG9hZCcpIC4gJyI+JyAuICRmaWxlTmFtZSAuICc8L2E+JzsNCgkJCQkJCQkkZG93bmxvYWRzWydbRE9DQlVUVE9OPScuJGZpbGVOYW1lLiddJ10gPSAnPGEgaHJlZj0iJyAuICRsaW5rIC4gJyIgY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tc3VjY2VzcyB1ay1tYXJnaW4tc21hbGwtYm90dG9tIHVrLXdpZHRoLTEtMSI+PGkgY2xhc3M9InVrLWljb24tZG93bmxvYWQiPjwvaT4gJyAuIFRleHQ6Ol8oJ0Rvd25sb2FkJykgLiAnICcgLiAkZmlsZU5hbWUgLiAnPC9hPic7DQoJCQkJCQl9IA0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZG93bmxvYWRzKSkNCgkJCQl7DQoJCQkJCXJldHVybiAkZG93bmxvYWRzOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICR0YWJsZQ0KCSAqIEBwYXJhbSAkdmFsdWUNCgkgKiBAcmV0dXJuIGJvb2x8bWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWRFZGl0QnV0dG9uKCR0YWJsZSwgJGlkKQ0KCXsJCQ0KCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiR1c2VyKSkNCgkJew0KCQkJLy8gc2V0IGN1cnJlbnQgdXNlcg0KCQkJc2VsZjo6JHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCX0NCgkJLy8gb25seSBsb2FkIHRvIGFkbWluIGFuZCBvcmdhbml6ZXIgd2hvIG93biB0aGlzIGl0ZW0NCgkJaWYgKHNlbGY6Omhhc0FjY2VzcygkaWQsIHNlbGY6OiR1c2VyLT5pZCwgJHRhYmxlKSkNCgkJew0KCQkJaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicpDQoJCQl7DQoJCQkJJHJlZiA9IChpc3NldChzZWxmOjokZXZlbnQtPmlkKSAmJiBzZWxmOjokZXZlbnQtPmlkID4gMCkgPyAiJnJlZj1ldmVudCZyZWZpZD0iLnNlbGY6OiRldmVudC0+aWQgOiAnJzsNCgkJCQkkZWRpdCA9ICJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdmlldz0iLiR0YWJsZS4iJnRhc2s9Ii4kdGFibGUuIi5lZGl0JmlkPSIuJGlkLiRyZWY7DQoJCQkJcmV0dXJuICcgPGEgb25jbGljaz0iVUlraXQyLm1vZGFsLmNvbmZpcm0oXCcnLlRleHQ6Ol8oJ0FsbCB1bnNhdmVkIHdvcmsgd2lsbCBiZSBsb3N0LCBhcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29udGludWU/JykuJ1wnLCBmdW5jdGlvbigpeyB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwnJy4kZWRpdC4nXCcgfSkiICBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIGNsYXNzPSJ1ay1pY29uLXBlbmNpbCB1ay1oaWRkZW4iPjwvYT4nOw0KCQkJfQ0KCQkJZWxzZWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQl7DQoJCQkJJHJlZiA9IChpc3NldChzZWxmOjokZXZlbnQtPmlkKSAmJiBzZWxmOjokZXZlbnQtPmlkID4gMCkgPyAiJnJlZj1yZWdpc3RyeSZyZWZpZD0iLnNlbGY6OiRldmVudC0+aWQgOiAnJzsNCgkJCQkkZWRpdCA9ICJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdmlldz0iLiR0YWJsZS4iJnRhc2s9Ii4kdGFibGUuIi5lZGl0JmlkPSIuJGlkLiRyZWY7DQoJCQkJcmV0dXJuICcgPGEgaHJlZj0iJy4kZWRpdC4nIiBjbGFzcz0idWstaWNvbi1wZW5jaWwgdWstaGlkZGVuIj48L2E+JzsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICR0YWJsZQ0KCSAqIEBwYXJhbSAkdmFsdWUNCgkgKiBAcmV0dXJuIGJvb2x8bWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWROYW1lKCR0YWJsZSwkdmFsdWUpDQoJew0KCQlpZiAoJ2V2ZW50JyA9PT0gJHRhYmxlICYmIGlzc2V0KHNlbGY6OiRldmVudC0+bmFtZSkpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokZXZlbnQtPm5hbWU7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OmdldFZhcigkdGFibGUsKGludCkgJHZhbHVlLCdpZCcsJ25hbWUnKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGxvYWRPcnBoYW5WYXJpYXRpb25zKCkNCgl7DQoJCSRjb250ZW50ID0gYXJyYXkoKTsNCgkJLy8gaXNvbGF0ZSB0aGUgb3JwaGFuIHZhcmlhdGlvbnMNCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+Y29zdFsnY29uY2VwdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkpDQoJCXsNCgkJCSRhbm90aGVyQ29uY2VwdCA9IGFycmF5KCk7DQoJCQkkdmFyaWF0aW9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoIChzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSBhcyAka2V5ID0+ICRjb25jZXB0KQ0KCQkJew0KCQkJCWlmICghaW5fYXJyYXkoJGNvbmNlcHQsc2VsZjo6JGNvbmNlcHRzKSkNCgkJCQl7DQoJCQkJCWlmIChpc19udW1lcmljKCRjb25jZXB0KSkNCgkJCQkJew0KCQkJCQkJLy8gYW5vdGhlciBjb25jZXB0DQoJCQkJCQkkYW5vdGhlckNvbmNlcHRbJGNvbmNlcHRdID0gJGNvbmNlcHQ7DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkvLyB0b3RhbCBvcnBoYW4NCgkJCQkJCSR2YXJpYXRpb25zW3NlbGY6OiRldmVudC0+Y29zdFsndmFyaWF0aW9uJ11bJGtleV1dID0gJGtleTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIGZpcnN0IGxvYWQgdGhlIG90aGVyIGNvbnNlcHRzICh0aGF0IGhhdmUgbm8gZGF0ZSAtIHRhcmdldCB3aG9sZSBldmVudCkNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYW5vdGhlckNvbmNlcHQpKQ0KCQkJew0KCQkJCWZvcmVhY2ggKCRhbm90aGVyQ29uY2VwdCBhcyAkY29uY2VwdCkNCgkJCQl7DQoJCQkJCS8vIGFub3RoZXIgY29uY2VwdA0KCQkJCQlzZWxmOjokY29uY2VwdEhUTUxbc2VsZjo6JGV2ZW50LT5pZC4nXycuJGNvbmNlcHQuJ19fMCddID0gc2VsZjo6YnVpbGRDb25jZXB0KCRjb25jZXB0LHNlbGY6OiRldmVudC0+aWQuJ18nLiRjb25jZXB0LidfXzAnKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBub3cgbG9hZCB0aGUgb3JwaGFuIHZhcmlhdGlvbnMgKHRoYXQgaGF2ZSBubyBkYXRlIG9yIGNvbmNlcHQgLSB0YXJnZXQgd2hvbGUgZXZlbnQpDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHZhcmlhdGlvbnMpKQ0KCQkJew0KCQkJCSRwcmljZSA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHZhcmlhdGlvbnMgYXMgJHZhcmlhdGlvbiA9PiAka2V5KQ0KCQkJCXsNCgkJCQkJLy8gYW5vdGhlciB2YXJpYXRpb24gYnV0dG9uDQoJCQkJCWlmIChjb3VudCgkcHJpY2UpID4gMiAmJiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpKQ0KCQkJCQl7DQoJCQkJCQkkcHJpY2VbXSA9ICc8YnIgLz4nOw0KCQkJCQl9DQoJCQkJCWlmICgkYnV0dG9uID0gc2VsZjo6c2V0QnV5QnV0dG9ucygka2V5KSkNCgkJCQkJew0KCQkJCQkJJHByaWNlW10gPSAkYnV0dG9uOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJCQl7DQoJCQkJCSRjb250ZW50ID0gYXJyYXkoKTsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIj48ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMy01Ij48L2Rpdj48ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMi01Ij4nOw0KCQkJCQkkY29udGVudFtdID0gaW1wbG9kZSgnJywkcHJpY2UpOw0KCQkJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2Pic7DQoNCgkJCQkJLy8gcmV0dXJuIHRoZSBvcnBoYW4gc3R1ZmYgdG8gYSBiZWxvbmcgKFRPRE8gLSB0aGlzIGlzIG5vdCBpZGVhbCkNCgkJCQkJc2VsZjo6JGNvbmNlcHRIVE1MW3NlbGY6OiRldmVudC0+aWQuJ185OTk5OTk5OTlfXzAnXSA9IGltcGxvZGUoJycsJGNvbnRlbnQpOw0KCQkJCX0NCgkJCQllbHNlaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudE9wdGlvbnNbJ29wdGlvbnMnXVtzZWxmOjokZXZlbnQtPmlkLidfOTk5OTk5OTk5X18wJ10gPSAkcHJpY2U7DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRPcHRpb25zWydvcHRpb25zJ11bc2VsZjo6JGV2ZW50LT5pZC4nXzk5OTk5OTk5OV9fMCddKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCAoc2VsZjo6JGV2ZW50T3B0aW9uc1snb3B0aW9ucyddW3NlbGY6OiRldmVudC0+aWQuJ185OTk5OTk5OTlfXzAnXSBhcyAkbnIgPT4gJiRjb3N0aW5nKQ0KCQkJCQkJew0KCQkJCQkJCSRjb3N0aW5nWyduYW1lJ10gPSBzZWxmOjpsb2FkTmFtZSgnZXZlbnQnLHNlbGY6OiRldmVudC0+aWQpIC4gJyAoJyAuJGNvc3RpbmdbJ25hbWUnXSAuJyknOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRjb25jZXB0cw0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBsb2FkQ29uY2VwdExheW91dCgpDQoJew0KCQkkY29udGVudCA9IGFycmF5KCk7DQoJCSRjb25jZXB0cyA9IHNlbGY6OmdldENvbmNlcHRzSFRNTCgpOw0KCQkvLyBjaGVjayBsYXlvdXQgb3B0aW9uDQoJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlciddKSB8fCAhU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlciddKSkNCgkJew0KCQkJLy8gbG9hZCBkZWZhdWx0IGxheW91dA0KCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGRhdGEtdWstZ3JpZC1tYXJnaW49IiIgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstbWFyZ2luLXNtYWxsIHVrLXBhbmVsLWhvdmVyIj4nOw0KCQkJJGNvbnRlbnRbXSA9IGltcGxvZGUoJzwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstbWFyZ2luLXNtYWxsIHVrLXBhbmVsLWhvdmVyIj4nLCRjb25jZXB0cyk7DQoJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoJCX0NCgkJZWxzZWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRCdWlsZGVyWydidW5kbGVyJ10pKQ0KCQl7DQoJCQkvLyBsb2FkIGluIGJ1bmRsZXMgbGF5b3V0DQoJCQlmb3JlYWNoIChzZWxmOjokZXZlbnRCdWlsZGVyWydidW5kbGVyJ10gYXMgJGJ1bmRsZSA9PiAkYXJyYXkpDQoJCQl7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGRhdGEtdWstZ3JpZC1tYXJnaW49IiIgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstbWFyZ2luLXNtYWxsIHVrLXBhbmVsLWhvdmVyIj4nOw0KCQkJCSRlZGl0ID0gc2VsZjo6bG9hZEVkaXRCdXR0b24oJ2J1bmRsZScsICRidW5kbGUpOw0KCQkJCSRlZGl0Q2xhc3MgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGVkaXQpKSA/ICcgdWstdmlzaWJsZS1ob3Zlci1pbmxpbmUnIDogJyc7DQoJCQkJJGNvbnRlbnRbXSA9ICc8aDMgY2xhc3M9InVrLXBhbmVsLXRpdGxlJy4kZWRpdENsYXNzLiciPicuIHNlbGY6OmxvYWROYW1lKCdidW5kbGUnLCRidW5kbGUpIC4gJGVkaXQgLic8L2gzPic7DQoJCQkJJGRldGFpbHMgPSBzZWxmOjpnZXRWYXIoJ2J1bmRsZScsKGludCkgJGJ1bmRsZSwnaWQnLCdkZXNjcmlwdGlvbicpOw0KCQkJCS8vIGxvYWQgYnVuZGxlIGRldGFpbHMNCgkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRldGFpbHMpKQ0KCQkJCXsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2PicuJGRldGFpbHMuJzwvZGl2Pic7DQoJCQkJfQ0KCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0id2lyZS1ib3JkZXIiPjxkaXYgY2xhc3M9InVrLWdyaWQiPic7DQoJCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGFycmF5IGFzICRldmVudF9jb25jZXB0X3RpbWUpDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJCQkJew0KCQkJCQkJJGJ1Y2tldFtdID0gJGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdOw0KCQkJCQkJdW5zZXQoJGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+Jy5pbXBsb2RlKCc8L2Rpdj48ZGl2IGNsYXNzPSJ1ay13aWR0aC0xLTEiPjxocj4nLCRidWNrZXQpLic8L2Rpdj4nOw0KCQkJCSRjb250ZW50W10gPSAnPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+JzsNCgkJCX0NCgkJCS8vIGNoZWNrIGlmIHRoZXJlIGlzIG1vcmUgY29uY2VwdHMgbGVmdA0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb25jZXB0cykpDQoJCQl7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGRhdGEtdWstZ3JpZC1tYXJnaW49IiIgY2xhc3M9InVrLWdyaWQiPjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstcGFuZWwtc3BhY2UiPic7DQoJCQkJJGNvbnRlbnRbXSA9IGltcGxvZGUoJzwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InVrLXdpZHRoLTEtMSI+PGRpdiBjbGFzcz0idWstcGFuZWwgdWstcGFuZWwtc3BhY2UiPicsJGNvbmNlcHRzKTsNCgkJCQkkY29udGVudFtdID0gJzwvZGl2PjwvZGl2PjwvZGl2Pic7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGltcGxvZGUoJycsJGNvbnRlbnQpOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QnVuZGxlcigpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5kYXRlWydidW5kbGUnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5kYXRlWydidW5kbGUnXSkpDQoJCXsNCgkJCSRidW5kbGVyID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKHNlbGY6OiRldmVudC0+ZGF0ZVsnYnVuZGxlJ10gYXMgJGtleSA9PiAkYnVuZGxlKQ0KCQkJew0KCQkJCSRjb25jZXB0ID0gc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J11bJGtleV07DQoJCQkJaWYgKGlzX251bWVyaWMoJGJ1bmRsZSkpDQoJCQkJew0KCQkJCQlpZiAoJGtleV90aW1lID0gc2VsZjo6Z2V0RXZlbnRDb25jZXB0VGltZSgka2V5KSkNCgkJCQkJew0KCQkJCQkJaWYgKCFpc3NldChzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ11bJGtleV90aW1lXVsnc3RhcnQnXSkpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsndGltZXN0YW1wcyddWyRrZXlfdGltZV1bJ3N0YXJ0J10gPSAwOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGtleV90aW1lID0gMDsNCgkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXVswXVsnc3RhcnQnXSA9IDA7DQoJCQkJCX0NCg0KCQkJCQkkYnVuZGxlcltdID0gYXJyYXkoJ2J1bmRsZScgPT4gKGludCkgJGJ1bmRsZSwgJ2NvbmNlcHQnID0+IChpbnQpICRjb25jZXB0LCAnc3RhcnQnID0+IChpbnQpIHNlbGY6OiRldmVudEJ1aWxkZXJbJ3RpbWVzdGFtcHMnXVska2V5X3RpbWVdWydzdGFydCddKTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBjaGVjayBpZiBhbnkgYnVuZGxlcyBoYXMgYmVlbiBsb2FkZWQNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVuZGxlcikpDQoJCQl7DQoJCQkJLy8gc29ydCB0aGUgYnVuZGxlcw0KCQkJCXVzb3J0KCRidW5kbGVyLCBmdW5jdGlvbigkYSwgJGIpIHsNCgkJCQkJcmV0dXJuICRhWydzdGFydCddIC0gJGJbJ3N0YXJ0J107DQoJCQkJfSk7DQoJCQkJLy8gcGFjayB0aGUgYnVuZGxlcw0KCQkJCWZvcmVhY2ggKCRidW5kbGVyIGFzICRhcnJheSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2J1bmRsZXInXVskYXJyYXlbJ2J1bmRsZSddXVtzZWxmOjokZXZlbnQtPmlkLidfJy4kYXJyYXlbJ2NvbmNlcHQnXS4nX18nLiRhcnJheVsnc3RhcnQnXV0gPSBzZWxmOjokZXZlbnQtPmlkLidfJy4kYXJyYXlbJ2NvbmNlcHQnXS4nX18nLiRhcnJheVsnc3RhcnQnXTsNCgkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlJ11bc2VsZjo6JGV2ZW50LT5pZC4nXycuJGFycmF5Wydjb25jZXB0J10uJ19fJy4kYXJyYXlbJ3N0YXJ0J11dID0gJGFycmF5WydidW5kbGUnXTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGNvbmNlcHQNCgkgKiBAcGFyYW0gJGV2ZW50X2NvbmNlcHRfdGltZQ0KCSAqIEByZXR1cm4gYm9vbHxzdHJpbmcNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkQ29uY2VwdCgmJGNvbmNlcHQsICRldmVudF9jb25jZXB0X3RpbWUpDQoJew0KCQkkY29udGVudCA9IGFycmF5KCk7DQoJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJew0KCQkJaWYgKGlzc2V0KHNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJGV2ZW50X2NvbmNlcHRfdGltZV1bJ3N0YXJ0LWVuZCddKSkNCgkJCXsNCgkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9ImNvbmNlcHQtc3RhcnQtZW5kIj4nLnNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJGV2ZW50X2NvbmNlcHRfdGltZV1bJ3N0YXJ0LWVuZCddLic8L2Rpdj4nOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgdGhpcyBjb25jZXB0IGlzIGFscmVhZHkgbG9hZGVkDQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0pKQ0KCQkJew0KCQkJCXNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0gPSBzZWxmOjpnZXRBbGxWYWx1ZXMoJGNvbmNlcHQsICdjb25jZXB0JywgYXJyYXkoJ2NvbmNlcHRfaW1hZ2UnKSk7DQoJCQl9DQoJCQkvLyBvbmx5IGNvbnRpbnVlIGlmIHdlIGhhdmUgdmFsdWVzDQoJCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0pKQ0KCQkJew0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCSRlZGl0ID0gc2VsZjo6bG9hZEVkaXRCdXR0b24oJ2NvbmNlcHQnLCRjb25jZXB0KTsNCgkJCSRlZGl0Q2xhc3MgPSAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGVkaXQpKSA/ICcgdWstdmlzaWJsZS1ob3Zlci1pbmxpbmUnIDogJyc7DQoJCQkkY29udGVudFtdID0gJzxoMyBjbGFzcz0idWstcGFuZWwtdGl0bGUnLiRlZGl0Q2xhc3MuJyI+Jy5zZWxmOjokY29uY2VwdERhdGFbJGNvbmNlcHRdLT5uYW1lIC4gJGVkaXQgLic8L2gzPic7DQoJCQkvLyBhZGQgY29uY2VwdCBpbWFnZQ0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0tPmNvbmNlcHRfaW1hZ2UpICYmIHN0cnBvcyhzZWxmOjokY29uY2VwdERhdGFbJGNvbmNlcHRdLT5jb25jZXB0X2ltYWdlLCAnXycpICE9PSBmYWxzZSkNCgkJCXsNCgkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+Y29uY2VwdF9pbWFnZSk7DQoJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCXsNCgkJCQkJJGNvbnRlbnRbXSA9ICc8aW1nIGNsYXNzPSJ1ay10aHVtYm5haWwiIHNyYz0iJy5zZWxmOjokZmlsZWxpbmsuc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+Y29uY2VwdF9pbWFnZS4nLicuJGV4dGVudGlvblsyXS4nIiBhbHQ9ImNvbmNlcHQgaW1hZ2UiPic7DQoJCQkJfQ0KCQkJfQ0KCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIj4nOw0KDQoJCQkvLyB3b3Jrb3V0IHdpZHRocw0KCQkJJGNvbmNlcHREZXRhaWxzID0gZmFsc2U7DQoJCQkkY29uY2VwdENvbnRlbnQgPSBmYWxzZTsNCgkJCSRjb25jZXB0Q29zdGluZyA9IGZhbHNlOw0KCQkJJHNldFNwYWNlciA9IGZhbHNlOw0KCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0RGF0YVskY29uY2VwdF0tPmRldGFpbHMpKQ0KCQkJew0KCQkJCSRjb25jZXB0RGV0YWlscyA9IHRydWU7DQoJCQl9DQoJCQlpZiAoc2VsZjo6c2V0Q29uY2VwdENvbnRlbnQoJGV2ZW50X2NvbmNlcHRfdGltZSkpDQoJCQl7DQoJCQkJJGNvbmNlcHRDb250ZW50ID0gdHJ1ZTsNCgkJCX0NCgkJCWlmIChzZWxmOjpzZXRDb25jZXB0Q29zdGluZygkY29uY2VwdCwkZXZlbnRfY29uY2VwdF90aW1lKSkNCgkJCXsNCgkJCQkkY29uY2VwdENvc3RpbmcgPSB0cnVlOw0KCQkJfQ0KCQkJaWYgKCRjb25jZXB0RGV0YWlscyAmJiAkY29uY2VwdENvbnRlbnQgJiYgJGNvbmNlcHRDb3N0aW5nKQ0KCQkJew0KCQkJCS8vIHRocmVlIGlzIHRydWUNCgkJCQkkd2lkdGhzRGV0YWlscyA9IDE7DQoJCQkJJHdpZHRoc0NvbnRlbnQgPSAyOw0KCQkJfQ0KCQkJZWxzZWlmICgkY29uY2VwdERldGFpbHMgeG9yICRjb25jZXB0Q29udGVudCB4b3IgJGNvbmNlcHRDb3N0aW5nKQ0KCQkJew0KCQkJCS8vIG9uZSBpcyB0cnVlDQoJCQkJJHdpZHRoc0RldGFpbHMgPSA1Ow0KCQkJCSR3aWR0aHNDb250ZW50ID0gNTsNCgkJCQkvLyBsb2FkIGJsYW5rIHNwYWNlcg0KCQkJCSRzZXRTcGFjZXIgPSB0cnVlOw0KCQkJfQ0KCQkJZWxzZWlmICgkY29uY2VwdERldGFpbHMgfHwgJGNvbmNlcHRDb250ZW50IHx8ICRjb25jZXB0Q29zdGluZykNCgkJCXsNCgkJCQkvLyB0d28gaXMgdHJ1ZQ0KCQkJCWlmICgkY29uY2VwdENvc3RpbmcpDQoJCQkJew0KCQkJCQkkd2lkdGhzRGV0YWlscyA9IDM7DQoJCQkJCSR3aWR0aHNDb250ZW50ID0gMzsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHdpZHRoc0RldGFpbHMgPSAyOw0KCQkJCQkkd2lkdGhzQ29udGVudCA9IDM7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gbG9hZCBjb25jZXB0IGRldGFpbHMNCgkJCWlmICgkY29uY2VwdERldGFpbHMgJiYgaXNzZXQoc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XSkgJiYgaXNzZXQoc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+ZGV0YWlscykpDQoJCQl7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tJy4kd2lkdGhzRGV0YWlscy4nLTUiPic7DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2Picuc2VsZjo6JGNvbmNlcHREYXRhWyRjb25jZXB0XS0+ZGV0YWlscy4nPC9kaXY+JzsNCgkJCQkkY29udGVudFtdID0gJzwvZGl2Pic7DQoJCQl9DQoJCQkvLyBzZXQgc29tZSBjb250ZW50DQoJCQlpZiAoJGNvbmNlcHRDb250ZW50ICYmIGlzc2V0KHNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXSkgJiYgaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRCdWlsZGVyWydjb250ZW50J11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJew0KCQkJCSRjb250ZW50W10gPSAnPGRpdiBjbGFzcz0idWstd2lkdGgtbWVkaXVtLScuJHdpZHRoc0NvbnRlbnQuJy01Ij4nOw0KCQkJCSRjb250ZW50W10gPSBpbXBsb2RlKCcnLHNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXVskZXZlbnRfY29uY2VwdF90aW1lXSk7DQoJCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KCQkJfQ0KCQkJLy8gc2V0IHNvbWUgY29udGVudA0KCQkJaWYgKCRjb25jZXB0Q29zdGluZyAmJiBpc3NldChzZWxmOjokZXZlbnRPcHRpb25zWydkaXNwbGF5J11bJGV2ZW50X2NvbmNlcHRfdGltZV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudE9wdGlvbnNbJ2Rpc3BsYXknXVskZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCQl7DQoJCQkJaWYgKCRzZXRTcGFjZXIpDQoJCQkJew0KCQkJCQkkY29udGVudFtdID0gJzxkaXYgY2xhc3M9InVrLXdpZHRoLW1lZGl1bS0zLTUiPic7DQoJCQkJCSRjb250ZW50W10gPSAnPC9kaXY+JzsNCgkJCQl9DQoJCQkJJGNvbnRlbnRbXSA9ICc8ZGl2IGNsYXNzPSJ1ay13aWR0aC1tZWRpdW0tMi01Ij4nOw0KCQkJCSRjb250ZW50W10gPSBpbXBsb2RlKCcnLHNlbGY6OiRldmVudE9wdGlvbnNbJ2Rpc3BsYXknXVskZXZlbnRfY29uY2VwdF90aW1lXSk7DQoJCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KCQkJfQ0KCQkJJGNvbnRlbnRbXSA9ICc8L2Rpdj4nOw0KDQoJCQlyZXR1cm4gaW1wbG9kZSgnJywkY29udGVudCk7DQoJCX0NCgkJZWxzZWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnb3B0aW9ucycpDQoJCXsNCgkJCWlmIChzZWxmOjpzZXRDb25jZXB0Q29zdGluZygkY29uY2VwdCwkZXZlbnRfY29uY2VwdF90aW1lKSkNCgkJCXsNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50T3B0aW9uc1snb3B0aW9ucyddWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKHNlbGY6OiRldmVudE9wdGlvbnNbJ29wdGlvbnMnXVskZXZlbnRfY29uY2VwdF90aW1lXSBhcyAkbnIgPT4gJiRjb3N0aW5nKQ0KCQkJCQl7DQoJCQkJCQkkY29zdGluZ1snbmFtZSddID0gc2VsZjo6bG9hZE5hbWUoJ2V2ZW50JyxzZWxmOjokZXZlbnQtPmlkKSAuICcgKCcgLnNlbGY6OmxvYWROYW1lKCdjb25jZXB0JywkY29uY2VwdCkgLiAnIC0gJyAuICRjb3N0aW5nWyduYW1lJ10gLicpJzsNCgkJCQkJCWlmIChpc3NldChzZWxmOjokZXZlbnRCdWlsZGVyWydkYXRlcyddWyRldmVudF9jb25jZXB0X3RpbWVdWydzdGFydC1lbmQnXSkpDQoJCQkJCQl7DQoJCQkJCQkJJGNvc3RpbmdbJ2RhdGUnXSA9IHNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJGV2ZW50X2NvbmNlcHRfdGltZV1bJ3N0YXJ0LWVuZCddOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGV2ZW50X2NvbmNlcHRfdGltZQ0KCSAqIEByZXR1cm4gYm9vbA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0Q29uY2VwdENvbnRlbnQoJiRldmVudF9jb25jZXB0X3RpbWUpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JGxvY2F0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCXsNCgkJCSRrZXkgPSBzZWxmOjpnZXRMb2NhdGlvbigkZXZlbnRfY29uY2VwdF90aW1lKTsNCgkJCWlmIChpc3NldChzZWxmOjokZXZlbnQtPmRhdGVbJ2NvbnRlbnQnXVska2V5XSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5kYXRlWydjb250ZW50J11bJGtleV0pKQ0KCQkJew0KCQkJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXVskZXZlbnRfY29uY2VwdF90aW1lXSA9IGFycmF5KCk7DQoJCQkJfQ0KCQkJCWZvcmVhY2ggKHNlbGY6OiRldmVudC0+ZGF0ZVsnY29udGVudCddWyRrZXldIGFzICRjb250ZW50KQ0KCQkJCXsNCgkJCQkJLy8gY2hlY2sgaWYgdGhpcyBjb250ZW50IGlzIGFscmVhZHkgbG9hZGVkDQoJCQkJCWlmICghaXNzZXQoc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XSkpDQoJCQkJCXsNCgkJCQkJCS8vIGxvYWQgdGhlIGRhdGENCgkJCQkJCXNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0gPSBzZWxmOjpnZXRBbGxWYWx1ZXMoJGNvbnRlbnQsICdjb250ZW50JywgYXJyYXkoJ2NvbnRlbnRfaW1hZ2UnKSk7DQoJCQkJCX0NCgkJCQkJLy8gb25seSBsb2FkIHRoZSBjb250ZW50IGlmIHdlIGhhdmUgdmFsdWVzDQoJCQkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XSkpDQoJCQkJCXsNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoJCQkJCS8vIG5vdyBsb2FkIHRoZSBiYW5uZXINCgkJCQkJJGJhbm5lciA9IGZhbHNlOw0KCQkJCQlpZiAoaXNzZXQoc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+Y29udGVudF9pbWFnZSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+Y29udGVudF9pbWFnZSkgJiYgc3RycG9zKHNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPmNvbnRlbnRfaW1hZ2UsICdfJykgIT09IGZhbHNlKQ0KCQkJCQl7DQoJCQkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsIHNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPmNvbnRlbnRfaW1hZ2UpOw0KCQkJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCQkJew0KCQkJCQkJCSRiYW5uZXIgPSAnPGltZyBjbGFzcz0idWstdGh1bWJuYWlsIHVrLW1hcmdpbiIgc3JjPSInLnNlbGY6OiRmaWxlbGluay5zZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5jb250ZW50X2ltYWdlLicuJy4kZXh0ZW50aW9uWzJdLiciIGFsdD0iJy5zZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5uYW1lLiciPic7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJJGVkaXQgPSBzZWxmOjpsb2FkRWRpdEJ1dHRvbignY29udGVudCcsJGNvbnRlbnQpOw0KCQkJCQkkZWRpdENsYXNzID0gKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRlZGl0KSkgPyAnIHVrLXZpc2libGUtaG92ZXItaW5saW5lJyA6ICcnOw0KCQkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGNvbnRlbnREYXRhWyRjb250ZW50XS0+ZGV0YWlscykgfHwgJGJhbm5lcikNCgkJCQkJew0KCQkJCQkJJHJhbmRvbSA9IHNlbGY6OnJhbmRvbWtleSg1KTsNCgkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXVskZXZlbnRfY29uY2VwdF90aW1lXVtdID0gJzxkaXYgY2xhc3M9InVrLW1hcmdpbicuJGVkaXRDbGFzcy4nIj48YSBocmVmPSIjIiBkYXRhLXVrLXRvZ2dsZT0ie3RhcmdldDpcJyNjb24nLiRyYW5kb20uJ1wnfSI+Jy5zZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5uYW1lLic8L2E+JyAuICRlZGl0IC4nPC9kaXY+JzsNCgkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXVskZXZlbnRfY29uY2VwdF90aW1lXVtdID0gJzxkaXYgaWQ9ImNvbicuJHJhbmRvbS4nIiBjbGFzcz0idWstaGlkZGVuIj4nOw0KCQkJCQkJaWYgKCRiYW5uZXIpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSAkYmFubmVyOw0KCQkJCQkJfQ0KCQkJCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPmRldGFpbHMpIHx8ICRiYW5uZXIpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSBzZWxmOjokY29udGVudERhdGFbJGNvbnRlbnRdLT5kZXRhaWxzOw0KCQkJCQkJfQ0KCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnY29udGVudCddWyRldmVudF9jb25jZXB0X3RpbWVdW10gPSAnPC9kaXY+JzsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2NvbnRlbnQnXVskZXZlbnRfY29uY2VwdF90aW1lXVtdID0gJzxkaXYgY2xhc3M9InVrLW1hcmdpbicuJGVkaXRDbGFzcy4nIj4nLnNlbGY6OiRjb250ZW50RGF0YVskY29udGVudF0tPm5hbWUgLiAkZWRpdCAuJzwvZGl2Pic7DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gZm91bmQNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRjb25jZXB0DQoJICogQHBhcmFtICRldmVudF9jb25jZXB0X3RpbWUNCgkgKiBAcmV0dXJuIGJvb2wNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldENvbmNlcHRDb3N0aW5nKCYkY29uY2VwdCwmJGV2ZW50X2NvbmNlcHRfdGltZSkNCgl7DQoJCSRmb3VuZCA9IGZhbHNlOw0KCQkvLyBjaGVjayBpZiB0aGlzIGNvbmNlcHQgaGFzIGEgdmFyaWF0aW9uIHJlbGF0aW9uDQoJCWlmIChpc3NldChzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5jb3N0Wydjb25jZXB0J10pICYmIGluX2FycmF5KCRjb25jZXB0LCBzZWxmOjokZXZlbnQtPmNvc3RbJ2NvbmNlcHQnXSkpDQoJCXsNCgkJCSRleHRyYXMgPSBhcnJheSgpOw0KCQkJJGJ1dHRvbnMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoc2VsZjo6JGV2ZW50LT5jb3N0Wydjb25jZXB0J10gYXMgJGtleSA9PiAkY2hlY2tlcikNCgkJCXsNCgkJCQlpZiAoJGNvbmNlcHQgPT0gJGNoZWNrZXIgJiYgaXNzZXQoc2VsZjo6JGV2ZW50LT5jb3N0WydwcmljZSddWyRrZXldKSAmJiBpc3NldChzZWxmOjokZXZlbnQtPmNvc3RbJ3ZhcmlhdGlvbiddWyRrZXldKSAmJiAhc2VsZjo6JGV2ZW50LT5jb3N0WydleHRyYSddWyRrZXldKQ0KCQkJCXsNCgkJCQkJaWYgKGNvdW50KCRidXR0b25zKSA+IDIgJiYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicgfHwgc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKSkNCgkJCQkJew0KCQkJCQkJJGJ1dHRvbnNbXSA9ICc8YnIgLz4nOw0KCQkJCQl9DQoJCQkJCWlmICgkYnV0dG9uID0gc2VsZjo6c2V0QnV5QnV0dG9ucygka2V5LCAkY29uY2VwdCwgJGV2ZW50X2NvbmNlcHRfdGltZSkpDQoJCQkJCXsNCgkJCQkJCSRidXR0b25zW10gPSAkYnV0dG9uOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJGNvbmNlcHQgPT0gJGNoZWNrZXIgJiYgaXNzZXQoc2VsZjo6JGV2ZW50LT5jb3N0WydwcmljZSddWyRrZXldKSAmJiBpc3NldChzZWxmOjokZXZlbnQtPmNvc3RbJ3ZhcmlhdGlvbiddWyRrZXldKSAmJiBzZWxmOjokZXZlbnQtPmNvc3RbJ2V4dHJhJ11bJGtleV0pDQoJCQkJew0KCQkJCQlpZiAoY291bnQoJGV4dHJhcykgPiAyICYmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykpDQoJCQkJCXsNCgkJCQkJCSRleHRyYXNbXSA9ICc8YnIgLz4nOw0KCQkJCQl9DQoJCQkJCWlmICgkYnV0dG9uID0gc2VsZjo6c2V0QnV5QnV0dG9ucygka2V5LCAkY29uY2VwdCwgJGV2ZW50X2NvbmNlcHRfdGltZSkpDQoJCQkJCXsNCgkJCQkJCSRleHRyYXNbXSA9ICRidXR0b247DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyBsb2FkIHRoZSBidXR0b25zDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGJ1dHRvbnMpKQ0KCQkJew0KCQkJCS8vIGlnbml0ZSB0aGUgZW5naW5lDQoJCQkJc2VsZjo6c3RhcnRFdmVudE9wdGlvbnNCdWlsZGVyKCRldmVudF9jb25jZXB0X3RpbWUpOw0KCQkJCS8vIGxvYWQgdGhlIHBheWxvYWQNCgkJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQkJew0KCQkJCQlzZWxmOjokZXZlbnRPcHRpb25zWydkaXNwbGF5J11bJGV2ZW50X2NvbmNlcHRfdGltZV1bXSA9IGltcGxvZGUoJycsJGJ1dHRvbnMpOw0KCQkJCX0NCgkJCQllbHNlaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJCQl7DQoJCQkJCXNlbGY6OiRldmVudE9wdGlvbnNbJ29wdGlvbnMnXVskZXZlbnRfY29uY2VwdF90aW1lXSA9ICRidXR0b25zOw0KCQkJCX0NCgkJCQkkZm91bmQgPSB0cnVlOw0KCQkJfQ0KCQkJLy8gbG9hZCB0aGUgZXh0cmFzDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGV4dHJhcykpDQoJCQl7DQoJCQkJLy8gaWduaXRlIHRoZSBlbmdpbmUNCgkJCQlzZWxmOjpzdGFydEV2ZW50T3B0aW9uc0J1aWxkZXIoJGV2ZW50X2NvbmNlcHRfdGltZSk7DQoJCQkJLy8gbG9hZCB0aGUgcGF5bG9hZA0KCQkJCWlmIChzZWxmOjokcmV0dXJuVHlwZSA9PSAnYWRtaW4nIHx8IHNlbGY6OiRyZXR1cm5UeXBlID09ICdzaXRlJykNCgkJCQl7DQoJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRPcHRpb25zWydkaXNwbGF5J11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJCQl7DQoJCQkJCQlzZWxmOjokZXZlbnRPcHRpb25zWydkaXNwbGF5J11bJGV2ZW50X2NvbmNlcHRfdGltZV1bXSA9ICc8aHI+JzsNCgkJCQkJfQ0KCQkJCQlzZWxmOjokZXZlbnRPcHRpb25zWydkaXNwbGF5J11bJGV2ZW50X2NvbmNlcHRfdGltZV1bXSA9IGltcGxvZGUoJycsJGV4dHJhcyk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ29wdGlvbnMnKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1snb3B0aW9ucyddWyRldmVudF9jb25jZXB0X3RpbWVdID0gYXJyYXlfbWVyZ2Uoc2VsZjo6JGV2ZW50T3B0aW9uc1snb3B0aW9ucyddWyRldmVudF9jb25jZXB0X3RpbWVdLCAkZXh0cmFzKTsNCgkJCQl9DQoJCQkJJGZvdW5kID0gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGZvdW5kOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc3RhcnRFdmVudE9wdGlvbnNCdWlsZGVyKCYkZXZlbnRfY29uY2VwdF90aW1lKQ0KCXsNCgkJaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdhZG1pbicgfHwgc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQl7DQoJCQkvLyBzZXQgYXJyYXkgaWYgbm90IHNldA0KCQkJaWYgKCFpc3NldChzZWxmOjokZXZlbnRPcHRpb25zWydkaXNwbGF5J11bJGV2ZW50X2NvbmNlcHRfdGltZV0pIHx8IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRldmVudE9wdGlvbnNbJ2Rpc3BsYXknXVskZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCQl7DQoJCQkJc2VsZjo6JGV2ZW50T3B0aW9uc1snZGlzcGxheSddWyRldmVudF9jb25jZXB0X3RpbWVdID0gYXJyYXkoKTsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJew0KCQkJLy8gc2V0IGFycmF5IGlmIG5vdCBzZXQNCgkJCWlmICghaXNzZXQoc2VsZjo6JGV2ZW50T3B0aW9uc1snb3B0aW9ucyddWyRldmVudF9jb25jZXB0X3RpbWVdKSB8fCBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnRPcHRpb25zWydvcHRpb25zJ11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJew0KCQkJCXNlbGY6OiRldmVudE9wdGlvbnNbJ29wdGlvbnMnXVskZXZlbnRfY29uY2VwdF90aW1lXSA9IGFycmF5KCk7DQoJCQl9DQoJCX0JDQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRrZXkNCgkgKiBAcGFyYW0gaW50ICRjb25jZXB0DQoJICogQHBhcmFtIHN0cmluZyAkZXZlbnRfY29uY2VwdF90aW1lDQoJICogQHJldHVybiBhcnJheXxib29sfHN0cmluZw0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QnV5QnV0dG9ucygka2V5LCAkY29uY2VwdCA9IDAsICRldmVudF9jb25jZXB0X3RpbWUgPSAnMF9fMCcpDQoJew0KCQkvLyAxIDwtIGluZGl2aWR1YWwgYW5kIGdyb3VwDQoJCS8vIDIgPC0gb25seSBpbmRpdmlkdWFsDQoJCS8vIDMgPC0gb25seSBncm91cA0KCQkvLyA0IDwtIGN1c3RvbSByZWcNCgkJLy8gNSA8LSBjbG9zZSByZWcNCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+aWQpKQ0KCQl7DQoJCQkvLyBzZXQgdGhlIHByaWNlDQoJCQlpZiAoc2VsZjo6JGV2ZW50LT50eXBlICE9IDUgJiYgKCRjb25jZXB0UHJpY2UgPSBzZWxmOjpnZXRDb25jZXB0UHJpY2UoJGtleSkpKQ0KCQkJew0KCQkJCSR2YXJpYXRpb24gPSAoaW50KSBzZWxmOjokZXZlbnQtPmNvc3RbJ3ZhcmlhdGlvbiddWyRrZXldOw0KCQkJCSRxdHkgPSAoaW50KSBzZWxmOjokZXZlbnQtPmNvc3RbJ3F0eSddWyRrZXldOw0KCQkJCSRvbmx5ID0gKGludCkgc2VsZjo6JGV2ZW50LT5jb3N0Wydvbmx5J11bJGtleV07DQoJCQkJJGV4dHJhID0gKGludCkgc2VsZjo6JGV2ZW50LT5jb3N0WydleHRyYSddWyRrZXldOw0KCQkJCSR0YXhlZCA9IChpbnQpIHNlbGY6OiRldmVudC0+Y29zdFsndGF4ZWQnXVska2V5XTsNCgkJCQkvLyBidWlsZCBzd3RpY2ggaWQNCgkJCQkkYnVuZGxlID0gMDsNCgkJCQkkdGltZSA9IGV4cGxvZGUoJ19fJywkZXZlbnRfY29uY2VwdF90aW1lKTsNCgkJCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50QnVpbGRlclsnYnVuZGxlJ11bJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQkJCXsNCgkJCQkJJGJ1bmRsZSA9IHNlbGY6OiRldmVudEJ1aWxkZXJbJ2J1bmRsZSddWyRldmVudF9jb25jZXB0X3RpbWVdOw0KCQkJCX0NCgkJCQkvLyBzd2l0Y2ggSUQNCgkJCQkkc3dpdGNoSUQgPSBzZWxmOjokZXZlbnQtPmlkIC4gJ18nIC4gKGludCkgJGJ1bmRsZSAuICdfJyAuKGludCkgJHRpbWVbMV0gLiAnXycgLihpbnQpICRjb25jZXB0IC4gJ18nIC4gKGludCkgJHZhcmlhdGlvbjsNCgkJCQkvLyBzdGFydCBidWlsZGluZyB0aGUgYnV0dG9uDQoJCQkJJGJ1dHRvbiA9IGFycmF5KCk7DQoJCQkJaWYgKHNlbGY6OiRldmVudC0+dHlwZSA9PSA0KQ0KCQkJCXsNCgkJCQkJLy8gc2V0IGxpbmsgaWYgbm90IHNldA0KCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRldmVudC0+Y3VzdG9tdXJsKSAmJiBzZWxmOjokZXZlbnQtPmlkID4gMCkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JGV2ZW50LT5jdXN0b211cmwgPSBzZWxmOjpnZXRWYXIoJ2V2ZW50Jywgc2VsZjo6JGV2ZW50LT5pZCwgJ2lkJywgJ2N1c3RvbXVybCcpOw0KCQkJCQl9DQoJCQkJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50LT5jdXN0b211cmwpKQ0KCQkJCQl7DQoJCQkJCQlzZWxmOjokZXZlbnQtPmN1c3RvbXVybCA9ICcjQ1VTVE9NX0xJTksnOw0KCQkJCQl9DQoJCQkJCS8vIGFkZCB0aGUgbmVlZGVkIHZhcnMgdG8gcGFzcyB0aGUgc2VsZWN0aW9uDQoJCQkJCSRzZWxlY3Rpb25WYWx1ZSA9ICRzd2l0Y2hJRCAuICdfXycgLiAkY29uY2VwdFByaWNlWydFWENIQU5HRV9SQVRFX1RPJ10gLiAnX18nIC4gJGNvbmNlcHRQcmljZVsnRVhDSEFOR0VfUkFURV9JRCddOw0KCQkJCQkkc2VsZWN0aW9uVmFyID0gJyZbW1tjb21wb25lbnRdXV1fc2VsZWN0aW9uPScuJHNlbGVjdGlvblZhbHVlOw0KCQkJCQkkYnV0dG9uW10gPSAnPGRpdiAgY2xhc3M9InVrLXdpZHRoLTEtMSB1ay10ZXh0LWJvbGQgdWstdGV4dC1zdWNjZXNzIHVrLXRleHQtbGFyZ2UiPic7DQoJCQkJCSRidXR0b25bXSA9IHNlbGY6OmxvYWROYW1lKCd2YXJpYXRpb24nLCR2YXJpYXRpb24pOw0KCQkJCQkkYnV0dG9uW10gPSAnICAnIC4kY29uY2VwdFByaWNlWydFWENIQU5HRV9SQVRFX1RPX01PTkVZJ107DQoJCQkJCSRidXR0b25bXSA9ICc8L2Rpdj4nOw0KCQkJCQkkYnV0dG9uW10gPSAnPGEgaHJlZj0iJyAuIHNlbGY6OiRldmVudC0+Y3VzdG9tdXJsIC4gJHNlbGVjdGlvblZhciAuICciIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTEiIHRhcmdldD0iX2JsYW5rIj4nOw0KCQkJCQkkYnV0dG9uW10gPSBUZXh0OjpfKCdSZWdpc3RlcicpOw0KCQkJCQkkYnV0dG9uW10gPSAnPC9hPic7DQoNCgkJCQkJJGJ1eUlkID0gbnVsbDsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gY2hlY2tpbmcgSUQNCgkJCQkJJGNoZWNraW5nSUQgPSBzZWxmOjokZXZlbnQtPm9yZ2FuaXplciAuICdfJyAuICRzd2l0Y2hJRDsNCgkJCQkJLy8gY2hlY2tpbmcgS0VZDQoJCQkJCSRJREtFWSA9IG1kNSgkY2hlY2tpbmdJRCk7DQoJCQkJCS8vIHNldCBidXkgSUQNCgkJCQkJJGJ1eUlkID0gJElES0VZIC4gJ19fJyAuICRjb25jZXB0UHJpY2VbJ0VYQ0hBTkdFX1JBVEVfVE8nXSAuICdfXycgLiAkY29uY2VwdFByaWNlWydFWENIQU5HRV9SQVRFX0lEJ107DQoJCQkJCS8vIGdldCBxdHkgYXZhaWxhYmxlDQoJCQkJCSRhY3R1YWxRVFkgPSBzZWxmOjpnZXRRdHlBdmFpbGFibGUoJHF0eSwgJ3ZhcmlhdGlvbicsICRjaGVja2luZ0lEKTsNCgkJCQkJLy8gZ2V0IHF0eSB0aGlzIHVzZXIgaGFzIHNlbGVjdGVkIA0KCQkJCQkkc2VsZWN0ZWRRVFkgPSBzZWxmOjphY3RpdmVDYXJ0UXR5KCRjaGVja2luZ0lEKTsNCgkJCQkJLy8gc2V0IHZhcmlhdGlvbiBuYW1lDQoJCQkJCSR2YXJpYXRpb25OYW1lID0gc2VsZjo6bG9hZE5hbWUoJ3ZhcmlhdGlvbicsJHZhcmlhdGlvbik7DQoJCQkJCS8vIHNldCBidXR0b24gYnkgSUQNCgkJCQkJJGJ1dHRvbklkID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkYnV5SWQsICdjQW1lbCcpOw0KCQkJCQkvLyB3ZSByZW1vdmUgZGlzYWJsZXIgaWYgbm90IG5lZWRlZA0KCQkJCQlzZWxmOjokZGlzYWJsZUJ1dHRvbnNbJyMjIycuJGJ1dHRvbklkLicjIyMnXSA9ICcnOw0KCQkJCQlpZiAoIHNlbGY6OiRyZXR1cm5UeXBlICE9PSAnb3B0aW9ucycpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCBzb21lIEphdmFTY3JpcHQgdmFsdWVzDQoJCQkJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJykNCgkJCQkJCXsNCgkJCQkJCQlzZWxmOjokYnV0dG9uU2NyaXB0W10gPSAnYXZhaWxhYmxlWyInLiRidXR0b25JZC4nIl0gPSAnLiAoaW50KSAkcXR5Lic7JzsNCgkJCQkJCX0NCgkJCQkJCS8vIHRpY2tldCBiZWhhdmlvciANCgkJCQkJCWlmICghJGV4dHJhKQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRidXR0b25TY3JpcHRbXSA9ICd0aWNrZXRzWyInLiRidXR0b25JZC4nIl0gPSAxOyc7DQoJCQkJCQl9DQoJCQkJCQkvLyBzZXQgdGhlIG9ubHkgc3dpdGNoDQoJCQkJCQkkb25seVN3aXRjaCA9ICcnOw0KCQkJCQkJaWYgKDEgPT0gJG9ubHkgJiYgISRleHRyYSkNCgkJCQkJCXsNCgkJCQkJCQkkb25seVN3aXRjaCA9ICdkYXRhLW9ubHk9IjEiJzsNCgkJCQkJCQkvLyBtYWtlIHN1cmUgc2VsZWN0ZWQgb25seSB2YWx1ZXMgYXJlIHNldCBhZ2Fpbg0KCQkJCQkJCWlmICgkc2VsZWN0ZWRRVFkgPiAwKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gbG9hZCBwZXIgY29uY2VwdA0KCQkJCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRjb25jZXB0U3dpdGNoT25seVskY29uY2VwdF0pKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQlzZWxmOjokY29uY2VwdFN3aXRjaE9ubHlbJGNvbmNlcHRdID0gYXJyYXkoKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyB0aGlzIGlzIHRoZSBhY3RpdmUgc2VsZWN0aW9uDQoJCQkJCQkJCXNlbGY6OiRjb25jZXB0U3dpdGNoT25seVskY29uY2VwdF1bXSA9IGFycmF5KCdjb25jZXB0JyA9PiAoaW50KSAkY29uY2VwdCwgJ2J1bmRsZScgPT4gKGludCkgJGJ1bmRsZSk7DQoJCQkJCQkJCS8vIGxvYWQgcGVyIGJ1bmRsZQ0KCQkJCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRidW5kbGVTd2l0Y2hPbmx5WyRidW5kbGVdKSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJc2VsZjo6JGJ1bmRsZVN3aXRjaE9ubHlbJGJ1bmRsZV0gPSBhcnJheSgpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIHRoaXMgaXMgdGhlIGFjdGl2ZSBzZWxlY3Rpb24NCgkJCQkJCQkJc2VsZjo6JGJ1bmRsZVN3aXRjaE9ubHlbJGJ1bmRsZV1bXSA9IGFycmF5KCdjb25jZXB0JyA9PiAoaW50KSAkY29uY2VwdCwgJ2J1bmRsZScgPT4gKGludCkgJGJ1bmRsZSk7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCXNlbGY6OiRkaXNhYmxlQnV0dG9uc0NoZWNrWyRidXR0b25JZF0gPSBhcnJheSgnY29uY2VwdCcgPT4gKGludCkgJGNvbmNlcHQsICdidW5kbGUnID0+IChpbnQpICRidW5kbGUpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCSRidXR0b25bXSA9ICc8ZGl2IGNsYXNzPSJ1ay13aWR0aC0xLTEgdWstdGV4dC1ib2xkIHVrLXRleHQtc3VjY2VzcyB1ay10ZXh0LWxhcmdlIj4nOw0KCQkJCQkJJGJ1dHRvbltdID0gJHZhcmlhdGlvbk5hbWU7DQoJCQkJCQkkYnV0dG9uW10gPSAnPGJyIGNsYXNzPSJ1ay12aXNpYmxlLXNtYWxsIi8+ICA8c3BhbiBjbGFzcz0iJy4kYnV0dG9uSWQuJy1wcmljZSI+JyAuICRjb25jZXB0UHJpY2VbJ0VYQ0hBTkdFX1JBVEVfVE9fTU9ORVknXSAuJzwvc3Bhbj4nOw0KCQkJCQkJJGJ1dHRvbltdID0gJzwvZGl2Pic7DQoNCgkJCQkJCS8vIGNoZWNrIGlmIHRoZXJlIGlzIHN0aWxsIHBsYWNlIG9wZW4gb24gdGhpcyB2YXJpYXRpb24NCgkJCQkJCWlmICgkcXR5ICE9IDAgJiYgJGFjdHVhbFFUWSA8PSAwICYmICRzZWxlY3RlZFFUWSA8PSAwICYmIHNlbGY6OiRyZXR1cm5UeXBlICE9PSAnYWRtaW4nKQ0KCQkJCQkJew0KCQkJCQkJCS8vIHN0YXJ0IGJ1aWxkaW5nIHRoZSBidXR0b24NCgkJCQkJCQkkYnV0dG9uID0gYXJyYXkoKTsNCgkJCQkJCQkkYnV0dG9uW10gPSAnPGRpdiBjbGFzcz0idWstd2lkdGgtMS0xIHVrLXRleHQtYm9sZCB1ay10ZXh0LW11dGVkIHVrLXRleHQtbGFyZ2UiPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJHZhcmlhdGlvbk5hbWU7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzxiciBjbGFzcz0idWstdmlzaWJsZS1zbWFsbCIvPiAnIC4gJGNvbmNlcHRQcmljZVsnRVhDSEFOR0VfUkFURV9UT19NT05FWSddIC4nIDxzbWFsbD4oJyAuIFRleHQ6Ol8oJ1RoaXMgT3B0aW9uIGlzIEZ1bGwuJykgLiAnKTwvc21hbGw+JzsNCgkJCQkJCQkkYnV0dG9uW10gPSAnPC9kaXY+JzsNCgkJCQkJCQkkYnV0dG9uW10gPSAnPGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20gdWstd2lkdGgtMS0xIiB0eXBlPSJidXR0b24iIGRpc2FibGVkPiAnOw0KCQkJCQkJCSRidXR0b25bXSA9IFRleHQ6Ol8oJ0Nsb3NlZCcpOw0KCQkJCQkJCSRidXR0b25bXSA9ICc8L2J1dHRvbj4nOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZWlmIChzZWxmOjokZXZlbnQtPnR5cGUgPT0gMikNCgkJCQkJCXsNCgkJCQkJCQlpZiAoJHNlbGVjdGVkUVRZID4gMCkNCgkJCQkJCQl7DQoJCQkJCQkJCSRidXR0b25bXSA9ICc8YnV0dG9uICBpZD0iJy4kYnV0dG9uSWQuJy1zZWxlY3QiIGNsYXNzPSJzZWxlY3QtYnV0dG9uIHVrLWJ1dHRvbiB1ay1tYXJnaW4tc21hbGwtYm90dG9tIHVrLXdpZHRoLTEtMSB1ay1idXR0b24tc3VjY2VzcyB1ay1hY3RpdmUiIHR5cGU9ImJ1dHRvbiIgZGF0YS1idXk9IicuJGJ1eUlkLiciIGRhdGEtc3dpdGNoPSInLiRzd2l0Y2hJRC4nIiAnLiRvbmx5U3dpdGNoLicgZGF0YS1zZWxlY3Rpb249IjIiICMjIycuJGJ1dHRvbklkLicjIyM+ICc7DQoJCQkJCQkJCSRidXR0b25bXSA9IFRleHQ6Ol8oJ1NlbGVjdCcpOw0KCQkJCQkJCQkkYnV0dG9uW10gPSAnPC9idXR0b24+JzsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGJ1dHRvbltdID0gJzxidXR0b24gIGlkPSInLiRidXR0b25JZC4nLXNlbGVjdCIgY2xhc3M9InNlbGVjdC1idXR0b24gdWstYnV0dG9uIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20gdWstd2lkdGgtMS0xIHVrLWJ1dHRvbi1zdWNjZXNzIiB0eXBlPSJidXR0b24iIGRhdGEtYnV5PSInLiRidXlJZC4nIiBkYXRhLXN3aXRjaD0iJy4kc3dpdGNoSUQuJyIgJy4kb25seVN3aXRjaC4nIGRhdGEtc2VsZWN0aW9uPSIxIiAjIyMnLiRidXR0b25JZC4nIyMjPiAnOw0KCQkJCQkJCQkkYnV0dG9uW10gPSBUZXh0OjpfKCdTZWxlY3QnKTsNCgkJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCS8vIGFkZCB0byBjYXJ0IGJ1dHRvbg0KCQkJCQkJCSRidXR0b25bXSA9ICc8ZGl2IGNsYXNzPSJ1ay1idXR0b24tZ3JvdXAgdWstd2lkdGgtMS0xIj4nOw0KCQkJCQkJCWlmICgkcXR5ICE9IDAgJiYgJGFjdHVhbFFUWSA8PSAwICYmICRzZWxlY3RlZFFUWSA+IDApDQoJCQkJCQkJew0KCQkJCQkJCQkkYnV0dG9uW10gPSAnPGJ1dHRvbiBpZD0iJy4kYnV0dG9uSWQuJy1wbHVzIiBjbGFzcz0ic2VsZWN0LWJ1dHRvbiB1ay1idXR0b24gdWstYnV0dG9uLXNtYWxsIHVrLW1hcmdpbi1zbWFsbC1ib3R0b20gdWstd2lkdGgtMS0zIHVrLWJ1dHRvbi1zdWNjZXNzIiB0eXBlPSJidXR0b24iIGRhdGEtYnV5PSInLiRidXlJZC4nIiBkYXRhLXN3aXRjaD0iJy4kc3dpdGNoSUQuJyIgJy4kb25seVN3aXRjaC4nIGRpc2FibGVkPic7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCSRidXR0b25bXSA9ICc8YnV0dG9uIGlkPSInLiRidXR0b25JZC4nLXBsdXMiIGNsYXNzPSJzZWxlY3QtYnV0dG9uIHVrLWJ1dHRvbiB1ay1idXR0b24tc21hbGwgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTMgdWstYnV0dG9uLXN1Y2Nlc3MiIHR5cGU9ImJ1dHRvbiIgZGF0YS1idXk9IicuJGJ1eUlkLiciIGRhdGEtc3dpdGNoPSInLiRzd2l0Y2hJRC4nIiAnLiRvbmx5U3dpdGNoLicgIyMjJy4kYnV0dG9uSWQuJyMjIz4nOw0KCQkJCQkJCX0NCgkJCQkJCQkkYnV0dG9uW10gPSAnPGkgY2xhc3M9InVrLWljb24tcGx1cyI+PC9pPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzxidXR0b24gaWQ9IicuJGJ1dHRvbklkLictbWludXMiIGNsYXNzPSJzZWxlY3QtYnV0dG9uIHVrLWJ1dHRvbiB1ay1idXR0b24tc21hbGwgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTMgdWstYnV0dG9uLXN1Y2Nlc3MiIHR5cGU9ImJ1dHRvbiIgZGF0YS1idXk9IicuJGJ1eUlkLiciIGRhdGEtc3dpdGNoPSInLiRzd2l0Y2hJRC4nIiAnLiRvbmx5U3dpdGNoLicgIyMjJy4kYnV0dG9uSWQuJyMjIz4nOw0KCQkJCQkJCSRidXR0b25bXSA9ICc8aSBjbGFzcz0idWstaWNvbi1taW51cyI+PC9pPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzwvYnV0dG9uPic7DQoJCQkJCQkJJGJ1dHRvbltdID0gJzxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tc21hbGwgdWstbWFyZ2luLXNtYWxsLWJvdHRvbSB1ay13aWR0aC0xLTMiIHR5cGU9ImJ1dHRvbiIgZGlzYWJsZWQ+JzsNCgkJCQkJCQlpZiAoJHNlbGVjdGVkUVRZID4gMCkNCgkJCQkJCQl7DQoJCQkJCQkJCSRidXR0b25bXSA9ICc8c3BhbiBpZD0iJy4kYnV0dG9uSWQuJy1udW1iZXIiIGRhdGEtcXR5PSInLiRzZWxlY3RlZFFUWS4nIj48c3BhbiBjbGFzcz0idWstYmFkZ2UgdWstYmFkZ2Utbm90aWZpY2F0aW9uIHVrLWJhZGdlLXN1Y2Nlc3MiPicuJHNlbGVjdGVkUVRZLic8L3NwYW4+PC9zcGFuPic7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCQkkYnV0dG9uW10gPSAnPHNwYW4gaWQ9IicuJGJ1dHRvbklkLictbnVtYmVyIiBkYXRhLXF0eT0iMCI+MDwvc3Bhbj4nOwkJCQkJCQ0KCQkJCQkJCX0NCgkJCQkJCQkkYnV0dG9uW10gPSAnPC9idXR0b24+JzsNCgkJCQkJCQkkYnV0dG9uW10gPSAnPC9kaXY+JzsNCgkJCQkJCX0NCgkJCQkJCQ0KCQkJCQkJLy8gY2hlY2sgaWYgdGhlcmUgaGFzIGJlZW4gYSBjaGFuZ2UgaW4gcHJpY2UNCgkJCQkJCSRzdG9yZWRQcmljZSA9IHNlbGY6OmdldEV2ZW50RGV0YWlscygkSURLRVksICdwcmljZScsICdpZCcsIGZhbHNlKTsNCgkJCQkJCWlmICgkc3RvcmVkUHJpY2UgIT09ICRjb25jZXB0UHJpY2VbJ0VYQ0hBTkdFX1JBVEVfVE8nXSkNCgkJCQkJCXsNCgkJCQkJCQkvLyB1cGRhdGUgdGhlIHByaWNlIGlmIHRoZXJlIHdhcyBhIGNoYW5nZQ0KCQkJCQkJCXNlbGY6OnVwZGF0ZUV2ZW50RGV0YWlsKCRJREtFWSwgYXJyYXkoDQoJCQkJCQkJCSdpZCcgPT4gJElES0VZLA0KCQkJCQkJCQknYnV5X2lkJyA9PiAkYnV5SWQsDQoJCQkJCQkJCSdjaGVja19pZCcgPT4gJGNoZWNraW5nSUQsDQoJCQkJCQkJCSdzd2l0Y2hfaWQnID0+ICRzd2l0Y2hJRCwNCgkJCQkJCQkJJ3ByaWNlJyA9PiAkY29uY2VwdFByaWNlWydFWENIQU5HRV9SQVRFX0ZST00nXSwNCgkJCQkJCQkJJ25hbWUnID0+ICR2YXJpYXRpb25OYW1lLA0KCQkJCQkJCQkncXR5JyA9PiAkcXR5LA0KCQkJCQkJCQknb25seScgPT4gJG9ubHksDQoJCQkJCQkJCSdleHRyYScgPT4gJGV4dHJhLA0KCQkJCQkJCQkndGF4ZWQnID0+ICR0YXhlZCwNCgkJCQkJCQkJJ3ByaWNlT2JqZWN0JyA9PiAkY29uY2VwdFByaWNlKSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gb25seSByZXR1cm4gYnV0dG9uIGlmIGFkbWluIG9yIHNpdGUgcmV0dXJuIHR5cGUNCgkJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ2FkbWluJyB8fCBzZWxmOjokcmV0dXJuVHlwZSA9PSAnc2l0ZScpDQoJCQkJew0KCQkJCQlyZXR1cm4gIGltcGxvZGUoJycsJGJ1dHRvbik7DQoJCQkJfQ0KCQkJCS8vIGlmIG9wdGlvbnMgdGhlbiByZXR1cm4gYXJyYXkgb2YgcmVzdWx0cw0KCQkJCWVsc2VpZiAoJGJ1eUlkICYmIHNlbGY6OiRyZXR1cm5UeXBlID09ICdvcHRpb25zJykNCgkJCQl7DQoJCQkJCXJldHVybiBhcnJheSgNCgkJCQkJCSdpZCcgPT4gJElES0VZLA0KCQkJCQkJJ2J1eV9pZCcgPT4gJGJ1eUlkLA0KCQkJCQkJJ2NoZWNrX2lkJyA9PiAkY2hlY2tpbmdJRCwNCgkJCQkJCSdzd2l0Y2hfaWQnID0+ICRzd2l0Y2hJRCwNCgkJCQkJCSdwcmljZScgPT4gJGNvbmNlcHRQcmljZVsnRVhDSEFOR0VfUkFURV9UTyddLA0KCQkJCQkJJ25hbWUnID0+ICR2YXJpYXRpb25OYW1lLA0KCQkJCQkJJ3F0eScgPT4gJHF0eSwNCgkJCQkJCSdvbmx5JyA9PiAkb25seSwNCgkJCQkJCSdleHRyYScgPT4gJGV4dHJhLA0KCQkJCQkJJ3RheGVkJyA9PiAkdGF4ZWQsDQoJCQkJCQkncHJpY2VPYmplY3QnID0+ICRjb25jZXB0UHJpY2UpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFdmVudERldGFpbHMoJGtleSwgJHdoYXQgPSAncHJpY2UnLCAkdHlwZSA9ICduYW1lJywgJHJldHJ5ID0gdHJ1ZSwgJHByaWNlQ29udmVydGlvbiA9IHRydWUpDQoJew0KCQlpZiAoJ25hbWUnID09ICR0eXBlKQ0KCQl7DQoJCQkka2V5ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgka2V5KTsNCgkJfQ0KCQkvLyBnZXQgdGhlIGV2ZW50IGRldGFpbHMNCgkJJGV2ZW50RGV0YWlscyA9IHNlbGY6OmdldCgnZXZlbnREZXRhaWxzVkRNJywgbnVsbCk7DQoJCWlmICgkZXZlbnREZXRhaWxzICYmIGlzc2V0KCRldmVudERldGFpbHNbJHR5cGVdWyRrZXldKSAmJiBpc3NldCgkZXZlbnREZXRhaWxzWyR0eXBlXVska2V5XVskd2hhdF0pKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6ZXZlbnREZXRhaWxQcmVwKCRldmVudERldGFpbHNbJHR5cGVdWyRrZXldLCAkd2hhdCwgJHByaWNlQ29udmVydGlvbik7DQoJCX0NCgkJLy8gaWYgbm90IHNldCByZXRyeSwgYnkgc2V0dGluZyBpdA0KCQlpZiAoJHJldHJ5KQ0KCQl7DQoJCQlzZWxmOjpzZXRFdmVudE9wdGlvbnMoKTsNCgkJCXJldHVybiBzZWxmOjpnZXRFdmVudERldGFpbHMoJGtleSwgJHdoYXQsICR0eXBlLCBmYWxzZSwgJHByaWNlQ29udmVydGlvbik7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZXZlbnREZXRhaWxQcmVwKCYkdmFsdWVzLCAmJHdoYXQsICRwcmljZUNvbnZlcnRpb24pDQoJew0KCQlpZiAoJ3ByaWNlJyA9PT0gJHdoYXQgJiYgJHByaWNlQ29udmVydGlvbikNCgkJew0KCQkJLy8gdXNlZCBmb3IgdGhlIGludm9pY2UgdmlldyBtYWlubHkNCgkJCSRqaW5wdXQgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5pbnB1dDsNCgkJCSRkYXRhID0gJGppbnB1dC0+Z2V0QXJyYXkoYXJyYXkoDQoJCQkJJ29yZ2FuaXplcl9jdXJyZW5jeScgPT4gJ3dvcmQnLA0KCQkJCSdyZWdpc3RlcmVkX3VzZXJfY3VycmVuY3knID0+ICd3b3JkJywNCgkJCQknZXhjaGFuZ2VfcmF0ZScgPT4gJ2Zsb2F0Jw0KCQkJKSk7DQoJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGRhdGFbJ29yZ2FuaXplcl9jdXJyZW5jeSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZGF0YVsncmVnaXN0ZXJlZF91c2VyX2N1cnJlbmN5J10pKQ0KCQkJew0KCQkJCSRjaGVjayA9ICRkYXRhWydvcmdhbml6ZXJfY3VycmVuY3knXS4kZGF0YVsncmVnaXN0ZXJlZF91c2VyX2N1cnJlbmN5J107DQoJCQkJJG9yZ2FuaXplcl9jdXJyZW5jeSA9ICdOT05FJzsNCgkJCQlpZiAoaXNzZXQoJHZhbHVlc1sncHJpY2VPYmplY3QnXVsnRVhDSEFOR0VfUkFURV9OQU1FJ10pICYmICRjaGVjayA9PT0gJHZhbHVlc1sncHJpY2VPYmplY3QnXVsnRVhDSEFOR0VfUkFURV9OQU1FJ10pDQoJCQkJew0KCQkJCQlyZXR1cm4gJHZhbHVlc1skd2hhdF07DQoJCQkJfQ0KCQkJCS8vIGlmIGV4Y2hhbmdlIHJhdGUgaXMgbm90IHNldA0KCQkJCWlmIChpc3NldCgkdmFsdWVzWydwcmljZU9iamVjdCddWydFWENIQU5HRV9SQVRFX0lEJ10pKQ0KCQkJCXsNCgkJCQkJJG9yZ2FuaXplcl9jdXJyZW5jeSA9IHNlbGY6OmdldEZyb21DdXJyZW5jeSgkdmFsdWVzWydwcmljZU9iamVjdCddWydFWENIQU5HRV9SQVRFX0lEJ10pOw0KCQkJCX0NCgkJCQlpZiAoJGRhdGFbJ2V4Y2hhbmdlX3JhdGUnXSA9PSAwICYmICRvcmdhbml6ZXJfY3VycmVuY3kgPT09ICRkYXRhWydvcmdhbml6ZXJfY3VycmVuY3knXSkNCgkJCQl7DQoJCQkJCSRyZXN1bHQgPSBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJGRhdGFbJ29yZ2FuaXplcl9jdXJyZW5jeSddLCAkdmFsdWVzWyR3aGF0XSwgJGRhdGFbJ3JlZ2lzdGVyZWRfdXNlcl9jdXJyZW5jeSddKTsNCgkJCQkJLy8gbm93IHVwZGF0ZSB0aGUgZGF0YQ0KCQkJCQlyZXR1cm4gJHJlc3VsdFsnRVhDSEFOR0VfUkFURV9UTyddOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlyZXR1cm4gYmNtdWwoJHZhbHVlc1skd2hhdF0sICRkYXRhWydleGNoYW5nZV9yYXRlJ10sIDIpOw0KCQkJCX0NCgkJCX0NCgkJCS8vIGZvciBvdGhlciB2aWV3cw0KCQkJZWxzZWlmIChpc3NldCgkdmFsdWVzWydwcmljZU9iamVjdCddWydFWENIQU5HRV9SQVRFX0lEJ10pKQ0KCQkJew0KCQkJCSRvcmdhbml6ZXJfY3VycmVuY3kgPSBzZWxmOjpnZXRGcm9tQ3VycmVuY3koJHZhbHVlc1sncHJpY2VPYmplY3QnXVsnRVhDSEFOR0VfUkFURV9JRCddKTsNCgkJCQkkYWN0aXZlX2N1cnJlbmN5ID0gIHNlbGY6OmdldFVzZXJDdXJyZW5jeSgpOw0KCQkJCSRyZXN1bHQgPSBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJG9yZ2FuaXplcl9jdXJyZW5jeSwgJHZhbHVlc1skd2hhdF0sICRhY3RpdmVfY3VycmVuY3kpOw0KCQkJCS8vIG5vdyB1cGRhdGUgdGhlIGRhdGENCgkJCQlyZXR1cm4gJHJlc3VsdFsnRVhDSEFOR0VfUkFURV9UTyddOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkdmFsdWVzWyR3aGF0XTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEZyb21DdXJyZW5jeSgkZXhjaGFuZ2VfSUQpDQoJew0KCQkkZnJvbUFycmF5ID0gYXJyYXlfbWFwKCdzdHJ0b3VwcGVyJywgKGFycmF5KSBleHBsb2RlKCctJywgJGV4Y2hhbmdlX0lEKSk7DQoJCXJldHVybiAkZnJvbUFycmF5WzBdOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0RXZlbnRPcHRpb25zKCkNCgl7DQoJCSRldmVudHMgPSBzZWxmOjpnZXRWYXJzKCdldmVudCcsIDEsICdwdWJsaXNoZWQnKTsNCgkJLy8gb25seSBjb250aW51ZSBpZiB3ZSBoYXZlIGFuIGFycmF5DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZXZlbnRzKSkNCgkJew0KCQkJJGJ1Y2tldCA9IGFycmF5KCk7ICRidWNrZXRbJ25hbWUnXSA9IGFycmF5KCk7ICAkYnVja2V0WydpZCddID0gYXJyYXkoKTsNCgkJCWZvcmVhY2goJGV2ZW50cyBhcyAkaXRlbSkNCgkJCXsNCgkJCQlpZiAoJGV2ZW50T3B0aW9ucyA9IHNlbGY6OmdldEV2ZW50KCRpdGVtLCAnb3B0aW9ucycpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCgkZXZlbnRPcHRpb25zIGFzICRldmVudCkNCgkJCQkJew0KCQkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudCkpDQoJCQkJCQl7DQoJCQkJCQkJZm9yZWFjaCAoJGV2ZW50IGFzICRvcHRpb24pDQoJCQkJCQkJew0KCQkJCQkJCQkkb3B0aW9uWydfbmFtZSddID0gKGlzc2V0KCRvcHRpb25bJ2RhdGUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJG9wdGlvblsnZGF0ZSddKSkgPyAgJG9wdGlvblsnbmFtZSddLiAnIH4gJyAuICRvcHRpb25bJ2RhdGUnXSA6ICAkb3B0aW9uWyduYW1lJ107DQoJCQkJCQkJCSRzZWxlY3QgPSBKRmlsdGVyT3V0cHV0OjpjbGVhblRleHQoJG9wdGlvblsnX25hbWUnXSk7DQoJCQkJCQkJCS8vIHN0b3JlIGluIHNlc3Npb24NCgkJCQkJCQkJJGtleSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlbGVjdCk7DQoJCQkJCQkJCSRvcHRpb25bJ3NlbGVjdCddID0gICRzZWxlY3Q7DQoJCQkJCQkJCSRidWNrZXRbJ25hbWUnXVska2V5XSA9ICRvcHRpb247DQoJCQkJCQkJCSRidWNrZXRbJ2lkJ11bJG9wdGlvblsnaWQnXV0gPSAkb3B0aW9uOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkYnVja2V0WydpZCddKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXQoJ2V2ZW50RGV0YWlsc1ZETScsICRidWNrZXQpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVFdmVudERldGFpbCgka2V5LCAkdmFsdWVzKQ0KCXsNCgkJLy8gZ2V0IHRoZSBldmVudCBEZXRhaWxzIGZyb20gbWVtb3J5DQoJCSRldmVudERldGFpbHMgPSBzZWxmOjpnZXQoJ2V2ZW50RGV0YWlsc1ZETScsIG51bGwpOw0KCQkvLyBtYWtlIHN1cmUgdGhlIGlkIGlzIGZvdW5kDQoJCWlmICgkZXZlbnREZXRhaWxzICYmIGlzc2V0KCRldmVudERldGFpbHNbJ2lkJ11bJGtleV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRldmVudERldGFpbHNbJ2lkJ11bJGtleV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR2YWx1ZXMpKQ0KCQl7DQoJCQkkc2VsZWN0ID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkZXZlbnREZXRhaWxzWydpZCddWyRrZXldWydzZWxlY3QnXSk7DQoJCQlmb3JlYWNoICgkdmFsdWVzIGFzICRmaWVsZCA9PiAkdmFsdWUpDQoJCQl7DQoJCQkJLy8gdXBkYXRlIHRoZSBmaWVsZCBpbiBJRA0KCQkJCSRldmVudERldGFpbHNbJ2lkJ11bJGtleV1bJGZpZWxkXSA9ICR2YWx1ZTsNCgkJCQkvLyB1cGRhdGUgdGhlIGZpZWxkIGluIHNlbGVjdGlvbg0KCQkJCSRldmVudERldGFpbHNbJ25hbWUnXVskc2VsZWN0XVskZmllbGRdID0gJHZhbHVlOw0KCQkJfQ0KCQkJLy8gc3RvcmUgYmFjayB0byBtZW1vcnkNCgkJCXNlbGY6OnNldCgnZXZlbnREZXRhaWxzVkRNJywgJGV2ZW50RGV0YWlscyk7DQoJCX0NCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldEV2ZW50U3RhcnREYXRlKCRkYXRlcykNCgl7DQoJCWlmIChpc3NldCgkZGF0ZXNbJ3N0YXJ0J10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRlc1snc3RhcnQnXSkpDQoJCXsNCgkJCSRzdGFydCA9IHN0cnRvdGltZSgnMDAtMDAtMzAwMCAwMDowMDowMCcpOw0KCQkJJGZvdW5kID0gZmFsc2U7DQoJCQlmb3JlYWNoICgkZGF0ZXNbJ3N0YXJ0J10gYXMgJGRhdGUpDQoJCQl7DQoJCQkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRkYXRlKSkNCgkJCQl7DQoJCQkJCSR0aW1lID0gc3RydG90aW1lKCRkYXRlKTsNCgkJCQkJaWYgKCR0aW1lIDwgJHN0YXJ0KQ0KCQkJCQl7DQoJCQkJCQkkc3RhcnQgPSAkdGltZTsNCgkJCQkJCSRmb3VuZCA9IHRydWU7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlpZiAoJGZvdW5kKQ0KCQkJew0KCQkJCXJldHVybiBhcnJheSgndGV4dCcgPT4gc2VsZjo6ZmFuY3lEYXlUaW1lRGF0ZSgkc3RhcnQpLCAnaW50JyA9PiBiY2RpdigoaW50KSAkc3RhcnQsIDM2MDApKTsNCgkJCX0JDQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJcmV0dXJuIGFycmF5KCd0ZXh0JyA9PiBUZXh0OjpfKCdOb3QgU2V0JyksICdpbnQnID0+IDApOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0RXZlbnRUZWFzZXJJbWFnZSgkaXRlbSwgJGZpbGVMaW5rLCAkZGVmYXVsdF90ZWFzZXJfaW1hZ2UpDQoJew0KCQkkdGVhc2VyX2ltYWdlID0gJyc7DQoJCS8vIGxvYWQgdGhlIGV2ZW50IHRlYXNlciBpbWFnZQ0KCQlpZiAoaXNzZXQoJGl0ZW0tPnRlYXNlcl9pbWFnZSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPnRlYXNlcl9pbWFnZSkgJiYgc3RycG9zKCRpdGVtLT50ZWFzZXJfaW1hZ2UsICdfJykgIT09IGZhbHNlKQ0KCQl7DQoJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsICRpdGVtLT50ZWFzZXJfaW1hZ2UpOw0KCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJew0KCQkJCSR0ZWFzZXJfaW1hZ2UgPSAnPGltZyBjbGFzcz0idWstdGh1bWJuYWlsIHVrLW1hcmdpbiIgc3JjPSInLiRmaWxlTGluay4kaXRlbS0+dGVhc2VyX2ltYWdlLicuJy4kZXh0ZW50aW9uWzJdLiciIGFsdD0iJy4kaXRlbS0+bmFtZS4nIj4nOw0KCQkJfQ0KCQl9DQoJCS8vIHNldCBkZWZhdWx0IHRlYXNlciBpbWFnZSwgaWYgb25lIGlzIG5vdCBzZXQNCgkJaWYgKCFTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGVhc2VyX2ltYWdlKSkNCgkJew0KCQkJJHRlYXNlcl9pbWFnZSA9ICRkZWZhdWx0X3RlYXNlcl9pbWFnZTsNCgkJfQ0KCQlyZXR1cm4gJHRlYXNlcl9pbWFnZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRCdXR0b25zKCRpdGVtLCAkdHlwZSwgJHVzZXIsICRuYW1lLCAkaWQsICRjaGVja2VkX291dCwgJG9yZ2FuaXplcl9uYW1lID0gJ29yZ2FuaXplcicsICRlcG9zY29kZSA9ICdlcG9zY29kZScsICRzbHVnID0gJ3NsdWcnKQ0KCXsNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRpdGVtKSkNCgkJew0KCQkJJGl0ZW0gPSAoYXJyYXkpICRpdGVtOw0KCQl9DQoJCSRlZGl0ID0gVXJpOjpyb290KCkuImluZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ2aWV3PWV2ZW50cyZ0YXNrPSIuJHR5cGUuIi5lZGl0JnJlZj1ldmVudHMiOw0KCQkkY2FuQ2hlY2tpbiA9ICRpdGVtWyRjaGVja2VkX291dF0gPT0gJHVzZXItPmlkIHx8ICRpdGVtWyRjaGVja2VkX291dF0gPT0gMDsNCgkJJGNhbkVkaXQgPSBzZWxmOjpoYXNBY2Nlc3MoJGl0ZW1bJGlkXSwgJHVzZXItPmlkLCAkdHlwZSk7DQoJCSRzdGFydCA9ICc8ZGl2IGNsYXNzPSJ1ay1idXR0b24tZ3JvdXAgdWstd2lkdGgtMS0xIj4nOw0KCQkkZW5kID0gJzwvZGl2Pic7DQoJCSRidXR0b24gPSBhcnJheSgpOw0KCQkkc2l6ZSA9IDE7DQoJCWlmICgkY2FuRWRpdCAmJiAhJGl0ZW1bJGNoZWNrZWRfb3V0XSkNCgkJew0KCQkJJGJ1dHRvbltdID0gJyA8YSBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXdpZHRoLTEtNSIgaHJlZj0iJy4kZWRpdC4nJmlkPScuJGl0ZW1bJGlkXS4nIj4nDQoJCQkJCS4gJzxpIGNsYXNzPSJ1ay1pY29uLXBlbmNpbCI+PC9pPjwvYT4nOw0KCQkJJHNpemUgPSAyOw0KCQl9DQoJCWVsc2VpZiAoJGNhbkVkaXQgJiYgJGNhbkNoZWNraW4pDQoJCXsNCgkJCSRidXR0b25bXSA9ICcgPGEgY2xhc3M9InVrLWJ1dHRvbiB1ay13aWR0aC0xLTUiIGhyZWY9IicuJGVkaXQuJyZpZD0nLiRpdGVtWyRpZF0uJyI+Jw0KCQkJCQkuICc8aSBjbGFzcz0idWstaWNvbi1sb2NrIj48L2k+PC9hPic7IA0KCQkJJHNpemUgPSAyOw0KCQl9DQoJCWVsc2VpZiAoJGNhbkVkaXQpDQoJCXsNCgkJCSRidXR0b25bXSA9ICcgPGEgY2xhc3M9InVrLWJ1dHRvbiB1ay13aWR0aC0xLTUiIGhyZWY9IiMiIGRpc2FibGVkPicNCgkJCQkJLiAnPGkgY2xhc3M9InVrLWljb24tbG9jayI+PC9pPjwvYT4nOyANCgkJCSRzaXplID0gMjsNCgkJfQ0KCQlpZiAoJHR5cGUgPT09ICdvcmdhbml6ZXInKQ0KCQl7DQoJCQkvLyBzZXQgdGhlIGNvbnRhY3QgKGVtYWlsKSBidXR0b24NCgkJCSRidXR0b25bXSA9ICcgPGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLXdpZHRoLTEtNSIgJw0KCQkJCS4gJ2RhdGEtdWstbW9kYWw9Int0YXJnZXQ6XCcjc2V0TWVzc2FnZVwnLCBjZW50ZXI6dHJ1ZX0iIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0ic2V0TWVzc2FnZShcJycuJGl0ZW1bJGVwb3Njb2RlXS4nXCcsIFwnJy4kaXRlbVskb3JnYW5pemVyX25hbWVdLidcJykiPicNCgkJCQkuICc8aSBjbGFzcz0idWstaWNvbi1lbnZlbG9wZSI+PC9pPjwvYnV0dG9uPic7DQoJCQlpZiAoMiA9PT0gJHNpemUpDQoJCQl7DQoJCQkJJHNpemUgPSAzOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRzaXplID0gMjsNCgkJCX0NCgkJfQ0KCQlpZiAoMiA9PT0gJHNpemUpDQoJCXsNCgkJCSRidXR0b25TaXplID0gJzQtNSc7DQoJCX0NCgkJZWxzZWlmICgzID09PSAkc2l6ZSkNCgkJew0KCQkJJGJ1dHRvblNpemUgPSAnMy01JzsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRzdGFydCA9ICcnOw0KCQkJJGVuZCA9ICcnOw0KCQkJJGJ1dHRvblNpemUgPSAnMS0xJzsNCgkJfQ0KCQkkdHlwZUJ1dHRvbiA9IHNlbGY6OmdldFR5cGVCdXR0b24oJGl0ZW0sICR0eXBlLCAkaWQsICRzbHVnKTsNCgkJLy8gc2V0IHRoZSBtYWluIGJ1dHRvbg0KCQkkYnV0dG9uW10gPSAnIDwnLiR0eXBlQnV0dG9uWyd0eXBlJ10uJyBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1zdWNjZXNzIHVrLXdpZHRoLScuJGJ1dHRvblNpemUuJyIgJy4kdHlwZUJ1dHRvblsnYWN0aW9uJ10uJz4nDQoJCQkuICR0eXBlQnV0dG9uWydpY29uJ10gLiAkaXRlbVskbmFtZV0gLiAkdHlwZUJ1dHRvblsnZXh0cmFUZXh0J10gLiAnPC8nLiR0eXBlQnV0dG9uWyd0eXBlJ10uJz4nOw0KCQkvLyBzZXQgZ3JvdXAgYnV0dG9uDQoJCXJldHVybiAkc3RhcnQuaW1wbG9kZSgnJywgJGJ1dHRvbikuJGVuZDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFR5cGVCdXR0b24oJGl0ZW0sICR0eXBlLCAkaWQsICRzbHVnKQ0KCXsNCgkJLy8gc2V0IHRoZSBtYWluIHN0dWZmDQoJCSRidXR0b24gPSBhcnJheSgpOw0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgJ2V2ZW50JzoNCgkJCQkkYnV0dG9uWydhY3Rpb24nXSA9ICcgaHJlZj0iJy5Kb29tbGFfX19kNGM3NjA5OV80YzMyXzQwOGFfODcwMV9kMGE3MjQ0ODRkZmRfX19Qb3dlcjo6XyhbW1tDb21wb25lbnRdXV1IZWxwZXJSb3V0ZTo6Z2V0UmVnaXN0cnlSb3V0ZSgkaXRlbVskc2x1Z10pKS4nIiAnOw0KCQkJCSRidXR0b25bJ3R5cGUnXSA9ICdhJzsNCgkJCQkkYnV0dG9uWydleHRyYVRleHQnXSA9ICcgKCcgLiBUZXh0OjpfKCdHZXQgTW9yZSBJbmZvJykgLiAnKSc7DQoJCQlicmVhazsNCgkJCWRlZmF1bHQ6DQoJCQkJJGJ1dHRvblsnYWN0aW9uJ10gPSAnIHR5cGU9ImJ1dHRvbiIgZGF0YS11ay1tb2RhbD0ie3RhcmdldDpcJyNpdGVtLWluZm8tZnVsbFwnfSIgb25jbGljaz0iZ2V0SXRlbURhdGFGdWxsKFwnJy4kdHlwZS4nX18nLiRpdGVtWyRpZF0uJ1wnKSIgJzsNCgkJCQkkYnV0dG9uWyd0eXBlJ10gPSAnYnV0dG9uJzsNCgkJCQkkYnV0dG9uWydleHRyYVRleHQnXSA9ICcnOw0KCQl9DQoJCS8vIHNldCB0aGUgaWNvbg0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgJ2V2ZW50JzoNCgkJCQkkYnV0dG9uWydpY29uJ10gPSAnPGkgY2xhc3M9InVrLWljb24tc2hvcHBpbmctY2FydCI+PC9pPiAnOw0KCQkJYnJlYWs7DQoJCQljYXNlICdvcmdhbml6ZXInOg0KCQkJCSRidXR0b25bJ2ljb24nXSA9ICc8aSBjbGFzcz0idWstaWNvbi11c2VyIj48L2k+ICc7DQoJCQlicmVhazsNCgkJCWNhc2UgJ3ZlbnVlJzoNCgkJCQkkYnV0dG9uWydpY29uJ10gPSAnPGkgY2xhc3M9InVrLWljb24tbWFwLW1hcmtlciI+PC9pPiAnOw0KCQkJYnJlYWs7DQoJCQlkZWZhdWx0Og0KCQkJCSRidXR0b25bJ2ljb24nXSA9ICcnOwkNCgkJfQ0KCQlyZXR1cm4gJGJ1dHRvbjsNCgl9DQoNCgkvKioNCgkqICBHZXQgYWxsIGl0ZW1zIGluIENhcnQNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2FydCgkc3RhdHVzID0gMSwgJGJvdGggPSB0cnVlKQ0KCXsNCgkJLy8gYWx3YXlzIGNoZWNrIGZvciBwdWJsaWMga2V5DQoJCSRwdWJsaWMgPSBzZWxmOjpnZXQoJ3B1YmxpY0tlZVknLCBudWxsKTsNCgkJLy8gZ2V0IHVzZXIgb2JqZWN0DQoJCSR1c2VySXMgPSBzZWxmOjp1c2VySXMobnVsbCwgdHJ1ZSk7DQoJCS8vIG5vdyBjaGVjayB0aGUgaWQgYWdhaW5zdCB0aGUgcmVnaXN0ZXJlZCB2YWx1ZXMNCgkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLmtleScpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3JlZ2lzdGVyJywgJ2EnKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2V2ZW50JywgJ2UnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuZXZlbnQnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2UuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2Euc3RhdHVzID0gJyAuIChpbnQpICRzdGF0dXMpOw0KCQkkcXVlcnktPm9yZGVyKCdlLm5hbWUgQVNDJyk7DQoJCWlmICgkdXNlcklzWydpcyddID09IDEgJiYgJHVzZXJJc1snaWQnXSA+IDApDQoJCXsNCgkJCWlmICgkcHVibGljICYmICRib3RoID09PSB0cnVlKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykgLiAnIE9SIGEucmVnaXN0ZXJlZF91c2VyID0gJy4gKGludCkgJHVzZXJJc1snaWQnXSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYS5yZWdpc3RlcmVkX3VzZXIgPSAnLiAoaW50KSAkdXNlcklzWydpZCddKTsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCRwdWJsaWMpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCS8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNhcnQgaXRlbXMNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCSRyZWdpc3RyYXRpb25zID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJZm9yZWFjaCAoJHJlZ2lzdHJhdGlvbnMgYXMgJHJlZykNCgkJCXsNCgkJCQkvLyBvcmdhbml6ZXJfZXZlbnRfYnVuZGxlX3RpbWVfY29uY2VwdF92YXJpYXRpb24NCgkJCQkkZ2V0ID0gZXhwbG9kZSgnXycsICRyZWctPmtleSk7DQoJCQkJJGlkID0gbWQ1KCRyZWctPmtleSk7DQoJCQkJLy8gbG9hZCB0aGUgdmFsdWVzDQoJCQkJaWYgKCFpc3NldCgkYnVja2V0WyRnZXRbMF1dKSkNCgkJCQl7DQoJCQkJCSRidWNrZXRbJGdldFswXV0gPSBhcnJheSgpOw0KCQkJCX0NCgkJCQkvLyBjb3VudCB0aGUgbnVtYmVyIG9mIHJlZ2lzdHJhdGlvbnMgZm9yIHRoaXMgdmFyaWF0aW9uIGFuZCBzZXQgaXRzIG5lZWRlZCB2YWx1ZXMNCgkJCQlpZiAoIWlzc2V0KCRidWNrZXRbJGdldFswXV1bJGlkXSkpDQoJCQkJew0KCQkJCQkkYnVja2V0WyRnZXRbMF1dWyRpZF0gPSBhcnJheSgpOw0KCQkJCQkkYnVja2V0WyRnZXRbMF1dWyRpZF1bJ3F0eSddID0gMTsNCgkJCQkJJGJ1Y2tldFskZ2V0WzBdXVskaWRdWydldmVudCddID0gKGludCkgJGdldFsxXTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGJ1Y2tldFskZ2V0WzBdXVskaWRdWydxdHknXSsrOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkYnVja2V0Ow0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqICBDaGVjayBpZiB0aGUgcXR5IGlzIHN0aWxsIGF2YWlsYWJsZQ0KCSovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhY3RpdmVDYXJ0UXR5KCRrZXlJRCkNCgl7DQoJCS8vIGFsd2F5cyBjaGVjayBmb3IgcHVibGljIGtleQ0KCQkkcHVibGljID0gc2VsZjo6Z2V0KCdwdWJsaWNLZWVZJywgbnVsbCk7DQoJCS8vIGdldCB1c2VyIG9iamVjdA0KCQkkdXNlcklzID0gc2VsZjo6dXNlcklzKG51bGwsIHRydWUpOw0KCQkvLyBub3cgY2hlY2sgdGhlIGlkIGFnYWluc3QgdGhlIHJlZ2lzdGVyZWQgdmFsdWVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgnYS5pZCcpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fcmVnaXN0ZXInLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5rZXkgPSAnIC4gJGRiLT5xdW90ZSgka2V5SUQpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5zdGF0dXMgPSAxJyk7DQoJCWlmICgkdXNlcklzWydpcyddID09IDEgJiYgJHVzZXJJc1snaWQnXSA+IDApDQoJCXsNCgkJCWlmICgkcHVibGljKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykgLiAnIE9SIGEucmVnaXN0ZXJlZF91c2VyID0gJy4gKGludCkgJHVzZXJJc1snaWQnXSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYS5yZWdpc3RlcmVkX3VzZXIgPSAnLiAoaW50KSAkdXNlcklzWydpZCddKTsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCRwdWJsaWMpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGljID0gJyAuICRkYi0+cXVvdGUoJHB1YmxpYykpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcmV0dXJuIDA7DQoJCX0NCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJLy8gcmV0dXJuIHRoZSBudW1iZXIgb2YgY2FydCBpdGVtcw0KCQlyZXR1cm4gKGludCkgJGRiLT5nZXROdW1Sb3dzKCk7DQoJfQ0KDQoJLyoqDQoJKiAgQ2hlY2sgaWYgdGhlIHF0eSBpcyBzdGlsbCBhdmFpbGFibGUNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UXR5QXZhaWxhYmxlKCRxdHksICR0eXBlLCAka2V5SUQpDQoJew0KCQlpZiAoKCd2YXJpYXRpb24nID09PSAkdHlwZSB8fCAnZXZlbnQnID09PSAkdHlwZSkgJiYgKChpc19udW1lcmljKCRxdHkpICYmICRxdHkgPiAwKSB8fCAndGFrZW4nID09PSAkcXR5KSkNCgkJew0KCQkJLy8gbm93IGNoZWNrIHRoZSBpZCBhZ2FpbnN0IHRoZSByZWdpc3RlcmVkIHZhbHVlcw0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9yZWdpc3RlcicsICdhJykpOw0KCQkJaWYgKCd2YXJpYXRpb24nID09PSAkdHlwZSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCdhLmtleSA9ICcgLiAkZGItPnF1b3RlKCRrZXlJRCkpOw0KCQkJfQ0KCQkJZWxzZWlmICgnZXZlbnQnID09PSAkdHlwZSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCdhLmV2ZW50ID0gJyAuIChpbnQpICRrZXlJRCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcmV0dXJuICRxdHk7DQoJCQl9DQoJCQkkcXVlcnktPndoZXJlKCdhLnN0YXR1cyA+PSAxJyk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCSRyZWdpc3RlcmVkID0gJGRiLT5nZXROdW1Sb3dzKCk7DQoJCQlpZiAoJ3Rha2VuJyA9PT0gJHF0eSkNCgkJCXsNCgkJCQlyZXR1cm4gJHJlZ2lzdGVyZWQ7DQoJCQl9DQoJCQlpZiAoJHJlZ2lzdGVyZWQgPj0gJHF0eSkNCgkJCXsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCXJldHVybiBiY3N1YigkcXR5LCAkcmVnaXN0ZXJlZCk7DQoJCX0NCgkJcmV0dXJuICRxdHk7DQoJfQ0KDQoJLyoqDQoJKiBAIHJldHVybiBmbG9hdCBvbiBzdWNjZXNzDQoJKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldENvbmNlcHRQcmljZSgka2V5KQ0KCXsNCgkJLy8gZmlyc3Qgd2UgZ2V0IHRoZSByYXcgc2V0IHByaWNlIChpbiBvcmdhbml6ZXJzIGN1cnJlbmN5KQ0KCQlpZiAoaXNzZXQoc2VsZjo6JGV2ZW50LT5jb3N0WydwcmljZSddWyRrZXldKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmNvc3RbJ3ByaWNlJ11bJGtleV0pKQ0KCQl7DQoJCQkkb3JnUmF3ID0gc2VsZjo6JGZpbHRlcklucHV0LT5jbGVhbihzZWxmOjokZXZlbnQtPmNvc3RbJ3ByaWNlJ11bJGtleV0pOw0KCQkJaWYgKCFTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkb3JnUmF3KSkNCgkJCXsNCgkJCQkkb3JnUmF3ID0gIjAuMDAiOw0KCQkJfQ0KCQkJLy8gZ2V0IG9yZ2FuaXplciBjdXJyZW5jeQ0KCQkJaWYgKCRvcmdDdXJyZW5jeSA9IHNlbGY6OmdldEV2ZW50Q3VycmVuY3koKSkNCgkJCXsNCgkJCQlpZiAoc2VsZjo6JHJldHVyblR5cGUgPT0gJ3NpdGUnKQ0KCQkJCXsNCgkJCQkJLy8gZ2V0IHRoZSBhY3RpdmUgcGFydHkgY3VycmVuY3kNCgkJCQkJJGFjdGl2ZUN1cnJlbmN5ID0gc2VsZjo6Z2V0KCdBQ1RJVkVfQ1VSUkVOQ1knKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJGFjdGl2ZUN1cnJlbmN5ID0gJG9yZ0N1cnJlbmN5Ow0KCQkJCX0NCgkJCQkvLyBzZXQgYWN0aXZlIHByaWNlIG9iamVjdA0KCQkJCXJldHVybiBzZWxmOjpnZXRFeGNoYW5nZVJhdGUoJG9yZ0N1cnJlbmN5LCAkb3JnUmF3LCAkYWN0aXZlQ3VycmVuY3kpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBAcmV0dXJuIG1peGVkDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRDb25jZXB0c0hUTUwoKQ0KCXsNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRjb25jZXB0SFRNTCkpDQoJCXsNCgkJCSR0aGlzRXZlbnQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoc2VsZjo6JGNvbmNlcHRIVE1MIGFzICRldmVudF9jb25jZXB0X190aW1lID0+ICRIVE1MKQ0KCQkJew0KCQkJCSRsb29raW5nID0gZXhwbG9kZSgnXycsJGV2ZW50X2NvbmNlcHRfX3RpbWUpOw0KCQkJCWlmIChzZWxmOjokZXZlbnQtPmlkID09ICRsb29raW5nWzBdKQ0KCQkJCXsNCgkJCQkJJHRoaXNFdmVudFskZXZlbnRfY29uY2VwdF9fdGltZV0gPSAkSFRNTDsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRoaXNFdmVudCkpDQoJCQl7DQoJCQkJcmV0dXJuICR0aGlzRXZlbnQ7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEByZXR1cm4gbWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldEV2ZW50T3B0aW9ucygpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50T3B0aW9uc1snb3B0aW9ucyddKSkNCgkJew0KCQkJJHRoaXNFdmVudCA9IGFycmF5KCk7DQoJCQlmb3JlYWNoIChzZWxmOjokZXZlbnRPcHRpb25zWydvcHRpb25zJ10gYXMgJGV2ZW50X2NvbmNlcHRfX3RpbWUgPT4gJG9wdGlvbnMpDQoJCQl7DQoJCQkJJGxvb2tpbmcgPSBleHBsb2RlKCdfJywkZXZlbnRfY29uY2VwdF9fdGltZSk7DQoJCQkJaWYgKHNlbGY6OiRldmVudC0+aWQgPT0gJGxvb2tpbmdbMF0pDQoJCQkJew0KCQkJCQkkdGhpc0V2ZW50WyRldmVudF9jb25jZXB0X190aW1lXSA9ICRvcHRpb25zOw0KCQkJCX0NCgkJCX0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGhpc0V2ZW50KSkNCgkJCXsNCgkJCQlyZXR1cm4gJHRoaXNFdmVudDsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRldmVudF9jb25jZXB0X3RpbWUNCgkgKiBAcmV0dXJuIG1peGVkDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRDb25zZXB0SWQoJGV2ZW50X2NvbmNlcHRfdGltZSkNCgl7DQoJCWlmIChpc3NldChzZWxmOjokY29uY2VwdHNbJGV2ZW50X2NvbmNlcHRfdGltZV0pKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6JGNvbmNlcHRzWyRldmVudF9jb25jZXB0X3RpbWVdOw0KCQl9DQoJCXJldHVybiAkZXZlbnRfY29uY2VwdF90aW1lOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkZXZlbnRfY29uY2VwdF90aW1lDQoJICogQHJldHVybiBpbnR8bWl4ZWQNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldExvY2F0aW9uKCRldmVudF9jb25jZXB0X3RpbWUpDQoJew0KCQlpZiAoaXNzZXQoc2VsZjo6JGxvY2F0aW9uc1skZXZlbnRfY29uY2VwdF90aW1lXSkpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokbG9jYXRpb25zWyRldmVudF9jb25jZXB0X3RpbWVdOw0KCQl9DQoJCXJldHVybiA5OTk5Ow0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkbG9jYXRpb24NCgkgKiBAcmV0dXJuIGJvb2x8c3RyaW5nDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRFdmVudENvbmNlcHRUaW1lKCRsb2NhdGlvbikNCgl7DQoJCWlmIChpc3NldChzZWxmOjokZXZlbnQtPmRhdGVbJ3N0YXJ0J11bJGxvY2F0aW9uXSkgJiYgaXNzZXQoc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J11bJGxvY2F0aW9uXSkpDQoJCXsNCgkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmRhdGVbJ3N0YXJ0J11bJGxvY2F0aW9uXSkpDQoJCQl7DQoJCQkJJHRpbWVzdGFtcCA9IHN0cnRvdGltZShzZWxmOjokZXZlbnQtPmRhdGVbJ3N0YXJ0J11bJGxvY2F0aW9uXSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRpbWVzdGFtcCA9IDA7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JGV2ZW50LT5pZC4nXycuc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J11bJGxvY2F0aW9uXS4nX18nLiR0aW1lc3RhbXA7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0RGF0ZXMoKQ0KCXsNCgkJaWYgKGlzc2V0KHNlbGY6OiRldmVudC0+ZGF0ZVsnY29uY2VwdCddKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokZXZlbnQtPmRhdGVbJ2NvbmNlcHQnXSkpDQoJCXsNCgkJCSR0eXBlcyA9IGFycmF5KCdzdGFydCcsICdlbmQnKTsNCgkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0J10gPSBzdHJ0b3RpbWUoJzIzMDAtMDAtMDAnKTsNCgkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2VuZCddID0gc3RydG90aW1lKCcwMDAwLTAwLTAwJyk7DQoJCQlzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ10gPSBhcnJheSgpOw0KCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXSA9IGFycmF5KCk7DQoJCQlmb3JlYWNoKCAkdHlwZXMgYXMgJHR5cGUpDQoJCQl7DQoJCQkJZm9yZWFjaCAoc2VsZjo6JGV2ZW50LT5kYXRlWyR0eXBlXSBhcyAkbnIgPT4gJGRhdGUpDQoJCQkJew0KCQkJCQkvLyBnZXQgdGhlIGtleQ0KCQkJCQlpZiAoJGtleSA9IHNlbGY6OmdldEV2ZW50Q29uY2VwdFRpbWUoJG5yKSkNCgkJCQkJew0KCQkJCQkJLy8gcHJlcCB0aGUgZGF0YQ0KCQkJCQkJJGRhdGUgPSBzZWxmOjokZmlsdGVySW5wdXQtPmNsZWFuKCRkYXRlKTsNCgkJCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkZGF0ZSkpDQoJCQkJCQl7DQoJCQkJCQkJJHRpbWVzdGFtcCA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCQkJCQkJaWYgKCgnc3RhcnQnID09ICR0eXBlKSAmJiBzZWxmOjokZXZlbnRCdWlsZGVyWyR0eXBlXSA+ICR0aW1lc3RhbXApDQoJCQkJCQkJew0KCQkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWyR0eXBlXSA9ICR0aW1lc3RhbXA7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoKCdlbmQnID09ICR0eXBlKSAmJiBzZWxmOjokZXZlbnRCdWlsZGVyWyR0eXBlXSA8ICR0aW1lc3RhbXApDQoJCQkJCQkJew0KCQkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWyR0eXBlXSA9ICR0aW1lc3RhbXA7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIHNldCB0aW1lIHN0YW1wDQoJCQkJCQkJaWYgKCFpc3NldChzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ11bJGtleV0pKQ0KCQkJCQkJCXsNCgkJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsndGltZXN0YW1wcyddWyRrZXldID0gYXJyYXkoKTsNCgkJCQkJCQl9DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsndGltZXN0YW1wcyddWyRrZXldWyR0eXBlXSA9ICR0aW1lc3RhbXA7DQoJCQkJCQl9DQoJCQkJCQkvLyBzZXQgZ2xvYmFsIGNvbmNlcHQga2V5cw0KCQkJCQkJaWYgKCdzdGFydCcgPT0gJHR5cGUpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGNvbmNlcHRzWyRrZXldID0gc2VsZjo6JGV2ZW50LT5kYXRlWydjb25jZXB0J11bJG5yXTsNCgkJCQkJCQlzZWxmOjokbG9jYXRpb25zWyRrZXldID0gJG5yOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgdGltZSBhcmUgc2V0DQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGV2ZW50QnVpbGRlclsndGltZXN0YW1wcyddKSkNCgkJCXsNCgkJCQkvLyBub3cgbG9vcCB0aGUgdGltZSBzdGFtcHMNCgkJCQlmb3JlYWNoIChzZWxmOjokZXZlbnRCdWlsZGVyWyd0aW1lc3RhbXBzJ10gYXMgJG9uID0+ICRkYXRlcykNCgkJCQl7DQoJCQkJCWlmIChpc3NldCgkZGF0ZXNbJ3N0YXJ0J10pICYmIGlzc2V0KCRkYXRlc1snZW5kJ10pKQ0KCQkJCQl7DQoJCQkJCQlpZiAoIWlzc2V0KHNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJG9uXSkpDQoJCQkJCQl7DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXVskb25dID0gYXJyYXkoKTsNCgkJCQkJCX0NCgkJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ2RhdGVzJ11bJG9uXVsnc3RhcnQnXSA9IHNlbGY6OmZhbmN5RGF0ZSgkZGF0ZXNbJ3N0YXJ0J10pOw0KCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXVskb25dWydlbmQnXSA9IHNlbGY6OmZhbmN5RGF0ZSgkZGF0ZXNbJ2VuZCddKTsNCgkJCQkJCWlmIChkYXRlKCdZbWQnLCAkZGF0ZXNbJ3N0YXJ0J10pID09IGRhdGUoJ1ltZCcsICRkYXRlc1snZW5kJ10pKQ0KCQkJCQkJew0KCQkJCQkJCS8vIHNhbWUgZGF5DQoJCQkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnZGF0ZXMnXVskb25dWydzdGFydC1lbmQnXSA9ICAJc2VsZjo6ZmFuY3lUaW1lKCRkYXRlc1snc3RhcnQnXSkNCgkJCQkJCQkJLicgJy5UZXh0OjpfKCd0bycpLicgJy4gc2VsZjo6ZmFuY3lUaW1lKCRkYXRlc1snZW5kJ10pDQoJCQkJCQkJCS4nICcuVGV4dDo6Xygnb24gdGhlJykuJyAnLiBzZWxmOjpmYW5jeURhdGUoJGRhdGVzWydlbmQnXSk7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJLy8gYW5vdGhlciBkYXkNCgkJCQkJCQlzZWxmOjokZXZlbnRCdWlsZGVyWydkYXRlcyddWyRvbl1bJ3N0YXJ0LWVuZCddID0gIAlzZWxmOjpmYW5jeURhdGVUaW1lKCRkYXRlc1snc3RhcnQnXSkNCgkJCQkJCQkJLicgJy5UZXh0OjpfKCd0bycpLicgJy4gc2VsZjo6ZmFuY3lEYXRlVGltZSgkZGF0ZXNbJ2VuZCddKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBzZXQgdGhlIGV2ZW50IHN0YXJ0IGFuZCBlbmQgZGF0ZQ0KCQkJCWlmIChkYXRlKCdZbWQnLCBzZWxmOjokZXZlbnRCdWlsZGVyWydzdGFydCddKSA9PSBkYXRlKCdZbWQnLCBzZWxmOjokZXZlbnRCdWlsZGVyWydlbmQnXSkpDQoJCQkJew0KCQkJCQkvLyBvbmUgZGF5IGV2ZW50DQoJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0LWVuZCddID0gc2VsZjo6ZmFuY3lEYXRlKHNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0J10pOw0KCQkJCX0NCgkJCQllbHNlaWYgKGRhdGUoJ1ltJywgc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQnXSkgPT0gZGF0ZSgnWW0nLCBzZWxmOjokZXZlbnRCdWlsZGVyWydlbmQnXSkpDQoJCQkJew0KCQkJCQkvLyAgbXVsdGkgZGF5IGV2ZW50IGluIHNhbWUgbW9udGgNCgkJCQkJc2VsZjo6JGV2ZW50QnVpbGRlclsnc3RhcnQtZW5kJ10gPSAgZGF0ZSgnalMnLCBzZWxmOjokZXZlbnRCdWlsZGVyWydzdGFydCddKS4nIC0gJy4gc2VsZjo6ZmFuY3lEYXRlKHNlbGY6OiRldmVudEJ1aWxkZXJbJ2VuZCddKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gbXVsdGkgZGF5IGV2ZW50DQoJCQkJCXNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0LWVuZCddID0gc2VsZjo6ZmFuY3lEYXRlKHNlbGY6OiRldmVudEJ1aWxkZXJbJ3N0YXJ0J10pLicgLSAnLiBzZWxmOjpmYW5jeURhdGUoc2VsZjo6JGV2ZW50QnVpbGRlclsnZW5kJ10pOw0KCQkJCX0NCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRpZA0KCSAqIEBwYXJhbSAkdHlwZQ0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0QWxsVmFsdWVzKCRpZCwgJHR5cGUsICRlbmNyeXB0ZWROYW1lcyA9IGFycmF5KCkpDQoJew0KCQkvLyBub3cgbG9hZCBhbGwgY3VzdG9tIHZhbHVlcw0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJ2EuKicpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0eXBlLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5pZCA9ICcgLiAoaW50KSAkaWQpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA+PSAxJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJHJlc3VsdCA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRlbmNyeXB0ZWROYW1lcykpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGVuY3J5cHRlZE5hbWVzIGFzICRlbmNyeXB0ZWQpDQoJCQkJew0KCQkJCQlpZiAoaXNzZXQoJHJlc3VsdC0+JGVuY3J5cHRlZCkgJiYgIWVtcHR5KCRyZXN1bHQtPiRlbmNyeXB0ZWQpKQ0KCQkJCQl7DQoJCQkJCQkkcmVzdWx0LT4kZW5jcnlwdGVkID0gc2VsZjo6ZGVjcnlwdFN0cmluZygkcmVzdWx0LT4kZW5jcnlwdGVkKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkcmVzdWx0Ow0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGRlY3J5cHRTdHJpbmcoJHZhbHVlKQ0KCXsNCgkJaWYgKHNlbGY6OiRiYXNpY2tleSAmJiAhaXNfbnVtZXJpYygkdmFsdWUpICYmICR2YWx1ZSA9PT0gYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCR2YWx1ZSwgdHJ1ZSkpKQ0KCQl7DQoJCQkvLyBkZWNyeXB0ICB2YWx1ZQ0KCQkJJHZhbHVlPSBydHJpbShzZWxmOjokbG9ja2VyLT5kZWNyeXB0U3RyaW5nKCR2YWx1ZSksICJcMCIpOw0KCQl9DQoJCXJldHVybiAkdmFsdWU7DQoJfQ0KDQoJLyoqDQoJICogQHBhcmFtICRpZHMNCgkgKiBAcGFyYW0gJHR5cGUNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5hbWVzKCRpZHMsICR0eXBlKQ0KCXsNCgkJLy8gc2V0dXAgdGhlIGdldCBhcnJheQ0KCQkkZ2V0ID0gYXJyYXkoJ2EuaWQnKTsNCgkJc3dpdGNoKCR0eXBlKQ0KCQl7DQoJCQljYXNlICd2ZW51ZSc6DQoJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJJGdldFtdID0gJ2EubmFtZSc7DQoJCQkJJHRhYmxlID0gJyNfX1tbW2NvbXBvbmVudF1dXV92ZW51ZSc7DQoJCQlicmVhazsNCgkJCWNhc2UgJ2NhdGlkJzoNCgkJCQkvLyBzZXQgcmVsYXRlZCB2YWx1ZXMNCgkJCQkkZ2V0W10gPSAnYS50aXRsZSc7DQoJCQkJJHRhYmxlID0gJyNfX2NhdGVnb3JpZXMnOw0KCQkJYnJlYWs7DQoJCQljYXNlICdvcmdhbml6ZXInOg0KCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCSRnZXRbXSA9ICdhLmNvbXBhbnluYW1lJzsNCgkJCQkkZ2V0W10gPSAnYS51c2VyJzsNCgkJCQkkdGFibGUgPSAnI19fW1tbY29tcG9uZW50XV1dX29yZ2FuaXplcic7DQoJCQlicmVhazsJCQkJDQoJCX0NCgkJaWYgKCFpc3NldCgkdGFibGUpIHx8ICFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCgkJLy8gY2hlY2sgdGhlIGFycmF5IG9mIGlkcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGlkcykpDQoJCXsNCgkJCWZvcmVhY2ggKCRpZHMgYXMgJGlkKQ0KCQkJeyANCgkJCQlpZiAoIShpc19udW1lcmljKCRpZCkpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIG51bGw7DQoJCQkJfSANCgkJCX0NCgkJfQ0KCQkvLyBub3cgbG9hZCBhbGwgY3VzdG9tIHZhbHVlcw0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJGdldCkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJHRhYmxlLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5pZCBJTiAoJyAuIGltcGxvZGUoJywgJywgJGlkcykgLiAnKScpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkaXRlbXMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkNCgkJCXsNCgkJCQlzd2l0Y2goJHR5cGUpDQoJCQkJew0KCQkJCQljYXNlICd2ZW51ZSc6DQoJCQkJCQkvLyBzZXQgcmVsYXRlZCB2YWx1ZXMNCgkJCQkJCSRidWNrZXRbJGl0ZW0tPmlkXSA9ICRpdGVtLT5uYW1lOw0KCQkJCQlicmVhazsNCgkJCQkJY2FzZSAnY2F0aWQnOg0KCQkJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJCQkkYnVja2V0WyRpdGVtLT5pZF0gPSAkaXRlbS0+dGl0bGU7DQoJCQkJCWJyZWFrOw0KCQkJCQljYXNlICdvcmdhbml6ZXInOg0KCQkJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJGl0ZW0tPmNvbXBhbnluYW1lKSkNCgkJCQkJCXsNCgkJCQkJCQkkbmFtZSA9ICRpdGVtLT5jb21wYW55bmFtZTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkkbmFtZSA9IEZhY3Rvcnk6OmdldFVzZXIoJGl0ZW0tPnVzZXIpLT5uYW1lOw0KCQkJCQkJfQ0KCQkJCQkJJGJ1Y2tldFskaXRlbS0+aWRdID0gJG5hbWU7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkYnVja2V0Ow0KCQl9DQoJCXJldHVybiBudWxsOw0KCX0NCltDVVNUT01DT0RFPWltYWdlSGVscGVyc10gDQpbQ1VTVE9NQ09ERT1iYXNlU2l4dHlGb3VyVVJMXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCglwcm90ZWN0ZWQgc3RhdGljICRwbGFjZUhvbGRlcnM7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQbGFjZUhvbGRlcnMoJHR5cGUsICRpZCA9IG51bGwsICRyZWdpc3RlcmVkID0gbnVsbCwgJGNvbmZpZyA9IGFycmF5KCkpDQoJew0KCQlpZiAoJ2ludm9pY2UnID09PSAkdHlwZSkNCgkJew0KCQkJLy8gc2V0IHRvIGdsb2JhbCBpZiBub3QgZ2l2ZW4NCgkJCWlmICghJGlkICYmIHNlbGY6OiRvcmdhbml6ZXIpDQoJCQl7DQoJCQkJJGlkID0gc2VsZjo6JG9yZ2FuaXplcjsNCgkJCX0NCgkJCS8vIHNldCB0byBnbG9iYWwgaWYgbm90IGdpdmVuDQoJCQlpZiAoISRyZWdpc3RlcmVkICYmIHNlbGY6OiRyZWdpc3RlcmVkKQ0KCQkJew0KCQkJCSRyZWdpc3RlcmVkID0gc2VsZjo6JHJlZ2lzdGVyZWQ7DQoJCQl9DQoJCQlpZiAoJG9yZ2FuaXplciAmJiAkcmVnaXN0ZXJlZCkNCgkJCXsNCgkJCQkvLyBnZXQgbmVlZGVkIGRldGFpbHMNCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZC4nXycuJHJlZ2lzdGVyZWRdKSkNCgkJCQl7DQoJCQkJCSRkZXRhaWxzID0gYXJyYXkoKTsNCgkJCQkJJGRldGFpbHNbXSA9IHNlbGY6OmdldE9yZ2FuaXplckRldGFpbHMoKGludCkgJGlkKTsNCgkJCQkJJGRldGFpbHNbXSA9IHNlbGY6OmdldFJlZ2lzdGVyZWREZXRhaWxzKChpbnQpICRyZWdpc3RlcmVkKTsNCgkJCQkJc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkLidfJy4kcmVnaXN0ZXJlZF0gPSBzZWxmOjptZXJnZUFycmF5cygkZGV0YWlscyk7DQoJCQkJfQ0KCQkJCS8vIGFkZCB0aGUgY29uZmlnIGFycmF5IGlmIG5lZWRlZA0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29uZmlnKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZC4nXycuJHJlZ2lzdGVyZWRdID0gc2VsZjo6bWVyZ2VBcnJheXMoYXJyYXkoc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkLidfJy4kcmVnaXN0ZXJlZF0sICRjb25maWcpKTsNCgkJCQl9DQoJCQkJcmV0dXJuIHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZC4nXycuJHJlZ2lzdGVyZWRdOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2VpZiAoJ3ZlbnVlJyA9PT0gJHR5cGUgJiYgJGlkID4gMCkNCgkJew0KCQkJLy8gZ2V0IG5lZWRlZCBkZXRhaWxzDQoJCQlyZXR1cm4gc2VsZjo6Z2V0VmVudWVEZXRhaWxzKChpbnQpICRpZCk7DQoJCX0NCgkJZWxzZWlmICgnZXZlbnQnID09PSAkdHlwZSAmJiAkaWQgPiAwKQ0KCQl7DQoJCQkvLyBnZXQgbmVlZGVkIGRldGFpbHMNCgkJCXJldHVybiBzZWxmOjpnZXRCYXNpY0V2ZW50RGV0YWlscygoaW50KSAkaWQpOw0KCQl9DQoJCWVsc2VpZiAoJ29yZ2FuaXplcicgPT09ICR0eXBlICYmICRpZCA+IDApDQoJCXsNCgkJCS8vIGdldCBuZWVkZWQgZGV0YWlscw0KCQkJaWYgKCFpc3NldChzZWxmOjokcGxhY2VIb2xkZXJzWyR0eXBlLidfJy4kaWRdKSkNCgkJCXsNCgkJCQkvLyBsb2FkIHRoZSBvcmdhbml6ZXINCgkJCQlzZWxmOjokcGxhY2VIb2xkZXJzWyR0eXBlLidfJy4kaWRdID0gc2VsZjo6Z2V0T3JnYW5pemVyRGV0YWlscygoaW50KSAkaWQpOw0KCQkJfQ0KDQoJCQkvLyBhZGQgdGhlIGNvbmZpZyBhcnJheSBpZiBuZWVkZWQNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29uZmlnKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGxhY2VIb2xkZXJzWyR0eXBlLidfJy4kaWRdKSkNCgkJCXsNCgkJCQlzZWxmOjokcGxhY2VIb2xkZXJzWyR0eXBlLidfJy4kaWRdID0gc2VsZjo6bWVyZ2VBcnJheXMoYXJyYXkoc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkXSwgJGNvbmZpZykpOw0KCQkJfQ0KDQoJCQkvLyBpZiBsb2FkZWQgcmV0dXJuDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBsYWNlSG9sZGVyc1skdHlwZS4nXycuJGlkXSkpDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiRwbGFjZUhvbGRlcnNbJHR5cGUuJ18nLiRpZF07DQoJCQl9DQoJCX0NCgkJZWxzZWlmICgoISRpZCB8fCAkaWQgPT0gMCkgJiYgKCdvcmdhbml6ZXInID09PSAkdHlwZSB8fCAndmVudWUnID09PSAkdHlwZSB8fCAnZXZlbnQnID09PSAkdHlwZSkpDQoJCXsNCgkJCXJldHVybiBhcnJheV92YWx1ZXMoc2VsZjo6Z2V0U2VsZWN0aW9uKCR0eXBlLCAnWycuJHR5cGUuJ18nLCAnXScpKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBSZXR1cm4gYXJyYXkgb2Ygc2VsZWN0aW9ucw0KCSogDQoJKiBAcmV0dXJuICAgIGFycmF5IGlmIHR5cGUgbWF0Y2gNCgkqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0eXBlLCAkZiwgJGIpDQoJew0KCQlpZiAoJ29yZ2FuaXplcicgPT09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsCQ0KCQkJCSdhLnVzZXInID0+ICRmLid1c2VyX2lkJy4kYiwNCgkJCQknYS5tb2JpbGVfcGhvbmUnID0+ICRmLidtb2JpbGVfcGhvbmUnLiRiLA0KCQkJCSdhLmNvbXBhbnluYW1lJyA9PiAkZi4nY29tcGFueW5hbWUnLiRiLA0KCQkJCSdhLnB1YmxpY251bWJlcicgPT4gJGYuJ3B1YmxpY251bWJlcicuJGIsDQoJCQkJJ2EuY3VycmVuY3knID0+ICRmLidjdXJyZW5jeScuJGIsDQoJCQkJJ2Euc3RyZWV0JyA9PiAkZi4nc3RyZWV0Jy4kYiwNCgkJCQknYS5wb3N0YWwnID0+ICRmLidwb3N0YWwnLiRiLA0KCQkJCSdhLmNpdHknID0+ICRmLidjaXR5Jy4kYiwNCgkJCQknYy5uYW1lJyA9PiAkZi4ncmVnaW9uJy4kYiwNCgkJCQknZC5uYW1lJyA9PiAkZi4nY291bnRyeScuJGIsDQoJCQkJJ2EucG9zdGFsY29kZScgPT4gJGYuJ3Bvc3RhbGNvZGUnLiRiLA0KCQkJCSdhLndlYnNpdGUnID0+ICRmLid3ZWJzaXRlJy4kYiwNCgkJCQknYScgPT4gJGYuJ3dlYnNpdGVfbGluaycuJGIsDQoJCQkJJ2EubG9nb19pbWFnZScgPT4gJGYuJ2xvZ28nLiRiLA0KCQkJCSdiJyA9PiAkZi4nbG9nb191cmwnLiRiLA0KCQkJCSdhLnByZWZpeCcgPT4gJGYuJ3ByZWZpeCcuJGIsDQoJCQkJJ2EudGF4X2NvbXBvdW5kJyA9PiAkZi4ndGF4X2NvbXBvdW5kJy4kYiwNCgkJCQknYS50YXhlZCcgPT4gJGYuJ3RheGVkJy4kYiwNCgkJCQknYS50YXhfdHlwZScgPT4gJGYuJ3RheF90eXBlJy4kYiwNCgkJCQknYS5kb2NfZm9vdGVyJyA9PiAkZi4nZG9jX2Zvb3RlcicuJGIsDQoJCQkJJ2EuZG9jX2hlYWRlcicgPT4gJGYuJ2RvY19oZWFkZXInLiRiLA0KCQkJCSdiLm5hbWUnID0+ICRmLiduYW1lJy4kYiwNCgkJCQknYycgPT4gJGYuJ19uYW1lJy4kYiwNCgkJCQknYi51c2VybmFtZScgPT4gJGYuJ3VzZXJuYW1lJy4kYiwNCgkJCQknYi5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYiwNCgkJCQknYy5uYW1lJyA9PiAkZi4ncmVnaW9uX25hbWUnLiRiLA0KCQkJCSdkLm5hbWUnID0+ICRmLidjb3VudHJ5X25hbWUnLiRiDQoJCQkpOw0KCQl9DQoJCWVsc2VpZiAoJ3ZlbnVlJyA9PT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheSgNCgkJCQknYS5pZCcgPT4gJGYuJ2lkJy4kYiwJDQoJCQkJJ2EuY29udGFjdF9wZXJzb24nID0+ICRmLidjb250YWN0X3BlcnNvbicuJGIsDQoJCQkJJ2EuZW1haWwnID0+ICRmLidlbWFpbCcuJGIsDQoJCQkJJ2EucGhvbmUnID0+ICRmLidwaG9uZScuJGIsDQoJCQkJJ2EubmFtZScgPT4gJGYuJ25hbWUnLiRiLA0KCQkJCSdhLmRldGFpbHMnID0+ICRmLidkZXRhaWxzJy4kYiwNCgkJCQknYS5iYW5uZXJfaW1hZ2UnID0+ICRmLidiYW5uZXJfaW1hZ2UnLiRiLA0KCQkJCSdhJyA9PiAkZi4nYmFubmVyX2ltYWdlX3VybCcuJGIsDQoJCQkJJ2EucG9zdGVyX2ltYWdlJyA9PiAkZi4ncG9zdGVyX2ltYWdlJy4kYiwNCgkJCQknYicgPT4gJGYuJ3Bvc3Rlcl9pbWFnZV91cmwnLiRiLA0KCQkJCSdhLnRlYXNlcl9pbWFnZScgPT4gJGYuJ3RlYXNlcl9pbWFnZScuJGIsDQoJCQkJJ2MnID0+ICRmLid0ZWFzZXJfaW1hZ2VfdXJsJy4kYiwNCgkJCQknYS52ZW51ZV9pbWFnZXMnID0+ICRmLid2ZW51ZV9pbWFnZXMnLiRiLA0KCQkJCSdhLnN0cmVldCcgPT4gJGYuJ3N0cmVldCcuJGIsDQoJCQkJJ2EuY2l0eScgPT4gJGYuJ2NpdHknLiRiLA0KCQkJCSdkLm5hbWUnID0+ICRmLidjb3VudHJ5Jy4kYiwNCgkJCQknYS5tYXJrZXInID0+ICRmLidtYXAnLiRiLA0KCQkJCSdhLmNyZWF0ZWRfYnknID0+ICRmLidjcmVhdGVkX2J5X2lkJy4kYg0KCQkJKTsNCgkJfQ0KCQllbHNlaWYgKCdldmVudCcgPT09ICR0eXBlKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoDQoJCQkJJ2EuaWQnID0+ICRmLidpZCcuJGIsCQ0KCQkJCSdhLm5hbWUnID0+ICRmLiduYW1lJy4kYiwNCgkJCQknYS5hbGlhcycgPT4gJGYuJ2FsaWFzJy4kYiwNCgkJCQknYS5kYXRlJyA9PiAkZi4nZGF0ZScuJGIsDQoJCQkJJ2EucmVsYXRlZF9ldmVudCcgPT4gJGYuJ3JlbGF0ZWRfZXZlbnQnLiRiLA0KCQkJCSdhLmFydGljbGUnID0+ICRmLidhcnRpY2xlJy4kYiwNCgkJCQknYS5kZXRhaWxzJyA9PiAkZi4nZGV0YWlscycuJGIsDQoJCQkJJ2EudGVhc2VyJyA9PiAkZi4ndGVhc2VyJy4kYiwNCgkJCQknYS5iYW5uZXJfaW1hZ2UnID0+ICRmLidiYW5uZXJfaW1hZ2UnLiRiLA0KCQkJCSdhJyA9PiAkZi4nYmFubmVyX2ltYWdlX3VybCcuJGIsDQoJCQkJJ2EucG9zdGVyX2ltYWdlJyA9PiAkZi4ncG9zdGVyX2ltYWdlJy4kYiwNCgkJCQknYicgPT4gJGYuJ3Bvc3Rlcl9pbWFnZV91cmwnLiRiLA0KCQkJCSdhLnRlYXNlcl9pbWFnZScgPT4gJGYuJ3RlYXNlcl9pbWFnZScuJGIsDQoJCQkJJ2MnID0+ICRmLid0ZWFzZXJfaW1hZ2VfdXJsJy4kYiwNCgkJCQknYS5ldmVudF9pbWFnZXMnID0+ICRmLidldmVudF9pbWFnZXMnLiRiLA0KCQkJCSdhLmNoZWNrZWRfb3V0JyA9PiAkZi4nY2hlY2tlZF9vdXQnLiRiLA0KCQkJCSdkJyA9PiAkZi4nZXZlbnRfYnV0dG9uJy4kYiwNCgkJCQknZScgPT4gJGYuJ29yZ2FuaXplcl9idXR0b24nLiRiLA0KCQkJCSdmJyA9PiAkZi4ndmVudWVfYnV0dG9uJy4kYiwNCgkJCQknZC5pZCcgPT4gJGYuJ3ZlbnVlX2lkJy4kYiwNCgkJCQknZC5uYW1lJyA9PiAkZi4ndmVudWVfbmFtZScuJGIsDQoJCQkJJ2QuY2hlY2tlZF9vdXQnID0+ICRmLid2ZW51ZV9jaGVja2VkX291dCcuJGIsDQoJCQkJJ2UuaWQnID0+ICRmLidjYXRlZ29yeV9pZCcuJGIsDQoJCQkJJ2UudGl0bGUnID0+ICRmLidjYXRlZ29yeV9uYW1lJy4kYiwNCgkJCQknZS5jaGVja2VkX291dCcgPT4gJGYuJ2NhdGVnb3J5X2NoZWNrZWRfb3V0Jy4kYiwNCgkJCQknZi5pZCcgPT4gJGYuJ29yZ2FuaXplcl9pZCcuJGIsDQoJCQkJJ2YuY29tcGFueW5hbWUnID0+ICRmLidvcmdhbml6YXRpb24nLiRiLA0KCQkJCSdmLnVzZXInID0+ICRmLidvcmdhbml6ZXJfdXNlcicuJGIsDQoJCQkJJ2YuY2hlY2tlZF9vdXQnID0+ICRmLidvcmdhbml6ZXJfY2hlY2tlZF9vdXQnLiRiLA0KCQkJCSdjLm5hbWUnID0+ICRmLidvcmdhbml6ZXInLiRiLA0KCQkJCSdjLmVtYWlsJyA9PiAkZi4nb3JnYW5pemVyX2VtYWlsJy4kYg0KCQkJKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkYmFzaWNFdmVudERldGFpbHMgPSBhcnJheSgpOw0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRCYXNpY0V2ZW50VmFsdWUoJGlkLCAkZmllbGQsICRkZWZhdWx0ID0gbnVsbCkNCgl7DQoJCWlmICgkaWQgPiAwICkNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXSkpDQoJCQl7DQoJCQkJc2VsZjo6c2V0QmFzaWNFdmVudERldGFpbHMoJGlkKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZmllbGQgaWYgc2V0DQoJCQkkZmllbGQgPSAnW2V2ZW50XycuJGZpZWxkLiddJzsNCgkJCWlmIChpc3NldChzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXSkgJiYgaXNzZXQoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGZpZWxkXSkpDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmaWVsZF07DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRkZWZhdWx0Ow0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QmFzaWNFdmVudERldGFpbHMoJGlkKQ0KCXsNCgkJaWYgKCRpZCA+IDApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldEJhc2ljRXZlbnREZXRhaWxzKCRpZCk7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QmFzaWNFdmVudERldGFpbHMoJGlkLCAkbWV0aG9kID0gJ3BsYWNlaG9sZGVyJykNCgl7DQoJCSRmID0gJyc7DQoJCSRiID0gJyc7DQoJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kKQ0KCQl7DQoJCQkkZiA9ICdbZXZlbnRfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkkc2VsZWN0aW9uID0gc2VsZjo6Z2V0U2VsZWN0aW9uKCdldmVudCcsICRmLCAkYik7DQoJCS8vIHJlbW92ZSBzb21lIHRoYXQgYXJlIHNldCBkeW5hbWljYWxseQ0KCQl1bnNldCgkc2VsZWN0aW9uWydhJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydiJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydjJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydkJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydlJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydmJ10pOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheV9rZXlzKCRzZWxlY3Rpb24pLCBhcnJheV92YWx1ZXMoJHNlbGVjdGlvbikpKTsNCg0KCQkvLyBHZXQgdGhlIGN1cnJlbnQgdXNlciBmb3IgYXV0aG9yaXNhdGlvbiBjaGVja3MNCgkJJHVzZXIJPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCSRsZXZlbHMJPSAkdXNlci0+Z2V0QXV0aG9yaXNlZFZpZXdMZXZlbHMoKTsNCg0KCQkvLyBHZXQgZnJvbSAjX19bW1tjb21wb25lbnRdXV1fZXZlbnQgYXMgYQ0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9ldmVudCcsICdhJykpOw0KDQoJCS8vIEdldCBmcm9tICNfX1tbW2NvbXBvbmVudF1dXV92ZW51ZSBhcyBkDQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3ZlbnVlJywgJ2QnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EudmVudWUnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2QuaWQnKSAuICcpJyk7DQoNCgkJLy8gR2V0IGZyb20gI19fY2F0ZWdvcmllcyBhcyBlDQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fY2F0ZWdvcmllcycsICdlJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmNhdGlkJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdlLmlkJykgLiAnKScpOw0KDQoJCS8vIEdldCBmcm9tICNfX1tbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXIgYXMgZg0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXInLCAnZicpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5vcmdhbml6ZXInKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2YuaWQnKSAuICcpJyk7DQoNCgkJLy8gR2V0IGZyb20gI19fdXNlcnMgYXMgYw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX3VzZXJzJywgJ2MnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2YudXNlcicpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnYy5pZCcpIC4gJyknKTsNCgkJLy8gZmlsdGVycw0KCQkkcXVlcnktPndoZXJlKCdhLmFjY2Vzc3JlZ2lzdHJhdGlvbiBJTiAoJyAuIGltcGxvZGUoJywnLCAkbGV2ZWxzKSAuICcpJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EucHVibGlzaGVkID0gMScpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmlkJykgLiAnID0gJy4gKGludCkgJGlkKTsNCgkJLy8gbG9hZCB0aGUgcXVlcnkNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXSA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCQkvLyBHZXQgdGhlIGJhc2ljIGVuY3J5cHRpb24uDQoJCQlzZWxmOjokYmFzaWNrZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnYmFzaWMnKTsNCgkJCS8vIEdldCB0aGUgZW5jcnlwdGlvbiBvYmplY3QuDQoJCQlzZWxmOjokbG9ja2VyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoc2VsZjo6JGJhc2lja2V5LCAxMjgpOw0KCQkJLy8gc2V0IGltYWdlIGZpbGUgbGluaw0KCQkJc2VsZjo6JGZpbGVsaW5rID0gc2VsZjo6Z2V0Rm9sZGVyUGF0aCgndXJsJyk7DQoJCQkvLyBvcGVuIHRoZSB0ZWFzZXIgaW1hZ2UNCgkJCSRpbWFnZXMgPSBhcnJheSgndGVhc2VyX2ltYWdlJywncG9zdGVyX2ltYWdlJywnYmFubmVyX2ltYWdlJyk7DQoJCQlmb3JlYWNoICgkaW1hZ2VzIGFzICRpbWFnZSkNCgkJCXsNCgkJCQkvLyBzZXQgaW1hZ2UNCgkJCQkkaW1hZ2VGb3VuZCA9ICcnOw0KCQkJCSRpbWFnZVVybCA9ICcnOw0KCQkJCWlmIChpc3NldChzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4kaW1hZ2UuJGJdKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4kaW1hZ2UuJGJdKSkgDQoJCQkJew0KCQ0KCQkJCQkkdG1wSW1hZ2UgPSBzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4kaW1hZ2UuJGJdOw0KCQkJCQkvLyBvcGVuIHRoZSBzdHJpbmcuDQoJCQkJCSR0bXBJbWFnZSA9IHNlbGY6OmRlY3J5cHRTdHJpbmcoJHRtcEltYWdlKTsNCgkJCQkJaWYgKHN0cnBvcygkdG1wSW1hZ2UsICdfJykgIT09IGZhbHNlKQ0KCQkJCQl7DQoJCQkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsICR0bXBJbWFnZSk7DQoJCQkJCQlpZiAoaXNzZXQoJGV4dGVudGlvblsyXSkpDQoJCQkJCQl7DQoJCQkJCQkJJGltYWdlVXJsID0gc2VsZjo6JGZpbGVsaW5rLiR0bXBJbWFnZS4nLicuJGV4dGVudGlvblsyXTsNCgkJCQkJCQkkaW1hZ2VGb3VuZCA9ICc8aW1nIGNsYXNzPSJ1ay10aHVtYm5haWwiIHNyYz0iJy4kaW1hZ2VVcmwuJyIgYWx0PSInLnNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLiduYW1lJy4kYl0uJyI+JzsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBub3cgYWRkIHRoZSBpbWFnZQ0KCQkJCXNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLiRpbWFnZS4kYl0gPSAkaW1hZ2VGb3VuZDsNCgkJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4kaW1hZ2UuJ191cmwnLiRiXSA9ICRpbWFnZVVybDsNCgkJCX0NCgkJCS8vIHNldCB0aGUgZ2FsbGVyeSBvZiBpbWFnZXMNCgkJCWlmIChpc3NldChzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nZXZlbnRfaW1hZ2VzJy4kYl0pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidldmVudF9pbWFnZXMnLiRiXSkpDQoJCQl7DQoJCQkJJHRtcEltYWdlcyA9IHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidldmVudF9pbWFnZXMnLiRiXTsNCgkJCQlpZiAoc2VsZjo6JGJhc2lja2V5KQ0KCQkJCXsNCgkJCQkJLy8gb3BlbiB0aGUgc3RyaW5nLg0KCQkJCQkkdG1wSW1hZ2VzID0gc2VsZjo6ZGVjcnlwdFN0cmluZygkdG1wSW1hZ2VzKTsNCgkJCQl9DQoJCQkJLy8gYnVpbGQgYW4gYXJyYXkgb2YgaW1hZ2VzDQoJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCR0bXBJbWFnZXMpKQ0KCQkJCXsNCgkJCQkJJHRtcEltYWdlcyA9IGpzb25fZGVjb2RlKCR0bXBJbWFnZXMsIHRydWUpOw0KCQkJCX0NCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRtcEltYWdlcykpDQoJCQkJew0KCQkJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCQkJZm9yZWFjaCAoJHRtcEltYWdlcyBhcyAkZmlsZU5hbWUpDQoJCQkJCXsNCgkJCQkJCS8vIGJ1aWxkIHRoZSBhcnJheQ0KCQkJCQkJaWYgKHN0cnBvcygkZmlsZU5hbWUsICdfJykgIT09IGZhbHNlKQ0KCQkJCQkJew0KCQkJCQkJCSRleHRlbnRpb24gPSBleHBsb2RlKCdfJywgJGZpbGVOYW1lKTsNCgkJCQkJCQlpZiAoaXNzZXQoJGV4dGVudGlvblsyXSkpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBzZXQgbGluaw0KCQkJCQkJCQkkYnVja2V0W10gPSBzZWxmOjokZmlsZWxpbmsuJGZpbGVOYW1lLicuJy4kZXh0ZW50aW9uWzJdOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoaXNzZXQoJGJ1Y2tldCkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGJ1Y2tldCkpDQoJCQkJew0KCQkJCQkkZXZlbnRJbWFnZVdpZHRoID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCdldmVudF93aWR0aCcsIDgwMCk7DQoJCQkJCSRldmVudEltYWdlSGVpZ2h0ID0gIHNlbGY6OiRwYXJhbXMtPmdldCgnZXZlbnRfaGVpZ2h0JywgNjAwKTsNCgkJCQkJJHRhYkNvbnRyb2xJRCA9IG1kNShzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nbmFtZScuJGJdLnNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidpZCcuJGJdKTsNCgkJCQkJLy8gYnVpbGQgZ2FsbGVyeQ0KCQkJCQkkZ2FsbGVyeSA9IGFycmF5KCk7DQoJCQkJCSRjb3VudCA9IGNvdW50KCRidWNrZXQpOw0KCQkJCQlpZiAoJGNvdW50ID09IDEpDQoJCQkJCXsNCgkJCQkJCSRnYWxsZXJ5W10gPSAnPGRpdiBjbGFzcz0idWstZ3JpZCB1ay1ncmlkLXdpZHRoLTEtMSIgZGF0YS11ay1ncmlkLW1hcmdpbj4nOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIHVrLWdyaWQtd2lkdGgtbWVkaXVtLTEtNCIgZGF0YS11ay1ncmlkLW1hcmdpbj4nOw0KCQkJCQl9DQoJCQkJCWZvcmVhY2ggKCRidWNrZXQgYXMgJHZhbCkNCgkJCQkJew0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8ZGl2Pic7DQoJCQkJCQkkZ2FsbGVyeVtdID0gJzxhIGhyZWY9IicgLiAkdmFsIC4gJyIgZGF0YS11ay1saWdodGJveD0ie2dyb3VwOlwnZ3JvdXAtJyAuICR0YWJDb250cm9sSUQgLiAnXCd9IiB0aXRsZT0iJyAuIHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLiduYW1lJy4kYl0gLiAnIj4nOw0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8aW1nIHNyYz0iJyAuICR2YWwgLiAnIiBhbHQ9ImV2ZW50IGltYWdlIiB3aWR0aD0iJyAuICRldmVudEltYWdlV2lkdGggLiAnIiBoZWlnaHQ9IicgLiAkZXZlbnRJbWFnZUhlaWdodCAuICciPic7DQoJCQkJCQkkZ2FsbGVyeVtdID0gJzwvYT4nOw0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8L2Rpdj4nOw0KCQkJCQl9DQoJCQkJCSRnYWxsZXJ5W10gPSAnPC9kaXY+JzsNCgkJCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2V2ZW50X2ltYWdlcycuJGJdID0gaW1wbG9kZSgnJywgJGdhbGxlcnkpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nZXZlbnRfaW1hZ2VzJy4kYl0gPSAnJzsNCgkJCQl9DQoJCQl9DQoJCQkvLyBkbyBmaW5hbCBidWlsZA0KCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidyZWxhdGVkX2V2ZW50Jy4kYl0pKQ0KCQkJew0KCQkJCS8vIERlY29kZSByZWxhdGVkX2V2ZW50DQoJCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ3JlbGF0ZWRfZXZlbnQnLiRiXSA9IGpzb25fZGVjb2RlKHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidyZWxhdGVkX2V2ZW50Jy4kYl0sIHRydWUpOw0KCQkJfQ0KCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidhcnRpY2xlJy4kYl0pKQ0KCQkJew0KCQkJCS8vIERlY29kZSBhcnRpY2xlcw0KCQkJCXNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidhcnRpY2xlJy4kYl0gPSBqc29uX2RlY29kZShzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nYXJ0aWNsZScuJGJdLCB0cnVlKTsNCgkJCX0NCgkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjayhzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nZGF0ZScuJGJdKSkNCgkJCXsNCgkJCQkvLyBEZWNvZGUgZGF0ZXMNCgkJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nZGF0ZScuJGJdID0ganNvbl9kZWNvZGUoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2RhdGUnLiRiXSwgdHJ1ZSk7DQoJCQkJaWYgKCRkYXRlID0gc2VsZjo6c2V0RXZlbnRTdGFydERhdGUoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2RhdGUnLiRiXSkpDQoJCQkJew0KCQkJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nZGF0ZScuJGJdID0gJGRhdGVbJ3RleHQnXTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2RhdGUnLiRiXSA9ICcnOw0KCQkJCX0NCgkJCX0NCgkJCS8vIHNldCBlbWFpbCBzZWNyZXQNCgkJCSRlcG9zQ29kZSA9IGFycmF5KCdpZCcgPT4gc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ29yZ2FuaXplcl9pZCcuJGJdLCAnZW1haWwnID0+IHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidvcmdhbml6ZXJfZW1haWwnLiRiXSk7DQoJCQkkZXBvc0NvZGUgPSBqc29uX2VuY29kZSgkZXBvc0NvZGUpOw0KCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2Vwb3Njb2RlJy4kYl0gPSBzZWxmOjpiYXNlNjRfdXJsZW5jb2RlKHNlbGY6OiRsb2NrZXItPmVuY3J5cHRTdHJpbmcoJGVwb3NDb2RlKSk7DQoJCQkvLyBBbHdheXMgY3JlYXRlIGEgc2x1ZyBmb3Igc2VmIFVSTCdzDQoJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nc2x1ZycuJGJdID0gKGlzc2V0KHNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidhbGlhcycuJGJdKSAmJiBpc3NldChzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4naWQnLiRiXSkpID8gc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2lkJy4kYl0uJzonLnNlbGY6OiRiYXNpY0V2ZW50RGV0YWlsc1skaWRdWyRmLidhbGlhcycuJGJdIDogc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2lkJy4kYl07DQoJCQkvLyBzZXQgZXZlbnQgYnV0dG9ucw0KCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ2V2ZW50X2J1dHRvbicuJGJdID0gc2VsZjo6bG9hZEJ1dHRvbnMoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF0sICdldmVudCcsICR1c2VyLCAkZi4nbmFtZScuJGIsICRmLidpZCcuJGIsICRmLidjaGVja2VkX291dCcuJGIsICRmLidvcmdhbml6ZXInLiRiLCAkZi4nZXBvc2NvZGUnLiRiLCAkZi4nc2x1ZycuJGIpOw0KCQkJLy8gc2V0IG9yZ2FuaXplciBidXR0b25zDQoJCQlzZWxmOjokYmFzaWNFdmVudERldGFpbHNbJGlkXVskZi4nb3JnYW5pemVyX2J1dHRvbicuJGJdID0gc2VsZjo6bG9hZEJ1dHRvbnMoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF0sICdvcmdhbml6ZXInLCAkdXNlciwgJGYuJ29yZ2FuaXplcicuJGIsICRmLidvcmdhbml6ZXJfaWQnLiRiLCAkZi4nb3JnYW5pemVyX2NoZWNrZWRfb3V0Jy4kYiwgJGYuJ29yZ2FuaXplcicuJGIsICRmLidlcG9zY29kZScuJGIsICRmLidzbHVnJy4kYik7DQoJCQkvLyBzZXQgdmVudWUgYnV0dG9ucw0KCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF1bJGYuJ3ZlbnVlX2J1dHRvbicuJGJdID0gc2VsZjo6bG9hZEJ1dHRvbnMoc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF0sICd2ZW51ZScsICR1c2VyLCAkZi4ndmVudWVfbmFtZScuJGIsICRmLid2ZW51ZV9pZCcuJGIsICRmLid2ZW51ZV9jaGVja2VkX291dCcuJGIsICRmLidvcmdhbml6ZXInLiRiLCAkZi4nZXBvc2NvZGUnLiRiLCAkZi4nc2x1ZycuJGIpOwkJCQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJc2VsZjo6JGJhc2ljRXZlbnREZXRhaWxzWyRpZF0gPSBmYWxzZTsNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJHZlbnVlRGV0YWlscyA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFZlbnVlVmFsdWUoJGlkLCAkZmllbGQsICRkZWZhdWx0ID0gbnVsbCkNCgl7DQoJCWlmICgkaWQgPiAwICkNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokdmVudWVEZXRhaWxzWyRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldFZlbnVlRGV0YWlscygkaWQpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBmaWVsZCBpZiBzZXQNCgkJCSRmaWVsZCA9ICdbdmVudWVfJy4kZmllbGQuJ10nOw0KCQkJaWYgKGlzc2V0KHNlbGY6OiR2ZW51ZURldGFpbHNbJGlkXSkgJiYgaXNzZXQoc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmaWVsZF0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokdmVudWVEZXRhaWxzWyRpZF1bJGZpZWxkXTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGRlZmF1bHQ7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRWZW51ZURldGFpbHMoJGlkKQ0KCXsNCgkJaWYgKCRpZCA+IDApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRWZW51ZURldGFpbHMoJGlkKTsNCgkJCX0NCgkJCXJldHVybiBzZWxmOjokdmVudWVEZXRhaWxzWyRpZF07DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0VmVudWVEZXRhaWxzKCRpZCwgJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicpDQoJew0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCkNCgkJew0KCQkJJGYgPSAnW3ZlbnVlXyc7DQoJCQkkYiA9ICddJzsNCgkJfQ0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkvLyBTZWxlY3Qgc29tZSBmaWVsZHMNCgkJJHNlbGVjdGlvbiA9IHNlbGY6OmdldFNlbGVjdGlvbigndmVudWUnLCAkZiwgJGIpOw0KCQkvLyByZW1vdmUgc29tZSB0aGF0IGFyZSBzZXQgZHluYW1pY2FsbHkNCgkJdW5zZXQoJHNlbGVjdGlvblsnYSddKTsNCgkJdW5zZXQoJHNlbGVjdGlvblsnYiddKTsNCgkJdW5zZXQoJHNlbGVjdGlvblsnYyddKTsNCgkJdW5zZXQoJHNlbGVjdGlvblsnZCddKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXlfa2V5cygkc2VsZWN0aW9uKSwgYXJyYXlfdmFsdWVzKCRzZWxlY3Rpb24pKSk7DQoNCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX3ZlbnVlIHRhYmxlCQkJCQ0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV92ZW51ZScsICdhJykpOwkJCQkNCg0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5JywgJ2QnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuY291bnRyeScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnZC5pZCcpIC4gJyknKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5pZCcpIC4gJyA9ICcuIChpbnQpICRpZCk7DQoJCS8vIGxvYWQgdGhlIHF1ZXJ5DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdID0gJGRiLT5sb2FkQXNzb2MoKTsNCgkJCS8vIEdldCB0aGUgYmFzaWMgZW5jcnlwdGlvbi4NCgkJCXNlbGY6OiRiYXNpY2tleSA9IHNlbGY6OmdldENyeXB0S2V5KCdiYXNpYycpOw0KCQkJaWYgKHNlbGY6OiRiYXNpY2tleSkNCgkJCXsNCgkJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJCXNlbGY6OiRsb2NrZXIgPSBuZXcgU3VwZXJfX185OTE3NWY2ZF9kYmE4XzQwODZfOGE2NV81YzRlYzE3NWU2MWRfX19Qb3dlcihzZWxmOjokYmFzaWNrZXksIDEyOCk7DQoJCQl9DQoJCQkvLyBzZXQgaW1hZ2UgZmlsZSBsaW5rDQoJCQlzZWxmOjokZmlsZWxpbmsgPSBzZWxmOjpnZXRGb2xkZXJQYXRoKCd1cmwnKTsNCgkJCS8vIHNldCBzaW5nbGUgaW1hZ2VzDQoJCQkkaW1hZ2VzID0gYXJyYXkoJ2Jhbm5lcl9pbWFnZScsICdwb3N0ZXJfaW1hZ2UnLCAndGVhc2VyX2ltYWdlJyk7DQoJCQlmb3JlYWNoICgkaW1hZ2VzIGFzICRpbWFnZSkNCgkJCXsNCgkJCQkvLyBzZXQgaW1hZ2UNCgkJCQkkaW1hZ2VGb3VuZCA9ICcnOw0KCQkJCSRpbWFnZVVybCA9ICcnOw0KCQkJCWlmIChpc3NldChzZWxmOjokdmVudWVEZXRhaWxzWyRpZF1bJGYuJGltYWdlLiRiXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmLiRpbWFnZS4kYl0pKSANCgkJCQl7DQoJCQkJCQ0KCQkJCQkkdG1wSW1hZ2UgPSBzZWxmOjokdmVudWVEZXRhaWxzWyRpZF1bJGYuJGltYWdlLiRiXTsNCgkJCQkJLy8gb3BlbiB0aGUgc3RyaW5nLg0KCQkJCQkkdG1wSW1hZ2UgPSBzZWxmOjpkZWNyeXB0U3RyaW5nKCR0bXBJbWFnZSk7DQoJCQkJCWlmIChzdHJwb3MoJHRtcEltYWdlLCAnXycpICE9PSBmYWxzZSkNCgkJCQkJew0KCQkJCQkJJGV4dGVudGlvbiA9IGV4cGxvZGUoJ18nLCAkdG1wSW1hZ2UpOw0KCQkJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCQkJew0KCQkJCQkJCSRpbWFnZVVybCA9IHNlbGY6OiRmaWxlbGluay4kdG1wSW1hZ2UuJy4nLiRleHRlbnRpb25bMl07DQoJCQkJCQkJJGltYWdlRm91bmQgPSAnPGltZyBjbGFzcz0idWstdGh1bWJuYWlsIiBzcmM9IicuJGltYWdlVXJsLiciIGFsdD0iJy5zZWxmOjokdmVudWVEZXRhaWxzWyRpZF1bJGYuJ25hbWUnLiRiXS4nIj4nOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIG5vdyBhZGQgdGhlIGltYWdlDQoJCQkJc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmLiRpbWFnZS4kYl0gPSAkaW1hZ2VGb3VuZDsNCgkJCQlzZWxmOjokdmVudWVEZXRhaWxzWyRpZF1bJGYuJGltYWdlLidfdXJsJy4kYl0gPSAkaW1hZ2VVcmw7DQoJCQl9DQoJCQkvLyBzZXQgdGhlIGdhbGxlcnkgb2YgaW1hZ2VzDQoJCQlpZiAoaXNzZXQoc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmLid2ZW51ZV9pbWFnZXMnLiRiXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmLid2ZW51ZV9pbWFnZXMnLiRiXSkpDQoJCQl7DQoJCQkJJHRtcEltYWdlcyA9IHNlbGY6OiR2ZW51ZURldGFpbHNbJGlkXVskZi4ndmVudWVfaW1hZ2VzJy4kYl07DQoJCQkJaWYgKHNlbGY6OiRiYXNpY2tleSkNCgkJCQl7DQoJCQkJCS8vIG9wZW4gdGhlIHN0cmluZy4NCgkJCQkJJHRtcEltYWdlcyA9IHNlbGY6OmRlY3J5cHRTdHJpbmcoJHRtcEltYWdlcyk7DQoJCQkJfQ0KCQkJCS8vIGJ1aWxkIGFuIGFycmF5IG9mIGltYWdlcw0KCQkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkdG1wSW1hZ2VzKSkNCgkJCQl7DQoJCQkJCSR0bXBJbWFnZXMgPSBqc29uX2RlY29kZSgkdG1wSW1hZ2VzLCB0cnVlKTsNCgkJCQl9DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0bXBJbWFnZXMpKQ0KCQkJCXsNCgkJCQkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCQkJCWZvcmVhY2ggKCR0bXBJbWFnZXMgYXMgJGZpbGVOYW1lKQ0KCQkJCQl7DQoJCQkJCQkvLyBidWlsZCB0aGUgYXJyYXkNCgkJCQkJCWlmIChzdHJwb3MoJGZpbGVOYW1lLCAnXycpICE9PSBmYWxzZSkNCgkJCQkJCXsNCgkJCQkJCQkkZXh0ZW50aW9uID0gZXhwbG9kZSgnXycsICRmaWxlTmFtZSk7DQoJCQkJCQkJaWYgKGlzc2V0KCRleHRlbnRpb25bMl0pKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gc2V0IGxpbmsNCgkJCQkJCQkJJGJ1Y2tldFtdID0gc2VsZjo6JGZpbGVsaW5rLiRmaWxlTmFtZS4nLicuJGV4dGVudGlvblsyXTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKGlzc2V0KCRidWNrZXQpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRidWNrZXQpKQ0KCQkJCXsNCgkJCQkJJGV2ZW50SW1hZ2VXaWR0aCA9IHNlbGY6OiRwYXJhbXMtPmdldCgndmVudWVfd2lkdGgnLCA4MDApOw0KCQkJCQkkZXZlbnRJbWFnZUhlaWdodCA9ICBzZWxmOjokcGFyYW1zLT5nZXQoJ3ZlbnVlX2hlaWdodCcsIDYwMCk7DQoJCQkJCSR0YWJDb250cm9sSUQgPSBtZDUoc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmLiduYW1lJy4kYl0uc2VsZjo6JHZlbnVlRGV0YWlsc1skaWRdWyRmLidpZCcuJGJdKTsNCgkJCQkJLy8gYnVpbGQgZ2FsbGVyeQ0KCQkJCQkkZ2FsbGVyeSA9IGFycmF5KCk7DQoJCQkJCSRjb3VudCA9IGNvdW50KCRidWNrZXQpOw0KCQkJCQlpZiAoJGNvdW50ID09IDEpDQoJCQkJCXsNCgkJCQkJCSRnYWxsZXJ5W10gPSAnPGRpdiBjbGFzcz0idWstZ3JpZCB1ay1ncmlkLXdpZHRoLTEtMSIgZGF0YS11ay1ncmlkLW1hcmdpbj4nOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8ZGl2IGNsYXNzPSJ1ay1ncmlkIHVrLWdyaWQtd2lkdGgtbWVkaXVtLTEtNCIgZGF0YS11ay1ncmlkLW1hcmdpbj4nOw0KCQkJCQl9DQoJCQkJCWZvcmVhY2ggKCRidWNrZXQgYXMgJHZhbCkNCgkJCQkJew0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8ZGl2Pic7DQoJCQkJCQkkZ2FsbGVyeVtdID0gJzxhIGhyZWY9IicgLiAkdmFsIC4gJyIgZGF0YS11ay1saWdodGJveD0ie2dyb3VwOlwnZ3JvdXAtJyAuICR0YWJDb250cm9sSUQgLiAnXCd9IiB0aXRsZT0iJyAuIHNlbGY6OiR2ZW51ZURldGFpbHNbJGlkXVskZi4nbmFtZScuJGJdIC4gJyI+JzsNCgkJCQkJCSRnYWxsZXJ5W10gPSAnPGltZyBzcmM9IicgLiAkdmFsIC4gJyIgYWx0PSJ2ZW51ZSBpbWFnZSIgd2lkdGg9IicgLiAkZXZlbnRJbWFnZVdpZHRoIC4gJyIgaGVpZ2h0PSInIC4gJGV2ZW50SW1hZ2VIZWlnaHQgLiAnIj4nOw0KCQkJCQkJJGdhbGxlcnlbXSA9ICc8L2E+JzsNCgkJCQkJCSRnYWxsZXJ5W10gPSAnPC9kaXY+JzsNCgkJCQkJfQ0KCQkJCQkkZ2FsbGVyeVtdID0gJzwvZGl2Pic7DQoJCQkJCXNlbGY6OiR2ZW51ZURldGFpbHNbJGlkXVskZi4ndmVudWVfaW1hZ2VzJy4kYl0gPSBpbXBsb2RlKCcnLCAkZ2FsbGVyeSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXNlbGY6OiR2ZW51ZURldGFpbHNbJGlkXVskZi4ndmVudWVfaW1hZ2VzJy4kYl0gPSAnJzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlzZWxmOjokdmVudWVEZXRhaWxzWyRpZF0gPSBmYWxzZTsNCgkJfQ0KCX0NCgkNCglwcm90ZWN0ZWQgc3RhdGljICRpdGVtT3JnYW5pemVyID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SXRlbU9yZ2FuaXplcigmJGl0ZW0sICR0eXBlLCAka2V5ID0gJ2lkJywgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRpdGVtKSAmJiBpc3NldCgkaXRlbS0+JGtleSkgJiYgKGludCkgJGl0ZW0tPiRrZXkgPiAwKQ0KCQl7DQoJCQkvLyBjaGVjayBpZiBhbHJlYWR5IHNldA0KCQkJaWYgKCFpc3NldChzZWxmOjokaXRlbU9yZ2FuaXplclskdHlwZS4kaXRlbS0+JGtleV0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldEl0ZW1Pcmdhbml6ZXIoJGl0ZW0sICR0eXBlLCAka2V5KTsNCgkJCX0NCgkJCWlmIChpc3NldChzZWxmOjokaXRlbU9yZ2FuaXplclskdHlwZS4kaXRlbS0+JGtleV0pICYmIHNlbGY6OiRpdGVtT3JnYW5pemVyWyR0eXBlLiRpdGVtLT4ka2V5XSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6JGl0ZW1Pcmdhbml6ZXJbJHR5cGUuJGl0ZW0tPiRrZXldOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkZGVmYXVsdDsNCgl9DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRJdGVtT3JnYW5pemVyKCYkaXRlbSwgJHR5cGUsICRrZXkpDQoJew0KCQkvLyBnZXQgb3JnYW5pemVyIGlkIGZvciB2YXJpb3VzIHR5cGVzIG9mIGl0ZW1zDQoJCXN3aXRjaCgkdHlwZSkNCgkJew0KCQkJY2FzZSAndHJhbnNhY3Rpb24nOg0KCQkJCWlmIChpc3NldCgkaXRlbS0+aW52b2ljZSkpDQoJCQkJew0KCQkJCQlzZWxmOjokaXRlbU9yZ2FuaXplclskdHlwZS4kaXRlbS0+JGtleV0gPSBzZWxmOjpnZXRWYXIoJ2ludm9pY2UnLCAkaXRlbS0+aW52b2ljZSwgJ2lkJywgJ29yZ2FuaXplcicpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkb3JnYW5pemVyRGV0YWlscyA9IGFycmF5KCk7DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE9yZ2FuaXplclZhbHVlKCRpZCwgJGZpZWxkLCAkZGVmYXVsdCA9IG51bGwpDQoJew0KCQlpZiAoJGlkID4gMCApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXSkpDQoJCQl7DQoJCQkJc2VsZjo6c2V0T3JnYW5pemVyRGV0YWlscygkaWQpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBmaWVsZCBpZiBzZXQNCgkJCSRmaWVsZCA9ICdbb3JnYW5pemVyXycuJGZpZWxkLiddJzsNCgkJCWlmIChpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdKSAmJiBpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmaWVsZF0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmaWVsZF07DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRkZWZhdWx0Ow0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0T3JnYW5pemVyRGV0YWlscygkaWQpDQoJew0KCQlpZiAoJGlkID4gMCkNCgkJew0KCQkJaWYgKCFpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRPcmdhbml6ZXJEZXRhaWxzKCRpZCk7DQoJCQl9DQoJCQlyZXR1cm4gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRPcmdhbml6ZXJEZXRhaWxzKCRpZCwgJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicpDQoJew0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCkNCgkJew0KCQkJJGYgPSAnW29yZ2FuaXplcl8nOw0KCQkJJGIgPSAnXSc7DQoJCX0NCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJLy8gU2VsZWN0IHNvbWUgZmllbGRzDQoJCSRzZWxlY3Rpb24gPSBzZWxmOjpnZXRTZWxlY3Rpb24oJ29yZ2FuaXplcicsICRmLCAkYik7DQoJCS8vIHJlbW92ZSBzb21lIHRoYXQgYXJlIHNldCBkeW5hbWljYWxseQ0KCQl1bnNldCgkc2VsZWN0aW9uWydhJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydiJ10pOw0KCQl1bnNldCgkc2VsZWN0aW9uWydjJ10pOw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheV9rZXlzKCRzZWxlY3Rpb24pLCBhcnJheV92YWx1ZXMoJHNlbGVjdGlvbikpKTsNCg0KCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fb3JnYW5pemVyIHRhYmxlCQkJCQ0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXInLCAnYScpKTsJCQkJDQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fdXNlcnMnLCAnYicpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS51c2VyJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdiLmlkJykgLiAnKScpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9yZWdpb24nLCAnYycpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5yZWdpb24nKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2MuaWQnKSAuICcpJyk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknLCAnZCcpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5jb3VudHJ5JykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdkLmlkJykgLiAnKScpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmlkJykgLiAnID0gJy4gKGludCkgJGlkKTsNCgkJLy8gbG9hZCB0aGUgcXVlcnkNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdID0gJGRiLT5sb2FkQXNzb2MoKTsNCgkJCS8vIGxvYWQgdGhlIG5hbWUNCgkJCWlmIChpc3NldChzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLidjb21wYW55bmFtZScuJGJdKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjayhzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLidjb21wYW55bmFtZScuJGJdKSkNCgkJCXsNCgkJCQkkbmFtZSA9IHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ2NvbXBhbnluYW1lJy4kYl07DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJG5hbWUgPSBzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLiduYW1lJy4kYl07DQoJCQl9DQoJCQlzZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLidfbmFtZScuJGJdID0gJG5hbWU7DQoJCQkvLyBzZXQgd2Vic2l0ZSBsaW5rDQoJCQkkbGluayA9ICcnOw0KCQkJaWYgKGlzc2V0KHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ3dlYnNpdGUnLiRiXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nd2Vic2l0ZScuJGJdKSkgDQoJCQl7DQoJCQkJLy8gc2V0IGxpbmsNCgkJCQlpZiAoc3RycG9zKHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ3dlYnNpdGUnLiRiXSwgJ2h0dHA6Ly8nKSAhPT0gZmFsc2UgfHwgc3RycG9zKHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ3dlYnNpdGUnLiRiXSwgJ2h0dHBzOi8vJykgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGxpbmsgPSAnPGEgaHJlZj0iJy5zZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLid3ZWJzaXRlJy4kYl0uJyI+JyAuICRuYW1lIC4gJzwvYT4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkbGluayA9ICc8YSBocmVmPSJodHRwOi8vJy5zZWxmOjokb3JnYW5pemVyRGV0YWlsc1skaWRdWyRmLid3ZWJzaXRlJy4kYl0uJyI+JyAuICRuYW1lIC4gJzwvYT4nOw0KCQkJCX0NCgkJCX0NCgkJCXNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ3dlYnNpdGVfbGluaycuJGJdID0gJGxpbms7DQoNCgkJCS8vIHNldCBsb2dvIGltYWdlDQoJCQkkbG9nb0ZvdW5kID0gJyc7DQoJCQkkbG9nb1VybCA9ICcnOw0KCQkJaWYgKGlzc2V0KHNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ2xvZ28nLiRiXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nbG9nbycuJGJdKSkgDQoJCQl7DQoJCQkJLy8gR2V0IHRoZSBiYXNpYyBlbmNyeXB0aW9uLg0KCQkJCXNlbGY6OiRiYXNpY2tleSA9IHNlbGY6OmdldENyeXB0S2V5KCdiYXNpYycpOw0KCQkJCSRsb2dvID0gc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nbG9nbycuJGJdOw0KCQkJCWlmIChzZWxmOjokYmFzaWNrZXkpDQoJCQkJew0KCQkJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJCQlzZWxmOjokbG9ja2VyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoc2VsZjo6JGJhc2lja2V5LCAxMjgpOw0KCQkJCQkkbG9nbyA9IHNlbGY6OmRlY3J5cHRTdHJpbmcoJGxvZ28pOw0KCQkJCX0NCgkJCQlpZiAoc3RycG9zKCRsb2dvLCAnXycpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRleHRlbnRpb24gPSBleHBsb2RlKCdfJywgJGxvZ28pOw0KCQkJCQlpZiAoaXNzZXQoJGV4dGVudGlvblsyXSkpDQoJCQkJCXsNCgkJCQkJCSRsb2dvVXJsID0gc2VsZjo6Z2V0Rm9sZGVyUGF0aCgndXJsJykuJGxvZ28uJy4nLiRleHRlbnRpb25bMl07DQoJCQkJCQkkbG9nb0ZvdW5kID0gJzxpbWcgY2xhc3M9InVrLXRodW1ibmFpbCIgc3JjPSInLiRsb2dvVXJsLiciIGFsdD0iJy4kbmFtZS4nIj4nOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gbm93IGFkZCB0aGUgbG9nbw0KCQkJc2VsZjo6JG9yZ2FuaXplckRldGFpbHNbJGlkXVskZi4nbG9nbycuJGJdID0gJGxvZ29Gb3VuZDsNCgkJCXNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF1bJGYuJ2xvZ29fdXJsJy4kYl0gPSAkbG9nb1VybDsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXNlbGY6OiRvcmdhbml6ZXJEZXRhaWxzWyRpZF0gPSBmYWxzZTsNCgkJfQ0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJHJlZ1VzZXJzID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVnVXNlclZhbHVlKCRpZCwgJGZpZWxkLCAkZGVmYXVsdCA9IG51bGwpDQoJew0KCQlpZiAoJGlkID4gMCApDQoJCXsNCgkJCWlmICghaXNzZXQoc2VsZjo6JHJlZ1VzZXJzWyRpZF0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldFJlZ1VzZXJWYWx1ZSgkaWQpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBmaWVsZCBpZiBzZXQNCgkJCSRmaWVsZCA9ICdbcmVnaXN0ZXJlZF8nLiRmaWVsZC4nXSc7DQoJCQlpZiAoaXNzZXQoc2VsZjo6JHJlZ1VzZXJzWyRpZF0pICYmIGlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmaWVsZF0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokcmVnVXNlcnNbJGlkXVskZmllbGRdOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkZGVmYXVsdDsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlZ2lzdGVyZWREZXRhaWxzKCRpZCkNCgl7DQoJCWlmICgkaWQgPiAwKQ0KCQl7DQoJCQlpZiAoIWlzc2V0KHNlbGY6OiRyZWdVc2Vyc1skaWRdKSkNCgkJCXsNCgkJCQlzZWxmOjpzZXRSZWdVc2VyVmFsdWUoJGlkKTsNCgkJCX0NCgkJCXJldHVybiBzZWxmOjokcmVnVXNlcnNbJGlkXTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0UmVnVXNlclZhbHVlKCRpZCwgJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicpDQoJew0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCkNCgkJew0KCQkJJGYgPSAnW3JlZ2lzdGVyZWRfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIGZpcnN0IGdldCB0aGUgdXNlcg0KCQkkdXNlcklkID0gc2VsZjo6Z2V0VmFyKCdyZWdpc3RlcmVkX3VzZXInLCAkaWQsICdpZCcsICd1c2VyJyk7DQoJCSR1c2VyID0gRmFjdG9yeTo6Z2V0VXNlcigkdXNlcklkKTsNCgkJLy8gbm93IGxvYWQgYWxsIGN1c3RvbSB2YWx1ZXMNCgkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJYXJyYXkoJ2EubmFtZScsJ2EudmFsdWUnKSwNCgkJCWFycmF5KCduYW1lJywndmFsdWUnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX3JlZ2lzdHJ5X2N1c3RvbV92YWx1ZScsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCdhLnJlZ2lzdGVyZWRfdXNlciA9ICcgLiAoaW50KSAkaWQpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA+PSAxJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJGN1c3RvbVZhbHVlcyA9ICRkYi0+bG9hZEFzc29jTGlzdCgnbmFtZScsICd2YWx1ZScpOw0KCQkJLy8gcG9zc2libGUga2V5cw0KCQkJJHNlYXJjaCA9IGFycmF5KA0KCQkJCSdjb3VudHJ5JyANCgkJCQkJPT4gYXJyYXkoJ2NvdW50cnknLCAnY291bnRyeV9vbmUnLCAnY291bnRyeV8xJywgJ2NvdW50cnkxJywgJ2NvdW50cnlvbmUnLCAnY291bnRyeV8nKSwgDQoJCQkJJ2N1cnJlbmN5JyANCgkJCQkJPT4gYXJyYXkoJ2N1cnJlbmN5JywgJ2N1cnJlbmN5X29uZScsICdjdXJyZW5jeV8xJywgJ2N1cnJlbmN5MScsICdjdXJyZW5jeW9uZScsICdjdXJyZW5jeV8nKSwgDQoJCQkJJ3JlZ2lvbicgDQoJCQkJCT0+IGFycmF5KCdyZWdpb24nLCAncmVnaW9uX29uZScsICdyZWdpb25fMScsICdyZWdpb24xJywgJ3JlZ2lvbm9uZScsICdyZWdpb25fJykNCgkJCQkpOw0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF0gPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGN1c3RvbVZhbHVlcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCXsNCgkJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVskZi4ka2V5LiRiXSA9ICR2YWx1ZTsNCgkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHZhbHVlKSAmJiAhaXNfbnVtZXJpYygkdmFsdWUpKQ0KCQkJCXsNCgkJCQkJJGZvdW5kID0gZmFsc2U7DQoJCQkJCSRuZXdWYWx1ZSA9ICcnOw0KCQkJCQlmb3JlYWNoICgkc2VhcmNoIGFzICRjb2RlID0+ICRrZXlzKQ0KCQkJCQl7DQoJCQkJCQlpZiAoISRmb3VuZCkNCgkJCQkJCXsNCgkJCQkJCQlmb3JlYWNoKCRrZXlzIGFzICRrZV95KQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKCEkZm91bmQgJiYgJGtlX3kgPT09IHN0cnRvbG93ZXIoJGtleSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCWlmICgkbmV3VmFsdWUgPSBzZWxmOjpnZXRWYXIoJGNvZGUsICR2YWx1ZSwgJ25hbWUnLCAnaWQnKSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBpbnN1cmUgd2UgdXNlIHRoZSBjb3JyZWN0IGtleQ0KCQkJCQkJCQkJCSRrZXkgPSAkY29kZTsNCgkJCQkJCQkJCQkvLyBzdG9wIHNlYXJjaCBmb3IgdGhpcyBmaWVsZA0KCQkJCQkJCQkJCSRmb3VuZCA9IHRydWU7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJLy8gYWRkIGFsc28gaWYgZm91bmQNCgkJCQkJaWYgKCRmb3VuZCkNCgkJCQkJew0KCQkJCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJGtleS4kYl0gPSAoaW50KSAkbmV3VmFsdWU7DQoJCQkJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVskZi4ka2V5LidfbmFtZScuJGJdID0gJHZhbHVlOw0KCQkJCQkJaWYgKCdjb3VudHJ5JyA9PT0gJGtleSB8fCAnY3VycmVuY3knID09PSAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLiRrZXkuJ19jb2RldGhyZWUnLiRiXSA9IHNlbGY6OmdldFZhcigka2V5LCAoaW50KSAkbmV3VmFsdWUsICdpZCcsICdjb2RldGhyZWUnKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyBpZiBubyBjdXJyZW5jeSB3YXMgZm91bmQgYnV0IGNvdW50cnksIHRoZW4gc2V0IHRoZSBjdXJyZW5jeSB0byB0aGF0IG9mIHRoZSBjb3VudHJ5DQoJCWlmICghaXNzZXQoc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2N1cnJlbmN5X25hbWUnLiRiXSkgJiYgaXNzZXQoc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2NvdW50cnlfbmFtZScuJGJdKSkNCgkJew0KCQkJc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2N1cnJlbmN5X2NvZGV0aHJlZScuJGJdID0gc2VsZjo6Z2V0VmFyKCdjb3VudHJ5Jywgc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2NvdW50cnknLiRiXSwgJ2lkJywgJ2N1cnJlbmN5Jyk7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVskZi4nY3VycmVuY3knLiRiXSA9IHNlbGY6OmdldFZhcignY3VycmVuY3knLCBzZWxmOjokcmVnVXNlcnNbJGlkXVskZi4nY3VycmVuY3lfY29kZXRocmVlJy4kYl0sICdjb2RldGhyZWUnLCAnaWQnKTsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWyRmLidjdXJyZW5jeV9uYW1lJy4kYl0gPSBzZWxmOjpnZXRWYXIoJ2N1cnJlbmN5Jywgc2VsZjo6JHJlZ1VzZXJzWyRpZF1bJGYuJ2N1cnJlbmN5Jy4kYl0sICdpZCcsICduYW1lJyk7DQoJCX0NCgkJLy8gbm93IGxvYWQgYWxsIHRoZSB1c2VyIHZhbHVlcw0KCQlpZiAoJHVzZXJJZCA+IDApDQoJCXsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWydbcmVnaXN0ZXJlZF9pZF0nXSA9ICRpZDsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWydbcmVnaXN0ZXJlZF91c2VyX2lkXSddID0gJHVzZXJJZDsNCgkJCXNlbGY6OiRyZWdVc2Vyc1skaWRdWydbcmVnaXN0ZXJlZF9uYW1lXSddID0gJHVzZXItPm5hbWU7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfdXNlcm5hbWVdJ10gPSAkdXNlci0+dXNlcm5hbWU7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXVsnW3JlZ2lzdGVyZWRfZW1haWxdJ10gPSAkdXNlci0+ZW1haWw7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlzZWxmOjokcmVnVXNlcnNbJGlkXSA9IGZhbHNlOw0KCQl9DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgJHRheExvY2F0aW9uID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGF4TG9jYXRpb24oJHR5cGUsICRpZCwgJHZpZXcpDQoJew0KCQlpZiAoJGlkID4gMCB8fCAnY2FydCcgPT09ICR2aWV3KQ0KCQl7DQoJCQkka2V5ID0gJHR5cGUuJHZpZXcuJGlkOw0KCQkJaWYgKCFpc3NldChzZWxmOjokdGF4TG9jYXRpb25bJGtleV0pKQ0KCQkJew0KCQkJCXNlbGY6OnNldFRheExvY2F0aW9uKCR0eXBlLCAkaWQsICR2aWV3LCAka2V5KTsNCgkJCX0NCgkJCWlmIChpc3NldChzZWxmOjokdGF4TG9jYXRpb25bJGtleV0pICYmIHNlbGY6OiR0YXhMb2NhdGlvblska2V5XSA+IDApDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiR0YXhMb2NhdGlvblska2V5XTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRUYXhMb2NhdGlvbigkZmllbGQsICRpZCwgJHZpZXcsICRrZXkpDQoJew0KCQlzd2l0Y2ggKCR2aWV3KQ0KCQl7DQoJCQljYXNlICdpbnZvaWNlJzoNCgkJCQkvLyBnZXQgdGhlIGNsaWVudCBpZCBmcm9tIGpvYiBpZA0KCQkJCSRyZWdpc3RlcmVkX3VzZXIgPSBzZWxmOjpnZXRWYXIoJHZpZXcsICRpZCwgJ2lkJywgJ3JlZ2lzdGVyZWRfdXNlcicpOw0KCQkJCS8vIHJldHVybiBsb2NhdGlvbiBpZCBmcm9tIGNsaWVudCB0YWJsZQ0KCQkJCWlmICgkcmVnaXN0ZXJlZF91c2VyID4gMCkNCgkJCQl7DQoJCQkJCXNlbGY6OiR0YXhMb2NhdGlvblska2V5XSA9IHNlbGY6OmdldFJlZ1VzZXJWYWx1ZSgkcmVnaXN0ZXJlZF91c2VyLCAkZmllbGQpOw0KCQkJCX0NCgkJCWJyZWFrOw0KCQkJY2FzZSAnY2FydCc6DQoJCQljYXNlICdldmVudCc6DQoJCQkJLy8gZmlyc3QgZmluZCBvdXQgd2hvIHRoaXMgaXMNCgkJCQkkdXNlcklzID0gc2VsZjo6dXNlcklzKG51bGwsIHRydWUpOw0KCQkJCWlmICgkdXNlcklzWydpcyddID09IDMgfHwgJHVzZXJJc1snaXMnXSA9PSAyKQ0KCQkJCXsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJHVzZXJJc1snaXMnXSA9PSAxICYmICR1c2VySXNbJ2lkJ10gPiAwKQ0KCQkJCXsNCgkJCQkJc2VsZjo6JHRheExvY2F0aW9uWyRrZXldID0gc2VsZjo6Z2V0UmVnVXNlclZhbHVlKCR1c2VySXNbJ2lkJ10sICRmaWVsZCk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoJ2NvdW50cnknID09PSAkZmllbGQpDQoJCQkJew0KCQkJCQkvLyBwdWJsaWMgdXNlciBzbyB3ZSBmaXJzdCBnZXQgY291bnRyeQ0KCQkJCQlpZiAoJGNvdW50cnlUaHJlZSA9IHNlbGY6OmdldExvY2F0aW9uZGF0YShudWxsLCBudWxsLCBudWxsLCAnVVNEJywgMTAsIDEpKQ0KCQkJCQl7DQoJCQkJCQlzZWxmOjokdGF4TG9jYXRpb25bJGtleV0gPSBzZWxmOjpnZXRWYXIoJ2NvdW50cnknLCAkY291bnRyeVRocmVlLCAnY29kZXRocmVlJywgJ2lkJyk7DQoJCQkJCX0NCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGF4KCYkdGF4ZWQsICYkdG90YWwsICRpZCwgJHZpZXcpDQoJew0KCQkkc2V0VGF4ID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tXyMjI2NvbXBvbmVudCMjIycpLT5nZXQoJ3RheGVkJywgMCk7DQoJCWlmICgkc2V0VGF4ID09IDEgJiYgMSA9PSBzZWxmOjpnZXRPcmdhbml6ZXJWYWx1ZShzZWxmOjokb3JnYW5pemVyLCAndGF4ZWQnLCAwKSkNCgkJew0KCQkJLy8gc2V0IHRoZSB0YXggdG8gdGhpcyBhcnJheQ0KCQkJJHRheCA9IGFycmF5KCk7DQoJCQkkdGF4QWRkVG90YWwgPSBhcnJheSgpOw0KCQkJJGRlZHVjdCA9IGFycmF5KCk7DQoJCQkvLyBnZXQgdGhlIGNvdW50cnkgb2YgdGhlIGNsaWVudA0KCQkJJGNvdW50cnkgPSBzZWxmOjpnZXRUYXhMb2NhdGlvbignY291bnRyeScsICRpZCwgJHZpZXcpOw0KCQkJLy8gZ2V0IHRoZSByZWdpb24gb2YgdGhlIGNsaWVudA0KCQkJJHJlZ2lvbiA9IHNlbGY6OmdldFRheExvY2F0aW9uKCdyZWdpb24nLCAkaWQsICR2aWV3KTsNCgkJCS8vIG5vdyBnZXQgdGF4IGxldmVsIDEgb2YgdGhpcyBDb3VudHJ5IGFuZCBvciBSZWdpb24NCgkJCSR0YXhMZXZlbDEgPSBzZWxmOjpnZXRUYXhSdWxlKDEsJGNvdW50cnksJHJlZ2lvbik7DQoJCQkvLyBub3cgZ2V0IHRheCBsZXZlbCAyIG9mIHRoaXMgQ291bnRyeSBhbmQgb3IgUmVnaW9uDQoJCQkkdGF4TGV2ZWwyID0gc2VsZjo6Z2V0VGF4UnVsZSgyLCRjb3VudHJ5LCRyZWdpb24pOw0KCQkJLy8gdGF4IHR5cGVzDQoJCQkkdGF4X3R5cGUgPSBzZWxmOjpnZXRPcmdhbml6ZXJWYWx1ZShzZWxmOjokb3JnYW5pemVyLCAndGF4X3R5cGUnLCAyKTsNCgkJCS8vIHRheCBjb21wb3VuZA0KCQkJJHRheF9jb21wb3VuZCA9IHNlbGY6OmdldE9yZ2FuaXplclZhbHVlKHNlbGY6OiRvcmdhbml6ZXIsICd0YXhfY29tcG91bmQnLCBudWxsKTsNCgkJCS8vIGJhc2VkIG9uIHRheCB0eXBlDQoJCQlpZiAoMiA9PSAkdGF4X3R5cGUpDQoJCQl7DQoJCQkJLy8gdGF4IGV4Y2x1ZGVkDQoJCQkJaWYgKCR0YXhMZXZlbDEgJiYgaXNzZXQoJHRheExldmVsMVsndGF4J10pICYmIGlzX251bWVyaWMoJHRheExldmVsMVsndGF4J10pICYmIGlzc2V0KCR0YXhMZXZlbDFbJ25hbWUnXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRheExldmVsMVsnbmFtZSddKSkNCgkJCQl7DQoJCQkJCSR0YXhbMF1bJ25hbWUnXSA9ICR0YXhMZXZlbDFbJ25hbWUnXTsNCgkJCQkJJHRheFswXVsndGF4J10gPSAkdGF4TGV2ZWwxWyd0YXgnXTsNCgkJCQkJJHRtcEFtb3VudCA9ICBiY211bCgkdGF4ZWQsICR0YXhMZXZlbDFbJ3RheCddLCAyMCk7DQoJCQkJCSR0YXhbMF1bJ2Ftb3VudCddID0gYmNkaXYoJHRtcEFtb3VudCwgMTAwLCA0KTsNCgkJCQkJLy8gYWRkIHRvIHRheCB0b3RhbA0KCQkJCQkkdGF4QWRkVG90YWxbXSA9ICR0YXhbMF1bJ2Ftb3VudCddOw0KCQkJCX0NCgkJCQlpZiAoJHRheExldmVsMiAmJiBpc3NldCgkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMlsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwyWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRheFsxXVsnbmFtZSddID0gJHRheExldmVsMlsnbmFtZSddOw0KCQkJCQkkdGF4WzFdWyd0YXgnXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCQlpZiAoJHRheF9jb21wb3VuZCA9PSAxICYmIGlzc2V0KCR0YXhbMF1bJ2Ftb3VudCddKSAmJiAkdGF4WzBdWydhbW91bnQnXSA+IDApDQoJCQkJCXsNCgkJCQkJCSR0YXhlZFN1YiA9IGJjYWRkKCR0YXhlZCwgJHRheFswXVsnYW1vdW50J10sIDIwKTsNCgkJCQkJCSR0bXBBbW91bnQgPSAgYmNtdWwoJHRheGVkU3ViLCAkdGF4TGV2ZWwyWyd0YXgnXSwgMjApOw0KCQkJCQkJJHRheFsxXVsnYW1vdW50J10gPSBiY2RpdigkdG1wQW1vdW50LCAxMDAsIDQpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJHRtcEFtb3VudCA9ICBiY211bCgkdGF4ZWQsICR0YXhMZXZlbDJbJ3RheCddLCAyMCk7DQoJCQkJCQkkdGF4WzFdWydhbW91bnQnXSA9IGJjZGl2KCR0bXBBbW91bnQsIDEwMCwgNCk7DQoJCQkJCX0NCgkJCQkJLy8gYWRkIHRvIHRheCB0b3RhbA0KCQkJCQkkdGF4QWRkVG90YWxbXSA9ICR0YXhbMV1bJ2Ftb3VudCddOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoMSA9PSAkdGF4X3R5cGUpDQoJCQl7DQoJCQkJJHJlbW92YWwgPSBhcnJheSgpOw0KCQkJCS8vIHRheCBpbmNsdWRlZA0KCQkJCWlmICgkdGF4TGV2ZWwxICYmIGlzc2V0KCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc19udW1lcmljKCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc3NldCgkdGF4TGV2ZWwxWyduYW1lJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0YXhMZXZlbDFbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkcmVtb3ZhbFtdID0gJHRheExldmVsMVsndGF4J107DQoJCQkJfQ0KCQkJCWlmICgkdGF4TGV2ZWwyICYmIGlzc2V0KCR0YXhMZXZlbDJbJ3RheCddKSAmJiBpc19udW1lcmljKCR0YXhMZXZlbDJbJ3RheCddKSAmJiBpc3NldCgkdGF4TGV2ZWwyWyduYW1lJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0YXhMZXZlbDJbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkcmVtb3ZhbFtdID0gJHRheExldmVsMlsndGF4J107DQoJCQkJfQ0KCQkJCSRyZW1vdmFsID0gc2VsZjo6YmNzdW0oJHJlbW92YWwpOw0KCQkJCS8vIHRheCBpbmNsdWRlZA0KCQkJCWlmICgkdGF4TGV2ZWwxICYmIGlzc2V0KCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc19udW1lcmljKCR0YXhMZXZlbDFbJ3RheCddKSAmJiBpc3NldCgkdGF4TGV2ZWwxWyduYW1lJ10pICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCR0YXhMZXZlbDFbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGF4WzBdWyduYW1lJ10gPSAkdGF4TGV2ZWwxWyduYW1lJ107DQoJCQkJCSR0YXhbMF1bJ3RheCddID0gJHRheExldmVsMVsndGF4J107DQoJCQkJCWlmICgkdGF4X2NvbXBvdW5kID09IDEgJiYgJHRheExldmVsMiAmJiBpc3NldCgkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwyWyd0YXgnXSkpDQoJCQkJCXsNCgkJCQkJCSR0ZW1wVmFsMSA9IGJjZGl2KCR0YXhMZXZlbDJbJ3RheCddLCAxMDAsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsMiA9IGJjYWRkKCR0ZW1wVmFsMSwgMSwgMjApOw0KCQkJCQkJJHRlbXBWYWxfYSA9IGJjZGl2KCR0YXhlZCwgJHRlbXBWYWwyLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDMgPSBiY2RpdigkdGF4TGV2ZWwxWyd0YXgnXSwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDQgPSBiY2FkZCgkdGVtcFZhbDMsIDEsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsX2IgPSBiY2RpdigkdGVtcFZhbF9hLCAkdGVtcFZhbDQsIDIwKTsNCgkJCQkJCSR0YXhbMF1bJ2Ftb3VudCddID0gIGJjc3ViKCR0ZW1wVmFsX2EsICR0ZW1wVmFsX2IsIDQpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJHRlbXBWYWwxID0gYmNkaXYoJHJlbW92YWwsIDEwMCwgMjApOw0KCQkJCQkJJHRlbXBWYWwyID0gYmNhZGQoJHRlbXBWYWwxLCAxLCAyMCk7DQoJCQkJCQkkZXhjbHVkaW5nID0gYmNkaXYoJHRheGVkLCAkdGVtcFZhbDIsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsID0gYmNtdWwoJGV4Y2x1ZGluZywgJHRheExldmVsMVsndGF4J10sIDIwKTsNCgkJCQkJCSR0YXhbMF1bJ2Ftb3VudCddID0gYmNkaXYoJHRlbXBWYWwsIDEwMCwgNCk7IA0KCQkJCQl9DQoJCQkJCS8vIHJlbW92ZSBmcm9tIHByaWNlDQoJCQkJCSRkZWR1Y3RbXSA9ICR0YXhbMF1bJ2Ftb3VudCddOw0KCQkJCX0NCgkJCQlpZiAoJHRheExldmVsMiAmJiBpc3NldCgkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNfbnVtZXJpYygkdGF4TGV2ZWwyWyd0YXgnXSkgJiYgaXNzZXQoJHRheExldmVsMlsnbmFtZSddKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdGF4TGV2ZWwyWyduYW1lJ10pKQ0KCQkJCXsNCgkJCQkJJHRheFsxXVsnbmFtZSddID0gJHRheExldmVsMlsnbmFtZSddOw0KCQkJCQkkdGF4WzFdWyd0YXgnXSA9ICR0YXhMZXZlbDJbJ3RheCddOw0KCQkJCQlpZiAoJHRheF9jb21wb3VuZCA9PSAxICYmIGlzc2V0KCR0YXhbMF1bJ2Ftb3VudCddKSAmJiAkdGF4WzBdWydhbW91bnQnXSA+IDApDQoJCQkJCXsNCgkJCQkJCSR0ZW1wVmFsMSA9IGJjZGl2KCR0YXhMZXZlbDJbJ3RheCddLCAxMDAsIDIwKTsNCgkJCQkJCSR0ZW1wVmFsMiA9IGJjYWRkKCR0ZW1wVmFsMSwgMSwgMjApOw0KCQkJCQkJJHRlbXBWYWwgPSBiY2RpdigkdGF4ZWQsICR0ZW1wVmFsMiwgMjApOw0KCQkJCQkJJHRheFsxXVsnYW1vdW50J10gPSBiY3N1YigkdGF4ZWQsICR0ZW1wVmFsLCA0KTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSR0YXhbMV1bJ25hbWUnXSA9ICR0YXhMZXZlbDJbJ25hbWUnXTsNCgkJCQkJCSR0YXhbMV1bJ3RheCddID0gJHRheExldmVsMlsndGF4J107DQoJCQkJCQkkdGVtcFZhbDEgPSBiY2RpdigkcmVtb3ZhbCwgMTAwLCAyMCk7DQoJCQkJCQkkdGVtcFZhbDIgPSBiY2FkZCgkdGVtcFZhbDEsIDEsIDIwKTsNCgkJCQkJCSRleGNsdWRpbmcgPSBiY2RpdigkdGF4ZWQsICR0ZW1wVmFsMiwgMjApOw0KCQkJCQkJJHRlbXBWYWwgPSBiY211bCgkZXhjbHVkaW5nLCAkdGF4TGV2ZWwyWyd0YXgnXSwgMjApOw0KCQkJCQkJJHRheFsxXVsnYW1vdW50J10gPSBiY2RpdigkdGVtcFZhbCwgMTAwLCA0KTsgDQoJCQkJCX0NCgkJCQkJLy8gcmVtb3ZlIGZyb20gcHJpY2UNCgkJCQkJJGRlZHVjdFtdID0gJHRheFsxXVsnYW1vdW50J107DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgdGhlcmUgd2FzIHRheCBzZXQNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGF4KSkNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIHRheCB0byB0b3RhbA0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkdGF4QWRkVG90YWwpKQ0KCQkJCXsNCgkJCQkJJHRheGVkID0gc2VsZjo6YmNzdW0oJHRheEFkZFRvdGFsKTsNCgkJCQkJJHRvdGFsID0gc2VsZjo6YmNzdW0oYXJyYXkoJHRvdGFsLCAkdGF4ZWQpKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGVkdWN0KSkNCgkJCQl7DQoJCQkJCSR0YXhlZCA9IHNlbGY6OmJjc3VtKCRkZWR1Y3QpOw0KCQkJCX0NCgkJCQlyZXR1cm4gJHRheDsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCQkNCglwcm90ZWN0ZWQgc3RhdGljICR0YXhydWxlcyA9IGFycmF5KCk7DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFRheFJ1bGUoJGxldmVsLCAkY291bnRyeSA9IDAsICRyZWdpb24gPSAwKQ0KCXsNCgkJLy8gYnVpbGQgdGhlIGtleQ0KCQlpZiAoc2VsZjo6JG9yZ2FuaXplcikNCgkJew0KCQkJJGtleSA9ICRsZXZlbC4kY291bnRyeS4kcmVnaW9uLnNlbGY6OiRvcmdhbml6ZXI7DQoJCQkvLyBjaGVjayBpZiBpdCBoYXMgYmVlbiBzZXQNCgkJCWlmICghaXNzZXQoc2VsZjo6JHRheHJ1bGVzWyRrZXldKSkNCgkJCXsNCgkJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJCS8vIHNldCB0aGUgdGF4IHJ1bGUNCgkJCQlzZWxmOjpzZXRUYXhSdWxlKCRkYiwgJGtleSwgJGxldmVsLCAkY291bnRyeSwgJHJlZ2lvbik7DQoJCQl9DQoJCQkvLyBjaGVjayBpZiBpdCBoYXMgYmVlbiBzZXQNCgkJCWlmIChpc3NldChzZWxmOjokdGF4cnVsZXNbJGtleV0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR0YXhydWxlc1ska2V5XSkpDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OiR0YXhydWxlc1ska2V5XTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRUYXhSdWxlKCRkYiwgJGtleSwgJGxldmVsLCAkY291bnRyeSA9IDAsICRyZWdpb24gPSAwKQ0KCXsNCgkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoDQoJCQlhcnJheSgJJ2EuaWQnLCdhLnRheCcsJ2EubmFtZScpLA0KCQkJYXJyYXkoCSdpZCcsJ3RheCcsJ25hbWUnKSkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV90YXhfcnVsZScsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnB1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5sZXZlbCcpIC4gJyA9ICcuIChpbnQpICRsZXZlbCk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2Eub3JnYW5pemVyJykgLiAnID0gJy4gKGludCkgc2VsZjo6JG9yZ2FuaXplcik7DQoJCS8vIGNoZWNrIGZvciBjb3VudHJ5IGFuZCByZWdpb24NCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5jb3VudHJ5JykgLiAnID0gJy4gKGludCkgJGNvdW50cnkpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnJlZ2lvbicpIC4gJyA9ICcuIChpbnQpICRyZWdpb24pOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXNlbGY6OiR0YXhydWxlc1ska2V5XSA9ICRkYi0+bG9hZEFzc29jKCk7DQoJCX0NCgkJZWxzZWlmICgoaW50KSRjb3VudHJ5ID4gMCAmJiAoaW50KSRyZWdpb24gPiAwKQ0KCQl7DQoJCQkvLyBub3cgb25seSBjaGVjayBmb3IgY291bnRyeQ0KCQkJcmV0dXJuIHNlbGY6OnNldFRheFJ1bGUoJGRiLCAka2V5LCAkbGV2ZWwsICRjb3VudHJ5KTsNCgkJfQ0KCQllbHNlaWYgKChpbnQpJGNvdW50cnkgPiAwICYmICRyZWdpb24gPT0gMCkNCgkJew0KCQkJLy8gbm93IGNoZWNrIGZvciBhbnkgd2l0aG91dCBjb3VudHJ5DQoJCQlyZXR1cm4gc2VsZjo6c2V0VGF4UnVsZSgkZGIsICRrZXksICRsZXZlbCk7DQoJCX0NCgl9DQoNCgkvKioNCgkqIEBwYXJhbSBmbG9hdCAkYW1vdW50DQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiY3N1bSgkYXJyYXksICRzY2FsZSA9IDQpDQoJew0KCQkkcmVzID0gMC4wOw0KCQlmb3JlYWNoKCRhcnJheSBhcyAkdmFsKXsNCgkJCSRyZXMgPSBiY2FkZCgkcmVzLCAkdmFsLCAkc2NhbGUpOw0KCQl9DQoJCXJldHVybiAkcmVzOw0KCX0NCg0KCS8qKg0KCSAqIEBwYXJhbSAkYW1vdW50DQoJICogQHJldHVybiBtaXhlZHxudW1iZXINCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkZEN1cnJlbmN5KCRhbW91bnQsICRjb2RldGhyZWUgPSBudWxsKQ0KCXsNCgkJcmV0dXJuIHNlbGY6Om1ha2VNb25leSgkYW1vdW50LCAkY29kZXRocmVlKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRjdXJyZW5jeURldGFpbHMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogQHBhcmFtIGJvb2wgJGNvZGV0aHJlZQ0KCSAqIEByZXR1cm4gYm9vbHxtaXhlZA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VycmVuY3lEZXRhaWxzKCRjb2RldGhyZWUgPSBmYWxzZSkNCgl7DQoJCS8vIGNoZWNrIGlmIGN1cnJlbmN5IGNvZGV0aHJlZSBpcyBzZXQNCgkJaWYgKCEkY29kZXRocmVlICYmIGlzc2V0KHNlbGY6OiRvcmdhbml6ZXIpICYmIHNlbGY6OiRvcmdhbml6ZXIgPiAwKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHByaWNlIGN1cnJlbmN5DQoJCQkkY29kZXRocmVlID0gc2VsZjo6Z2V0T3JnYW5pemVyVmFsdWUoc2VsZjo6JG9yZ2FuaXplciwgJ2N1cnJlbmN5JywgZmFsc2UpOw0KCQl9DQoJCWVsc2VpZiAoISRjb2RldGhyZWUpDQoJCXsNCgkJCSRjb2RldGhyZWUgPSBzZWxmOjpnZXQoJ0FDVElWRV9DVVJSRU5DWScpOw0KCQl9DQoJCS8vIHJldHVybiBjYWNoZWQgZGF0YSBpZiBzZXQNCgkJaWYgKCRjb2RldGhyZWUgJiYgIWlzc2V0KHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0pKQ0KCQl7DQoJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJCWFycmF5KAknYS5pZCcsJ2EubmFtZScsJ2EuY29kZXRocmVlJywnYS5udW1lcmljY29kZScsJ2Euc3ltYm9sJywnYS50aG91c2FuZHMnLCdhLmRlY2ltYWxwbGFjZScsDQoJCQkJCSdhLmRlY2ltYWxzeW1ib2wnLCdhLnBvc2l0aXZlc3R5bGUnLCdhLm5lZ2F0aXZlc3R5bGUnKSwNCgkJCQlhcnJheSgJJ2N1cnJlbmN5X2lkJywnY3VycmVuY3lfbmFtZScsJ2N1cnJlbmN5X2NvZGV0aHJlZScsJ2N1cnJlbmN5X251bWVyaWNjb2RlJywnY3VycmVuY3lfc3ltYm9sJywNCgkJCQkJJ2N1cnJlbmN5X3Rob3VzYW5kcycsJ2N1cnJlbmN5X2RlY2ltYWxwbGFjZScsJ2N1cnJlbmN5X2RlY2ltYWxzeW1ib2wnLCdjdXJyZW5jeV9wb3NpdGl2ZXN0eWxlJywNCgkJCQkJJ2N1cnJlbmN5X25lZ2F0aXZlc3R5bGUnKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY3VycmVuY3knLCAnYScpKTsNCgkJCWlmIChpc19udW1lcmljKCRjb2RldGhyZWUpKQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnLiAoaW50KSAkY29kZXRocmVlKTsNCgkJCX0NCgkJCWVsc2VpZiAoc3RybGVuKCRjb2RldGhyZWUpID09IDMpDQoJCQl7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5jb2RldGhyZWUnKSAuICcgPSAnLiRkYi0+cXVvdGUoJGNvZGV0aHJlZSkpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuY29kZXRocmVlJykgLiAnID0gJy4kZGItPnF1b3RlKCdOT05FJykpOw0KCQkJfQ0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXSA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJfQ0KCQl9DQoJCS8vIG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBzZXQNCgkJaWYgKGlzc2V0KHNlbGY6OiRjdXJyZW5jeURldGFpbHNbJGNvZGV0aHJlZV0pKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6JGN1cnJlbmN5RGV0YWlsc1skY29kZXRocmVlXTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KW0NVU1RPTUNPREU9bWFrZU1vbmV5XQ0KW0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5ld0RvY051bWJlcigkb3JnYW5pemVyLCAkaWQgPSBudWxsKQ0KCXsNCgkJaWYgKGlzX251bWVyaWMoJG9yZ2FuaXplcikpDQoJCXsNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaW52b2ljZSBoYXMgdHJhbnNhY3Rpb25zDQoJCQkkaXNJbnZvaWNlID0gZmFsc2U7DQoJCQlpZiAoJGlkKQ0KCQkJew0KCQkJCWlmICgkZm91bmRUcmFucyA9IHNlbGY6OmdldFZhcigndHJhbnNhY3Rpb24nLCAkaWQsICdpbnZvaWNlJywgJ2lkJykpDQoJCQkJew0KCQkJCQkkaXNJbnZvaWNlID0gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCQkvLyBmaXJzdCB3ZSBnZXQgb3JnYW5pemVycyBpbnZvaWNpbmcgbWV0aG9kDQoJCQkkcHJvZm9ybWEgPSBzZWxmOjpnZXRWYXIoJ29yZ2FuaXplcicsICRvcmdhbml6ZXIsICdpZCcsICdwcm9mb3JtYScpOw0KCQkJaWYgKDAgPT0gJHByb2Zvcm1hIHx8ICRpc0ludm9pY2UpDQoJCQl7DQoJCQkJJGlzSW52b2ljZSA9IHRydWU7DQoJCQkJJG5leHQgPSAoaW50KSBzZWxmOjpnZXRWYXIoJ29yZ2FuaXplcicsICRvcmdhbml6ZXIsICdpZCcsICduZXh0X2ludm9pY2VfbnVtYmVyJyk7DQoJCQkJLy8gbWFrZSBzdXJlIHRoZSBuZXh0IGlzIGEgbnVtYmVyDQoJCQkJaWYgKCFpc19udW1lcmljKCRuZXh0KSB8fCAhJG5leHQgfHwgZW1wdHkoJG5leHQpIHx8ICRuZXh0IDwgMSkNCgkJCQl7DQoJCQkJCSRuZXh0ID0gMTsNCgkJCQl9DQoJCQkJLy8gdXBkYXRlIHRoZSBuZXh0IG51bWJlciBub3cNCgkJCQkkb3JnID0gbmV3IFxzdGRDbGFzcygpOw0KCQkJCSRvcmctPmlkID0gJG9yZ2FuaXplcjsNCgkJCQkkb3JnLT5uZXh0X2ludm9pY2VfbnVtYmVyID0gKGludCkgJG5leHQgKyAxOw0KCQkJCUZhY3Rvcnk6OmdldERibygpLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9vcmdhbml6ZXInLCAkb3JnLCAnaWQnKTsNCgkJCX0NCgkJCWVsc2VpZiAoMSA9PSAkcHJvZm9ybWEpDQoJCQl7DQoJCQkJJG5leHQgPSAoaW50KSBzZWxmOjpnZXRWYXIoJ29yZ2FuaXplcicsICRvcmdhbml6ZXIsICdpZCcsICduZXh0X3Byb2Zvcm1hX251bWJlcicpOw0KCQkJCS8vIG1ha2Ugc3VyZSB0aGUgbmV4dCBpcyBhIG51bWJlcg0KCQkJCWlmICghaXNfbnVtZXJpYygkbmV4dCkgfHwgISRuZXh0IHx8IGVtcHR5KCRuZXh0KSB8fCAkbmV4dCA8IDEpDQoJCQkJew0KCQkJCQkkbmV4dCA9IDE7DQoJCQkJfQ0KCQkJCS8vIHVwZGF0ZSB0aGUgbmV4dCBudW1iZXIgbm93DQoJCQkJJG9yZyA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkkb3JnLT5pZCA9ICRvcmdhbml6ZXI7DQoJCQkJJG9yZy0+bmV4dF9wcm9mb3JtYV9udW1iZXIgPSAoaW50KSAkbmV4dCArIDE7DQoJCQkJRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX29yZ2FuaXplcicsICRvcmcsICdpZCcpOw0KCQkJfQ0KCQkJLy8gZ2V0IHByZWZpeA0KCQkJJHByZWZpeCA9IHNlbGY6OmdldE9yZ2FuaXplclZhbHVlKCRvcmdhbml6ZXIsICdwcmVmaXgnLCAnVkRNJyk7DQoJCQlpZiAoJGlzSW52b2ljZSkNCgkJCXsNCgkJCQlyZXR1cm4gJ0lOVi0nLiRwcmVmaXguc3ByaW50ZignJTA3ZCcsICRuZXh0KTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlyZXR1cm4gJ1BJLScuJHByZWZpeC5zcHJpbnRmKCclMDZkJywgJG5leHQpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja05yKCYkaXRlbSwgJHdoZXJlKQ0KCXsNCgkJbGlzdCgkdHlwZSwgJGNvbHVtbikgPSBleHBsb2RlKCcuJywgJHdoZXJlKTsNCgkJaWYgKCR0eXBlICYmICRjb2x1bW4gJiYgaXNzZXQoJGl0ZW0tPiRjb2x1bW4pKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBhbGwgaXRlbXMgd2l0aCB0aGUgc2FtZSBjb2x1bW4NCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdChhcnJheSgnaWQnICwnY3JlYXRlZCcsICdudW1iZXInLCAnb3JnYW5pemVyJykpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fJy4kdHlwZSkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgkY29sdW1uKSAuICcgPSAnLiRkYi0+cXVvdGUoJGl0ZW0tPiRjb2x1bW4pKTsNCgkJCWlmIChpc3NldCgkaXRlbS0+b3JnYW5pemVyKSkNCgkJCXsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdvcmdhbml6ZXInKSAuICcgPSAnIC4gKGludCkgJGl0ZW0tPm9yZ2FuaXplcik7DQoJCQl9DQoJCQkkcXVlcnktPm9yZGVyKCdjcmVhdGVkIEFTQycpOw0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJGZvdW5kID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJCWlmIChjb3VudCgkZm91bmQpID4gMSkNCgkJCQl7DQoJCQkJCS8vIGlzIHRoZSBjdXJyZW50IGl0ZW0gdGhlIG9sZGVyIG9uZT8NCgkJCQkJaWYgKCRpdGVtLT5pZCAhPSAkZm91bmRbMF0tPmlkKQ0KCQkJCQl7DQoJCQkJCQlzZWxmOjpzZXROcigkaXRlbSwgJHR5cGUsICRjb2x1bW4pOwkJCQkJCQkNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIGluc3VyZSB3ZSB1cGRhdGUgUHJvZm9ybWFzIG9uY2UgcGF5bWVudCBpcyBtYWRlDQoJCQlpZiAoc3RycG9zKCRpdGVtLT4kY29sdW1uLCAnUEknKSAhPT0gZmFsc2UpDQoJCQl7DQoJCQkJaWYgKCR1cGRhdGUgPSBzZWxmOjpnZXRWYXIoJ3RyYW5zYWN0aW9uJywgJGl0ZW0tPmlkLCAnaW52b2ljZScsICdpZCcpKQ0KCQkJCXsNCgkJCQkJLy8gaWYgcHJvZm9ybWEgaXMgc2V0IHN0b3JlIGJhY2t1cCBmb3IgbGF0ZXIgdXNlLg0KCQkJCQlzZWxmOjpzZXROcigkaXRlbSwgJHR5cGUsICRjb2x1bW4sIGZhbHNlLCAncHJvZm9ybWEnKTsNCgkJCQkJLy8gdXBkYXRlIHRvIGludm9pY2UNCgkJCQkJc2VsZjo6c2V0TnIoJGl0ZW0sICR0eXBlLCAkY29sdW1uKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJaWYgKCEkdXBkYXRlID0gc2VsZjo6Z2V0VmFyKCd0cmFuc2FjdGlvbicsICRpdGVtLT5pZCwgJ2ludm9pY2UnLCAnaWQnKSkNCgkJCQl7DQoJCQkJCS8vIHRha2UgYmFjayB0byBwcm9mb3JtYSAoVE9ETyAtIG1heSBub3QgYmUgaWRlYWwpDQoJCQkJCXNlbGY6OnNldE5yKCRpdGVtLCAkdHlwZSwgJGNvbHVtbik7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmICghJGl0ZW0tPiRjb2x1bW4gfHwgZW1wdHkoJGl0ZW0tPiRjb2x1bW4pKQ0KCQl7DQoJCQkvLyBpZiBub3Qgc2V0LCB0aGVuIHNldCBub3cNCgkJCXNlbGY6OnNldE5yKCRpdGVtLCAkdHlwZSwgJGNvbHVtbik7CQ0KCQl9DQoJfQ0KCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0TnIoJiRpdGVtLCAmJHR5cGUsICYkY29sdW1uLCAkbmV3ID0gdHJ1ZSwgJG90aGVyID0gbnVsbCkNCgl7DQoJCWlmICgkbmV3KQ0KCQl7DQoJCQkvLyBmaXJzdCB1cGRhdGUgdGhlIGl0ZW0NCgkJCSRpdGVtLT4kY29sdW1uCT0gc2VsZjo6bmV3RG9jTnVtYmVyKCRpdGVtLT5vcmdhbml6ZXIsICRpdGVtLT5pZCk7DQoJCX0NCgkJLy8gbm93IHVwZGF0ZSB0aGUgdGFibGUNCgkJJHVwZGF0ZUl0ZW0JCT0gbmV3IFxzdGRDbGFzczsNCgkJJHVwZGF0ZUl0ZW0tPmlkCQk9ICRpdGVtLT5pZDsNCgkJaWYgKCRjb2x1bW4pDQoJCXsNCgkJCSR1cGRhdGVJdGVtLT4kY29sdW1uID0gJGl0ZW0tPiRjb2x1bW47DQoJCQlpZiAoJG90aGVyKQ0KCQkJew0KCQkJCS8vIHVwZGF0ZSB0aGUgb3RoZXIgZmllbGQgd2l0aCB0aGUgY29sdW1uDQoJCQkJJHVwZGF0ZUl0ZW0tPiRvdGhlciA9ICRpdGVtLT4kY29sdW1uOw0KCQkJCSRpdGVtLT4kb3RoZXIgPSAkaXRlbS0+JGNvbHVtbjsNCgkJCX0NCgkJfQkJCQkNCgkJLy8gdXBkYXRlIHRoZSBpdGVtIG5vdw0KCQlGYWN0b3J5OjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fJy4kdHlwZSwgJHVwZGF0ZUl0ZW0sICdpZCcpOw0KCX0NCltDVVNUT01DT0RFPWdldEZpbGVQYXRoXQ0KW0NVU1RPTUNPREU9Z2V0Rm9sZGVyUGF0aF0NCltDVVNUT01DT0RFPWdldExpbmtPcHRpb25zXQ==', 'CS8qKg0KCSogCW1ha2Ugc3VyZSBsb2NhdGlvbiBkYXRhIGlzIGxvYWRlZA0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZExvY2F0aW9uRGF0YSgpDQoJew0KCQlpZiAoIWNsYXNzX2V4aXN0cygnTG9jYXRpb25kYXRhSGVscGVyJywgRkFMU0UpKQ0KCQl7DQoJCQkkcGF0aCA9IEpQQVRIX1JPT1QgLiAnL2NvbXBvbmVudHMvY29tX2xvY2F0aW9uZGF0YS9oZWxwZXJzL2xvY2F0aW9uZGF0YS5waHAnOw0KCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSkNCgkJCXsNCgkJCQkvLyBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgaGVscGVyDQoJCQkJSkxvYWRlcjo6cmVnaXN0ZXIoJ0xvY2F0aW9uZGF0YUhlbHBlcicsICRwYXRoKTsNCgkJCQkvLyBmaXN0IHNldCB0aGUgZGVmYXVsdCBjb21wb25lbnQNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OiRkZWZhdWx0Q29tcG9uZW50ID0gJ2NvbV9bW1tjb21wb25lbnRdXV0nOw0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogCWNhbmNlbCBFeHBpcmVkIENhcnQgSXRlbXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KQ0KCXsNCgkJLy8gYWRkIGFuIGV2ZW50IHRoYXQgd2lsbCBzZW5kIG91dCBhbGwgY29uZmlybWF0aW9uIGVtYWlscywgbm90IHlldCBzZW5kDQoJCSRkb2N1bWVudC0+YWRkU2NyaXB0RGVjbGFyYXRpb24oIg0KCQkJalF1ZXJ5KHdpbmRvdykubG9hZChmdW5jdGlvbigpIHsNCgkJCQljYW5jZWxFeHBpcmVkQ2FydEl0ZW1zKDEpLmRvbmUoZnVuY3Rpb24ocmVzdWx0KSB7DQoJCQkJCWlmKHJlc3VsdCl7DQoJCQkJCQljb25zb2xlLmxvZyhyZXN1bHQpOw0KCQkJCQl9DQoJCQkJfSk7DQoJCQl9KTsNCgkJCQ0KCQkJZnVuY3Rpb24gY2FuY2VsRXhwaXJlZENhcnRJdGVtcyh0eXBlKSB7DQoJCQkJdmFyIGdldFVybCA9ICciLlVyaTo6cm9vdCgpLiJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1hamF4LmNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMmZm9ybWF0PWpzb24nOw0KCQkJCWlmKHR5cGUgPiAwKXsNCgkJCQkJdmFyIHJlcXVlc3QgPSAndG9rZW49Ii5Kb29tbGFfX181YmEzODUxM181YzRmXzRiMGRfOTM1ZV80OWU5ODZhNmJjZThfX19Qb3dlcjo6Z2V0Rm9ybVRva2VuKCkuIiZ0eXBlPScrdHlwZTsNCgkJCQl9DQoJCQkJcmV0dXJuIGpRdWVyeS5hamF4KHsNCgkJCQkJdHlwZTogJ1BPU1QnLA0KCQkJCQl1cmw6IGdldFVybCwNCgkJCQkJZGF0YVR5cGU6ICdqc29ucCcsDQoJCQkJCWRhdGE6IHJlcXVlc3QsDQoJCQkJCWpzb25wOiAnY2FsbGJhY2snDQoJCQkJfSk7DQoJCQl9Iik7DQoJfQ==', '', '', '', '', '', 'CQkvLyBydW4gc29tZSBob3VzZSBjbGVhbmluZw0KCQlpZiAoc2VsZjo6bG9hZExvY2F0aW9uRGF0YSgpKQ0KCQl7DQoJCQkvLyBydW4gdGhlIGxvY2F0aW9uIGRhdGEgcXVldWUgKHRvIGluc3VyZSBhbGwgY3JvbiBqb2JzIHJ1biB0aW1lbHkpDQoJCQlpZiAoJGRvY3VtZW50IGluc3RhbmNlb2YgSkRvY3VtZW50SHRtbCkNCgkJCXsNCgkJCQlMb2NhdGlvbmRhdGFIZWxwZXI6OnRoZVF1ZXVlKCRkb2N1bWVudCk7DQoJCQl9DQoJCX0NCgkJLy8gdGhlIFNlc3Npb24ga2VlcHMgdHJhY2sgb2YgYWxsIGRhdGEgcmVsYXRlZCB0byB0aGUgY3VycmVudCBzZXNzaW9uIG9mIHRoaXMgdXNlcg0KCQlzZWxmOjpsb2FkU2Vzc2lvbigpOw0KCQkvLyBjbGVhciB0aGUgY2FydCBpdGVtcyBpZiBleHBpcmVkDQoJCXNlbGY6OmNhbmNlbEV4cGlyZWRDYXJ0SXRlbXMoJGRvY3VtZW50KTs=', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Event registration component.', '', '', 'Registry', '.git', '', 1, 1, 'https://www.vdm.io/updates/registry_update_server.xml', 'https://www.vdm.io/', '', 'jqif3P20pl7i+oN/1eoZAJmOTlPh+TxrApbvTXJTruk86ZFIi6euOwrcLiunSXiH', 'https://www.vdm.io/access/', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 96, '', 1, 67), +(30, 1, '', '', '', '', '', '', '', 1, '', '', 1, 1, '', '', '', '', 1, '', 1, '', 1, '', '', '', '{}', 3, 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.1.0', 'Copyright (C) 2015. All Rights Reserved', '2017-01-30 13:53:54', '', 'Zdib+VUoIO/nAixMFHZyp2kTyD8oovQFhnAqodP9u6c=', 'EUg/4403qYU3kFEWMPLOQ//UpQBIJVDy36kZcnuooyk=', '', 'KSHC/+OhgfJ+HNbeFktXS39k1XO/hHNoB0f8P+7XzWQ=', '', '', '', 1, '', 'Just a basic document manager.', 'joomla@vdm.io', '', 'https://vdm.bz/jcb-document-manager', 'wnfGON0VXO+EKjfaWp2UHLQHb2EwbwTjs77WSjBR8rhfMb5/Ry8MsIK7XSbzqvrWW7j/YCn79Ku+E7ze924KWA==', '', '99cefa69-b61d-4964-adf5-2147b4b01742', 'images/vdm/DM500.jpg', '', 'https://github.com/vdm-io/JCB-Packages/raw/master/JCB_documentManager.zip', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2021-03-08 03:12:29', 1, 'Document Manager', 'documentmananger', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'CS8qKg0KCSogCXRoZSBnbG9iYWxzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zOw0KCXByb3RlY3RlZCBzdGF0aWMgJHVzZXI7DQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9ja2VyOw0KCXByb3RlY3RlZCBzdGF0aWMgJGJhc2lja2V5Ow0KDQoJLyoqDQoJKiAJc2V0IHRoZSBzZXNzaW9uIGRlZmF1bHRzIGlmIG5vdCBzZXQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFNlc3Npb25EZWZhdWx0cygpDQoJew0KCQkvLyBub3Rpbmcgc2V0IGZvciBub3cNCgl9DQoNCgkvKioNCgkgKiBAcGFyYW0gJGlkcw0KCSAqIEBwYXJhbSAkdHlwZQ0KCSAqIEByZXR1cm4gYXJyYXl8bnVsbA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TmFtZXMoJGlkcywgJHR5cGUsICRnZXRBbGlhcyA9IGZhbHNlKQ0KCXsNCgkJLy8gc2V0dXAgdGhlIGdldCBhcnJheQ0KCQkkZ2V0ID0gYXJyYXkoJ2EuaWQnKTsNCgkJaWYgKCRnZXRBbGlhcykNCgkJew0KCQkJJGdldFtdID0gJ2EuYWxpYXMnOw0KCQl9DQoJCXN3aXRjaCgkdHlwZSkNCgkJew0KCQkJY2FzZSAnY2F0aWQnOg0KCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCSRnZXRbXSA9ICdhLnRpdGxlJzsNCgkJCQkkdGFibGUgPSAnI19fY2F0ZWdvcmllcyc7DQoJCQlicmVhazsNCgkJCWNhc2UgJ3R5cGUnOg0KCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCSRnZXRbXSA9ICdhLm5hbWUnOw0KCQkJCSR0YWJsZSA9ICcjX19bW1tjb21wb25lbnRdXV1fdHlwZSc7DQoJCQlicmVhazsNCgkJCWNhc2UgJ3RhZyc6DQoJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJJGdldFtdID0gJ2EudGl0bGUnOw0KCQkJCSR0YWJsZSA9ICcjX190YWdzJzsNCgkJCWJyZWFrOwkJDQoJCX0NCgkJaWYgKCFpc3NldCgkdGFibGUpIHx8ICFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWRzKSkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCgkJLy8gY2hlY2sgdGhlIGFycmF5IG9mIGlkcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGlkcykpDQoJCXsNCgkJCWZvcmVhY2ggKCRpZHMgYXMgJGlkKQ0KCQkJeyANCgkJCQlpZiAoIShpc19udW1lcmljKCRpZCkpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIG51bGw7DQoJCQkJfSANCgkJCX0NCgkJfQ0KCQkvLyBub3cgbG9hZCBhbGwgY3VzdG9tIHZhbHVlcw0KCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJGdldCkpOw0KCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJHRhYmxlLCAnYScpKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5pZCBJTiAoJyAuIGltcGxvZGUoJywgJywgJGlkcykgLiAnKScpOw0KCQkkcXVlcnktPndoZXJlKCdhLnB1Ymxpc2hlZCA9IDEnKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkaXRlbXMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkNCgkJCXsNCgkJCQkvLyBzZXQgYWxpYXMgaWYgbmVlZGVkDQoJCQkJaWYgKCRnZXRBbGlhcyAmJiBpc3NldCgkaXRlbS0+YWxpYXMpICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5hbGlhcykpDQoJCQkJew0KCQkJCQkkaXRlbS0+aWQgPSAkaXRlbS0+aWQgLiAnOicgLiAkaXRlbS0+YWxpYXM7DQoJCQkJfQ0KCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCXN3aXRjaCgkdHlwZSkNCgkJCQl7DQoJCQkJCWNhc2UgJ2NhdGlkJzoNCgkJCQkJY2FzZSAndGFnJzoNCgkJCQkJCSRidWNrZXRbJGl0ZW0tPmlkXSA9ICRpdGVtLT50aXRsZTsNCgkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgJ3R5cGUnOg0KCQkJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJCQkkYnVja2V0WyRpdGVtLT5pZF0gPSAkaXRlbS0+bmFtZTsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRidWNrZXQ7DQoJCX0NCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoYXNFZGl0QWNjZXNzKCRyZWNvcmRJZCwgJHVzZXJJZCA9IG51bGwsICR0byA9ICdkb2N1bWVudCcpDQoJew0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJHVzZXJJZCkgJiYgJHVzZXJJZCBpbnN0YW5jZW9mIEpVc2VyKQ0KCQl7DQoJCQkkdXNlciA9ICR1c2VySWQ7DQoJCX0NCgkJZWxzZWlmIChpc19udW1lcmljKCR1c2VySWQpICYmICR1c2VySWQgPiAwKQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoJHVzZXJJZCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJfQ0KCQlpZiAoJHVzZXItPmF1dGhvcmlzZSgkdG8uJy5lZGl0JywgJ2NvbV9bW1tjb21wb25lbnRdXV0uJy4kdG8uJy4nIC4gKGludCkgICRyZWNvcmRJZCkpDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIGdldCB0aGUgbGlzdCBvZiB0YXJnZXQgKGlkID0+IG5hbWUpDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMaXN0KCR0YXJnZXQpDQoJew0KCQlzd2l0Y2goJHRhcmdldCkNCgkJew0KCQkJY2FzZSAnY2F0aWQnOg0KCQkJCS8vIHNldCByZWxhdGVkIHZhbHVlcw0KCQkJCXJldHVybiBzZWxmOjpnZXRDYXRlZ29yeUxpc3QoKTsNCgkJCWJyZWFrOw0KCQkJY2FzZSAndHlwZSc6DQoJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJcmV0dXJuIHNlbGY6OmdldFR5cGVMaXN0KCk7DQoJCQlicmVhazsNCgkJCWNhc2UgJ3RhZyc6DQoJCQkJLy8gc2V0IHJlbGF0ZWQgdmFsdWVzDQoJCQkJcmV0dXJuIHNlbGY6OmdldFRhZ0xpc3QoKTsNCgkJCWJyZWFrOwkJDQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogZ2V0IHRoZSBsaXN0IG9mIGNhdGVnb3JpZXMgKGlkID0+IHRpdGxlKQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2F0ZWdvcnlMaXN0KCkNCgl7DQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCSRxdWVyeQ0KCQkJLT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2lkJywgJ3RpdGxlJykpKQ0KCQkJLT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19jYXRlZ29yaWVzJykpDQoJCQktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwdWJsaXNoZWQnKSAuICcgPj0gMScpDQoJCQktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdleHRlbnNpb24nKSAuICcgPSAnIC4gJGRiLT5xdW90ZSgnY29tX1tbW2NvbXBvbmVudF1dXS5kb2N1bWVudCcpKQ0KCQkJLT5vcmRlcigkZGItPnF1b3RlTmFtZSgndGl0bGUnKSAuICcgYXNjJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZEFzc29jTGlzdCgnaWQnLCAndGl0bGUnKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBnZXQgdGhlIGxpc3Qgb2YgdHlwZXMgKGlkID0+IHRpdGxlKQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFnTGlzdCgpDQoJew0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkkcXVlcnkNCgkJCS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLmlkJywgJ2EudGl0bGUnKSkpDQoJCQktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX3RhZ3MnLCAnYScpKQ0KCQkJLT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5wdWJsaXNoZWQnKSAuICcgPj0gMScpDQoJCQktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fY29udGVudGl0ZW1fdGFnX21hcCcsICd0JykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuaWQnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3QudGFnX2lkJykgLiAnKScpDQoJCQktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnB1Ymxpc2hlZCcpIC4gJyA+PSAxJykNCgkJCS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3QudHlwZV9hbGlhcycpIC4gJyA9ICcgLiAkZGItPnF1b3RlKCdjb21fW1tbY29tcG9uZW50XV1dLmRvY3VtZW50JykpDQoJCQktPm9yZGVyKCRkYi0+cXVvdGVOYW1lKCdhLnRpdGxlJykgLiAnIGFzYycpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRBc3NvY0xpc3QoJ2lkJywgJ3RpdGxlJyk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogZ2V0IHRoZSBsaXN0IG9mIHR5cGVzIChpZCA9PiBuYW1lKQ0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VHlwZUxpc3QoKQ0KCXsNCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5DQoJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCAnbmFtZScpKSkNCgkJCS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3R5cGUnKSkNCgkJCS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA+PSAxJykNCgkJCS0+b3JkZXIoJGRiLT5xdW90ZU5hbWUoJ25hbWUnKSAuICcgYXNjJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZEFzc29jTGlzdCgnaWQnLCAnbmFtZScpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIGdldCB0aGUgZG9jdW1lbnQgSURzIG9mIHRoZSB0YXJnZXRzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREb2N1bWVudEZpbHRlcklkcygkdGFyZ2V0LCAkdGFyZ2V0cykNCgl7DQoJCS8vIFdoYXQgZXZlci4uLg0KCQlpZiAoJHRhcmdldCA9PT0gJ3R5cGUnKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6Z2V0VHlwZURvY3VtZW50SURzKCR0YXJnZXRzKTsNCgkJfQ0KCQllbHNlaWYgKCR0YXJnZXQgPT09ICd0YWcnKQ0KCQl7DQoJCQlyZXR1cm4gc2VsZjo6Z2V0VGFnRG9jdW1lbnRJRHMoJHRhcmdldHMpOw0KCQl9DQoJCWVsc2VpZiAoJHRhcmdldCA9PT0gJ2NhdGlkJykNCgkJew0KCQkJcmV0dXJuIHNlbGY6OmdldENhdGVnb3J5RG9jdW1lbnRJRHMoJHRhcmdldHMpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIGdldCB0aGUgbGlzdCBkb2N1bWVudCBpZHMgb2YgdGhlc2UgdHlwZXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFR5cGVEb2N1bWVudElEcygkaWRzKQ0KCXsNCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5DQoJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCAndHlwZScpKSkNCgkJCS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2RvY3VtZW50JykpDQoJCQktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCd0eXBlJykgLiAnICE9ICcgLiAkZGItPnF1b3RlKCcnKSk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJHJlc3VsdHMgPSAkZGItPmxvYWRBc3NvY0xpc3QoKTsNCgkJCSRtYXRjaGVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2ggKCRyZXN1bHRzIGFzICRrID0+ICR2KQ0KCQkJew0KCQkJCSR2YWx1ZXMgPSBqc29uX2RlY29kZSgkdlsndHlwZSddLCB0cnVlKTsNCgkJCQlpZiAoYXJyYXlfaW50ZXJzZWN0KCRpZHMsICR2YWx1ZXMpKQ0KCQkJCXsNCgkJCQkJJG1hdGNoZXNbJHZbJ2lkJ11dID0gJHZbJ2lkJ107DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gQ2hlY2tzIHRoYXQgd2UgZm91bmQgbWF0Y2hlcw0KCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRtYXRjaGVzKSkNCgkJCXsNCgkJCQlyZXR1cm4gYXJyYXlfdmFsdWVzKCRtYXRjaGVzKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBnZXQgdGhlIGxpc3QgZG9jdW1lbnQgaWRzIG9mIHRoZXNlIHRhZ3MNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ0RvY3VtZW50SURzKCRpZHMpDQoJew0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCg0KCQkkcXVlcnkNCgkJCS0+c2VsZWN0KCdjb250ZW50X2l0ZW1faWQnKQ0KCQkJLT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19jb250ZW50aXRlbV90YWdfbWFwJykpDQoJCQktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCd0YWdfaWQnKSAuICcgSU4gKCcgLiBpbXBsb2RlKCcsJywgJGlkcykgLiAnKScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiBhcnJheV91bmlxdWUoJGRiLT5sb2FkQ29sdW1uKCkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIGdldCB0aGUgbGlzdCBkb2N1bWVudCBpZHMgb2YgdGhlc2UgY2F0ZWdvcmllcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2F0ZWdvcnlEb2N1bWVudElEcygkaWRzKQ0KCXsNCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJJHF1ZXJ5DQoJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCAnY2F0aWQnKSkpDQoJCQktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9kb2N1bWVudCcpKQ0KCQkJLT53aGVyZSgkZGItPnF1b3RlTmFtZSgnY2F0aWQnKSAuICcgIT0gJyAuICRkYi0+cXVvdGUoJycpKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkcmVzdWx0cyA9ICRkYi0+bG9hZEFzc29jTGlzdCgpOw0KCQkJJG1hdGNoZXMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJHJlc3VsdHMgYXMgJGsgPT4gJHYpDQoJCQl7DQoJCQkJJHZhbHVlID0ganNvbl9kZWNvZGUoJHZbJ2NhdGlkJ10sIHRydWUpOw0KCQkJCWlmIChhcnJheV9pbnRlcnNlY3QoJGlkcywgJHZhbHVlKSkNCgkJCQl7DQoJCQkJCSRtYXRjaGVzWyR2WydpZCddXSA9ICR2WydpZCddOw0KCQkJCX0NCgkJCX0NCgkJCS8vIENoZWNrcyB0aGF0IHdlIGZvdW5kIG1hdGNoZXMNCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbWF0Y2hlcykpDQoJCQl7DQoJCQkJcmV0dXJuIGFycmF5X3ZhbHVlcygkbWF0Y2hlcyk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPWltYWdlSGVscGVyc10NCltDVVNUT01DT0RFPWdldEZvbGRlclBhdGhdDQpbQ1VTVE9NQ09ERT1nZXRGaWxlUGF0aF0NCltDVVNUT01DT0RFPWdldEltYWdlTGlua10NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQpbQ1VTVE9NQ09ERT1iYXNlU2l4dHlGb3VyVVJMXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCltDVVNUT01DT0RFPWdldExpbmtPcHRpb25zXQ0KW0NVU1RPTUNPREU9bWltZVR5cGVd', 'CS8qKg0KCSogCXNldCB0aGUgc2Vzc2lvbiBkZWZhdWx0cyBpZiBub3Qgc2V0DQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb3VudExvY2FsRG93bmxvYWQoJiRuYW1lLCAmJGlucHV0KQ0KCXsNCgkJLy8gZ2V0IHRoZSBpZA0KCQlpZiAoJGlkID0gJGlucHV0LT5nZXQoJ2NvdW50ZXInLCBOVUxMLCAnSU5UJykpDQoJCXsNCgkJCS8vIHNldCB0aGUgZGF0ZSBvYmplY3QNCgkJCSRkYXRlID0gRmFjdG9yeTo6Z2V0RGF0ZSgpOw0KCQkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBmaWxlIGFscmVhZHkgaGFzIHN0YXRpc3RpY3MNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcsJ2NvdW50ZXInKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZG9jdW1lbnQnKSAuICcgPSAnLiAoaW50KSAkaWQpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZmlsZW5hbWUnKSAuICcgPSAnLiAkZGItPnF1b3RlKCRuYW1lKSk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkc3RhdGlzdGljID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJLy8gYWxyZWFkeSBoYXMgYW4gZW50cnkNCgkJCQkkc3RhdGlzdGljLT5jb3VudGVyKys7DQoJCQkJJHN0YXRpc3RpYy0+bW9kaWZpZWQgPSAkZGF0ZS0+dG9TcWwoKTsNCgkJCQkvLyB1cGRhdGUgdGhlIGVudHJ5DQoJCQkJcmV0dXJuICRkYi0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJHN0YXRpc3RpYywgJ2lkJyk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IGEgbmV3IGVudHJ5DQoJCQkJJGNvdW50ZXIgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJJGNvdW50ZXItPmZpbGVuYW1lID0gKHN0cmluZykgJG5hbWU7DQoJCQkJJGNvdW50ZXItPmRvY3VtZW50ID0gKGludCkgJGlkOw0KCQkJCSRjb3VudGVyLT5jb3VudGVyID0gMTsNCgkJCQkkY291bnRlci0+cHVibGlzaGVkID0gMTsNCgkJCQkkY291bnRlci0+Y3JlYXRlZCA9ICRkYXRlLT50b1NxbCgpOw0KCQkJCSRjb3VudGVyLT5hY2Nlc3MgPSAxOw0KCQkJCSRjb3VudGVyLT52ZXJzaW9uID0gMTsNCgkJCQkvLyBzZXQgYSBuZXcgZW50cnkNCgkJCQkkZG9uZSA9ICRkYi0+aW5zZXJ0T2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJGNvdW50ZXIpOw0KCQkJCS8vIGlmIGRvbmUgcmV0dXJuIGxhc3QgdXNlZCBpZA0KCQkJCWlmICgkZG9uZSkNCgkJCQl7DQoJCQkJCSRuZXdJZCA9ICAkZGItPmluc2VydGlkKCk7DQoJCQkJCS8vIG1ha2Ugc3VyZSB0aGUgYWNjZXNzIG9mIGFzc2V0IGlzIHNldA0KCQkJCQlyZXR1cm4gc2VsZjo6c2V0QXNzZXQoJG5ld0lkLCdzdGF0aXN0aWMnKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9', '', '', '', '', 'Ly8gbG9hZCB0aGUgaGVscGVyIGNsYXNzDQpKTG9hZGVyOjpyZWdpc3RlcignW1tbQ29tcG9uZW50XV1dSGVscGVyJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL2hlbHBlcnMvW1tbY29tcG9uZW50XV1dLnBocCcpOw0KLy8gY2hlY2sgdGhlIHZlcnNpb24gb2YgSkNCDQokbWFuaWZlc3QgPSBbW1tDb21wb25lbnRdXV1IZWxwZXI6Om1hbmlmZXN0KCk7DQppZiAoaXNzZXQoJG1hbmlmZXN0LT52ZXJzaW9uKSAmJiBzdHJwb3MoJG1hbmlmZXN0LT52ZXJzaW9uLCAnLicpICE9PSBmYWxzZSkNCnsNCgkvLyBnZXQgdGhlIHZlcnNpb24NCgkkdGhpcy0+SkNCdmVyc2lvbiA9IGV4cGxvZGUoJy4nLCAkbWFuaWZlc3QtPnZlcnNpb24pOw0KCS8vIEdldCBhIGRiIGNvbm5lY3Rpb24uDQoJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJLy8gdGFyZ2V0IHZlcnNpb24gbGVzcyB0aGVuIG9yIGVxdWFsIHRvIDEuMC4xMA0KCWlmIChjb3VudCgkdGhpcy0+SkNCdmVyc2lvbikgPT0gMyAmJiAkdGhpcy0+SkNCdmVyc2lvblswXSA8PSAxICYmICR0aGlzLT5KQ0J2ZXJzaW9uWzFdID09IDAgJiYgJHRoaXMtPkpDQnZlcnNpb25bMl0gPD0gMTApDQoJew0KCQkvLyB3ZSBuZWVkIHRvIG1ha2UgYSBkYXRhYmFzZSBjb3JyZWN0aW9uIGZvciB0aGUgZmllbGQgY2F0ZWdvcmllcyBhbmQgdGhlIGZpZWxkdHlwZSBjYXRlZ29yaWVzDQoJCSRmaXhfY2F0ZWdvcmllcyA9IGFycmF5KA0KCQkJJ2NvbV9kb2N1bWVudG1hbmFuZ2VyLmRvY3VtZW50cycgPT4gJ2NvbV9kb2N1bWVudG1hbmFuZ2VyLmRvY3VtZW50Jw0KCQkpOw0KCQkvLyB0YXJnZXRlZCB0YWJsZXMgKHRvIGZpeCBhbGwgcGxhY2VzIGNhdGVnb3JpZXMgYXJlIG1hcHBlZCBpbnRvIEpvb21sYSkNCgkJJGZpeF90YWJsZXMgPSBhcnJheSgNCgkJCSdjb250ZW50X3R5cGVzJyA9PiBhcnJheSgNCgkJCQknaWQnID0+ICd0eXBlX2lkJywNCgkJCQkna2V5JyA9PiAndHlwZV9hbGlhcycsDQoJCQkJJ3N1ZmZpeCcgPT4gJy5jYXRlZ29yeScpLA0KCQkJJ2NvbnRlbnRpdGVtX3RhZ19tYXAnID0+IGFycmF5KA0KCQkJCSdpZCcgPT4gJ3R5cGVfaWQnLA0KCQkJCSdrZXknID0+ICd0eXBlX2FsaWFzJywNCgkJCQknc3VmZml4JyA9PiAnLmNhdGVnb3J5JyksDQoJCQkndWNtX2NvbnRlbnQnID0+IGFycmF5KA0KCQkJCSdpZCcgPT4gJ2NvcmVfY29udGVudF9pZCcsDQoJCQkJJ2tleScgPT4gJ2NvcmVfdHlwZV9hbGlhcycsDQoJCQkJJ3N1ZmZpeCcgPT4gJy5jYXRlZ29yeScpLA0KCQkJJ2NhdGVnb3JpZXMnID0+IGFycmF5KA0KCQkJCSdpZCcgPT4gJ2lkJywNCgkJCQkna2V5JyA9PiAnZXh0ZW5zaW9uJywNCgkJCQknc3VmZml4JyA9PiAnJykNCgkJKTsNCg0KCQkvLyB0aGUgc2NyaXB0IHRoYXQgZG9lcyB0aGUgd29yaw0KCQlmb3JlYWNoICgkZml4X2NhdGVnb3JpZXMgYXMgJGZpeCA9PiAkY2F0ZWdvcnkpDQoJCXsNCgkJCS8vIGxvb3Agb3ZlciB0aGUgdGFyZ2V0ZWQgdGFibGVzDQoJCQlmb3JlYWNoICgkZml4X3RhYmxlcyBhcyAkX3RhYmxlID0+ICRfdXBkYXRlKQ0KCQkJew0KCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCQkvLyBnZXQgYWxsIHR5cGVfaWRzDQoJCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoJF91cGRhdGVbJ2lkJ10pKTsNCgkJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfXycgLiAkX3RhYmxlKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSggJGRiLT5xdW90ZU5hbWUoJF91cGRhdGVbJ2tleSddKSAuICcgPSAnIC4gJGRiLT5xdW90ZSgkZml4IC4gJF91cGRhdGVbJ3N1ZmZpeCddKSk7DQoJCQkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQkJew0KCQkJCQkvLyBhbGwgdGhlc2UgbXVzdCBiZSB1cGRhdGVkDQoJCQkJCSRpZHMgPSAkZGItPmxvYWRDb2x1bW4oKTsNCgkJCQkJLy8gRmllbGRzIHRvIHVwZGF0ZS4NCgkJCQkJJGZpZWxkcyA9IGFycmF5KA0KCQkJCQkJJGRiLT5xdW90ZU5hbWUoJF91cGRhdGVbJ2tleSddKSAuICcgPSAnIC4gJGRiLT5xdW90ZSgkY2F0ZWdvcnkgLiAkX3VwZGF0ZVsnc3VmZml4J10pDQoJCQkJCSk7DQoJCQkJCS8vIENvbmRpdGlvbnMgZm9yIHdoaWNoIHJlY29yZHMgc2hvdWxkIGJlIHVwZGF0ZWQuDQoJCQkJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCQkJCQkkZGItPnF1b3RlTmFtZSgkX3VwZGF0ZVsnaWQnXSkgLiAnIElOICgnIC4gaW1wbG9kZSgnLCAnLCAkaWRzKSAuICcpJw0KCQkJCQkpOw0KCQkJCQkkcXVlcnktPnVwZGF0ZSgkZGItPnF1b3RlTmFtZSgnI19fJyAuICRfdGFibGUpKS0+c2V0KCRmaWVsZHMpLT53aGVyZSgkY29uZGl0aW9ucyk7DQoJCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkJJHJlc3VsdCA9ICRkYi0+ZXhlY3V0ZSgpOw0KCQkJCQkvLyBvbiBzdWNjZXNzDQoJCQkJCWlmICgkcmVzdWx0KQ0KCQkJCQl7DQoJCQkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgiPHA+VXBkYXRlZCA8Yj4jX18kX3RhYmxlIC0gIiAuICRfdXBkYXRlWydrZXknXSAuICI8L2I+IGZyb20gPGI+JGZpeDwvYj4iIC4gJF91cGRhdGVbJ3N1ZmZpeCddIC4gIiB0byA8Yj4kY2F0ZWdvcnk8L2I+IiAuICRfdXBkYXRlWydzdWZmaXgnXSAuICIhPC9wPiIsICdOb3RpY2UnKTsNCgkJCQkJfQ0KDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ==', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXSgvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV8jIyNjb21wb25lbnQjIyMvYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMgQ29tcG9uZW50IE51bWJlcg0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCiMgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyDQoNCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEpDQiB2aXNpdCBbVkRNXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKSBUb2RheSEgVGhlIGZ1dHVyZSBpcyBoZXJlIQ==', '', '', 'Document Manager', '', '', 'Document Manager (public)', '.git', '', 1, 1, 'https://www.vdm.io/updates/documentmananger_server.xml', 'https://www.vdm.io/', '', 'aTztaqDOt1+Vw90EP+DXPDoPAdbiYmjtFnAiRryEkn4=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 97, '', 1, 11), +(31, 1, '', '', '', 1, '', '', '', 1, '', 1, 1, 1, '', '', '', '', '', '', 1, '', 1, '', '', '', '', 3, '', 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.2.1', 'Copyright (C) 2015. All Rights Reserved', '2017-06-01 22:25:40', 1, '', '', '', '', '', '', '', 1, '', 'Expert Database component adds the ability to your Joomla to manage various experts and their related details.', 'llewellyn@vdm.io', '', '', 'tVUYzE97vvcoI5JEiOwLKU3BzT5nGjkhmsAag9Qu0DsyHgSoWt2XzuB3SQ/sMh2Y', '', '4adef9ac-bbcc-40ac-8449-9e0baa27e73a', 'images/expertdatabase.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2017-08-25 00:36:38', 1, 'Expert Database', 'expertdatabase', '', 4, 'CQlzZWxmOjpsb2FkQ29uZmlybWF0aW9uQWpheCgkZG9jdW1lbnQpOw==', 'CS8qKg0KCSogCUxvYWQgdGhlIENvbmZpcm1hdGlvbiBBamF4IHRvIHBhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRDb25maXJtYXRpb25BamF4KCRkb2N1bWVudCkNCgl7DQoJCS8vIGFkZCBhbiBldmVudCB0aGF0IHdpbGwgc2VuZCBvdXQgYWxsIGNvbmZpcm1hdGlvbiBlbWFpbHMsIG5vdCB5ZXQgc2VuZA0KCQkkZG9jdW1lbnQtPmFkZFNjcmlwdERlY2xhcmF0aW9uKCINCgkJCWpRdWVyeSh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJc2VuZENvbmZpcm1hdGlvbkVtYWlscygxKTsNCgkJCX0pOw0KCQkJDQoJCQlmdW5jdGlvbiBzZW5kQ29uZmlybWF0aW9uRW1haWxzKHR5cGUpIHsNCgkJCQl2YXIgZ2V0VXJsID0gJyIuVXJpOjpyb290KCkuImFkbWluaXN0cmF0b3IvaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9YWpheC5zZW5kQ29uZmlybWF0aW9uRW1haWxzJmZvcm1hdD1qc29uJzsNCgkJCQlpZih0eXBlID4gMCl7DQoJCQkJCXZhciByZXF1ZXN0ID0gJ3Rva2VuPSIuSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpLiImdHlwZT0nK3R5cGU7DQoJCQkJfQ0KCQkJCXJldHVybiBqUXVlcnkuYWpheCh7DQoJCQkJCXR5cGU6ICdQT1NUJywNCgkJCQkJdXJsOiBnZXRVcmwsDQoJCQkJCWRhdGFUeXBlOiAnanNvbnAnLA0KCQkJCQlkYXRhOiByZXF1ZXN0LA0KCQkJCQlqc29ucDogJ2NhbGxiYWNrJw0KCQkJCX0pOw0KCQkJfSIpOw0KCX0=', 'CS8qKg0KCSogCVRoZSBtYWluIHNlbmQgZW1haWwNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRyZXBseUVtYWlsOw0KDQoJLyoqDQoJKiAJVGhlIGNvbXBvbmVudCBwYXJhbXMNCgkqKi8NCglwdWJsaWMgc3RhdGljICRwYXJhbXM7DQoNCgkvKioNCgkqIAlUaGUgTWFpbiBmcm9tIG5hbWUNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRyZXBseU5hbWU7DQoNCgkvKioNCgkqIAlTZW5kIHRoZSBjb25maXJtYXRpb24gZW1haWxzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRUZW1wbGF0ZSgkdHlwZSwgJGRlZmF1bHQgPSBudWxsKQ0KCXsNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGFyYW1zKSkNCgkJew0KCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJfQ0KCQkkYm9keSA9IHNlbGY6OiRwYXJhbXMtPmdldCgkdHlwZSwgJGRlZmF1bHQpOw0KCQkvLyByZXR1cm4gdGhlIHRlbXBsYXRlIGlmIGZvdW5kDQoJCWlmICgkYm9keSkNCgkJew0KCQkJcmV0dXJuICRib2R5Ow0KCQl9DQoJCXJldHVybiBUZXh0OjpzcHJpbnRmKCdObyB0ZW1wbGF0ZSBmb3IgPGI+JXM8L2I+IHdlcmUgZm91bmQnLCBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCR0eXBlLCAndycpKTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgcGxhY2UgaG9sZGVycw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGxhY2VIb2xkZXJzKCR0eXBlKQ0KCXsNCgkJaWYgKCdkb2N1bWVudCcgPT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheV9rZXlzKHNlbGY6OmdldENvbXBhbnlEZXRhaWxzKCdwbGFjZWhvbGRlcicpKTsNCgkJfQ0KCQllbHNlaWYgKCdjb25maXJtYXRpb25fZW1haWwnID09ICR0eXBlKQ0KCQl7DQoJCQkkZiA9ICdbJzsNCgkJCSRiID0gJ10nOw0KCQkJJHBsYWNlaG9sZGVyID0gYXJyYXkoKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXkoJ1tkb2N1bWVudF9oZWFkZXJdJyk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5X2tleXMoc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJykpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheV92YWx1ZXMoc2VsZjo6Z2V0U2VsZWN0aW9uKCdleHBlcnQnLCAkZi4nZXhwZXJ0XycsICRiKSk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5X3ZhbHVlcyhzZWxmOjpnZXRTZWxlY3Rpb24oJ3JlZmVycmFsJywgJGYuJ3JlZmVycmFsXycsICRiKSk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbY29uZmlybWF0aW9uX2xpbmtdJyk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbZG9jdW1lbnRfZm9vdGVyXScpOw0KCQkJcmV0dXJuICBzZWxmOjptZXJnZUFycmF5cygkcGxhY2Vob2xkZXIpOw0KCQl9DQoJCWVsc2VpZiAoJ2V4cGVydF9wcm9maWxlJyA9PSAkdHlwZSkNCgkJew0KCQkJJGYgPSAnWyc7DQoJCQkkYiA9ICddJzsNCgkJCSRwbGFjZWhvbGRlciA9IGFycmF5KCk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5KCdbZG9jdW1lbnRfaGVhZGVyXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheV9rZXlzKHNlbGY6OmdldENvbXBhbnlEZXRhaWxzKCdwbGFjZWhvbGRlcicpKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXlfdmFsdWVzKHNlbGY6OmdldFNlbGVjdGlvbignZXhwZXJ0JywgJGYuJ2V4cGVydF8nLCAkYikpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2lzX29yZ2FuaXNhdGlvbl0nLCAnW2lzX2FkbWluXScpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2RvY3VtZW50X2Zvb3Rlcl0nKTsNCgkJCXJldHVybiAgc2VsZjo6bWVyZ2VBcnJheXMoJHBsYWNlaG9sZGVyKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiAJU2VuZCBhIG1lc3NhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlbmRNZXNzYWdlKCRlcG9zY29kZSwgJHJlcGx5VG9OYW1lLCAkcmVwbHlUb0VtYWlsLCAkbWVzc2FnZSkNCgl7DQoJCSRlcG9zY29kZSA9IFtbW0NvbXBvbmVudF1dXUhlbHBlcjo6YmFzZTY0X3VybGRlY29kZSgkZXBvc2NvZGUpOw0KCQkvLyBHZXQgYSBDcnlwdCBLZXkNCgkJJGJhc2lja2V5ID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRDcnlwdEtleSgnYmFzaWMnKTsNCgkJJG9wZW5lciA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRiYXNpY2tleSwgMTI4KTsNCgkJJGVwb3NDb2RlID0gcnRyaW0oJG9wZW5lci0+ZGVjcnlwdFN0cmluZygkZXBvc2NvZGUpLCAiXDAiKTsNCgkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRlcG9zQ29kZSkpDQoJCXsNCgkJCSR0YXJnZXQgPSBqc29uX2RlY29kZSgkZXBvc0NvZGUpOw0KCQkJaWYgKGlzc2V0KCR0YXJnZXQtPmlkKSAmJiAkdGFyZ2V0LT5pZCA+IDApDQoJCQl7DQoJCQkJJGV4cGVydCA9IHNlbGY6OmdldEV4cGVydERldGFpbHMoJHRhcmdldC0+aWQsICdvYmplY3QnLCAnc3BlY2lhbCcpOw0KCQkJCWlmIChpc3NldCgkZXhwZXJ0LT5lbWFpbCkgJiYgaXNzZXQoJHRhcmdldC0+ZW1haWwpICYmICRleHBlcnQtPmVtYWlsID09ICR0YXJnZXQtPmVtYWlsKQ0KCQkJCXsNCgkJCQkJLy8gc2V0dXAgdGhlIHN1YmplY3QNCgkJCQkJJHN1YmplY3QgPSBUZXh0OjpzcHJpbnRmKCdBIG1lc3NhZ2UgZnJvbSAlcyB0byAlcycsICRyZXBseVRvTmFtZSwgJGV4cGVydC0+bmFtZSk7DQoJCQkJCS8vIHNldHVwIHRoZSBodG1sDQoJCQkJCSRtZXNzYWdlSHRtbCA9IHN0cl9yZXBsYWNlKCJcbiIsICI8YnIgLz4iLCAkbWVzc2FnZSk7DQoJCQkJCSRodG1sID0gVGV4dDo6c3ByaW50ZignJXM8YnIgLz48YnIgLz4lczxiciAvPiVzJywgJG1lc3NhZ2VIdG1sLCAkcmVwbHlUb05hbWUsICRyZXBseVRvRW1haWwpOw0KCQkJCQkkdGV4dCA9IFRleHQ6OnNwcmludGYoIiVzXG5cbiVzXG4lcyIsICRtZXNzYWdlLCAkcmVwbHlUb05hbWUsICRyZXBseVRvRW1haWwpOw0KCQkJCQkvLyBzZW5kIHRoZSBlbWFpbA0KCQkJCQlpZiAoW1tbQ29tcG9uZW50XV1dRW1haWw6OnNlbmQoJGV4cGVydC0+ZW1haWwsICRzdWJqZWN0LCBzZWxmOjplbWFpbEJvZHkoJGh0bWwsICRzdWJqZWN0KSwgJHRleHQsIDEsIG51bGwsIG51bGwsICRyZXBseVRvRW1haWwsICAkcmVwbHlUb05hbWUpKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gYXJyYXkoJ21lc3NhZ2UnID0+ICBUZXh0OjpzcHJpbnRmKCclcyB5b3VyIG1lc3NhZ2UgdG8gJXMgd2FzIHNlbmQgc3VjY2Vzc2Z1bGx5IScsICRyZXBseVRvTmFtZSwgJGV4cGVydC0+bmFtZSksICdzdGF0dXMnID0+ICdzdWNjZXNzJyk7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGFycmF5KCdtZXNzYWdlJyA9PiAgVGV4dDo6c3ByaW50ZignJXMgdGhlcmUgd2FzIGFuIEVSUk9SIHNlbmRpbmcgeW91ciBtZXNzYWdlIScsICRyZXBseVRvTmFtZSksICdzdGF0dXMnID0+ICdkYW5nZXInKTsNCgl9DQoNCgkvKioNCgkqIAl0aGUgY29uZmlybWF0aW9uIGVtYWlscyB0byBzZW5kDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkY29uZmlybWF0aW9uRW1haWxzID0gYXJyYXkoKTsNCg0KCS8qKg0KCSogCVNlbmQgdGhlIGNvbmZpcm1hdGlvbiBlbWFpbHMNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlbmRDb25maXJtYXRpb25FbWFpbHMoKQ0KCXsNCgkJLy8gZmlyc3Qgd2UgZ2V0IGFsbCB0aGUgZGF0YSBhbmQgc2V0IHRoZSBlbWFpbHMgYXMgc2VuZCAodG8gaW5zdXJlIGVtYWlscyBhcmUgbm90IHNlbmQgbW9yZSB0aGVuIG9uY2UpDQoJCWlmICgkbGlzdCA9IHNlbGY6OmdldENvbmZpcm1hdGlvbk5lZWRlZExpc3QoKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBjb21wYW55DQoJCQkkY29tcGFueSA9ICBzZWxmOjpnZXRDb21wYW55RGV0YWlscygncGxhY2Vob2xkZXInKTsNCgkJCS8vIGdldCBlbWFpbCB0ZW1wbGF0ZQ0KCQkJJHRlbXBsYXRlID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ2NvbmZpcm1hdGlvbl9lbWFpbCcpOw0KCQkJJHN1YmplY3RfdGVtcGxhdGUgPSBzZWxmOjpnZXRUZW1wbGF0ZSgnc3ViamVjdF9jb25maXJtYXRpb25fZW1haWwnLCAnSGkgW3JlZmVycmFsX25hbWVdLCBwbGVhc2UgY29uZmlybSB0aGUgZGV0YWlscyBvZiBbZXhwZXJ0X25hbWVdJyk7DQoJCQkvLyBzZXQgc29tZSBkZWZhdWx0cw0KCQkJJGRvY19oZWFkZXIgPSBzZWxmOjpnZXRUZW1wbGF0ZSgnZG9jX2hlYWRlcicpOw0KCQkJJGRvY19mb290ZXIgPSBzZWxmOjpnZXRUZW1wbGF0ZSgnZG9jX2Zvb3RlcicpOw0KCQkJJGRlZmF1bHRbXSA9IGFycmF5KCdbZG9jdW1lbnRfaGVhZGVyXScgPT4gc2VsZjo6c2V0RHluYW1pY0RhdGEoJGRvY19oZWFkZXIsICRjb21wYW55KSwgJ1tkb2N1bWVudF9mb290ZXJdJyA9PiBzZWxmOjpzZXREeW5hbWljRGF0YSgkZG9jX2Zvb3RlciwgJGNvbXBhbnkpKTsNCgkJCS8vIG5vdyBsZXRzIGdldCB0aGUgY29tcGFueSBkZXRhaWxzDQoJCQkkZGVmYXVsdFtdID0gJGNvbXBhbnk7DQoJCQkkZGV0YWlscyA9IGFycmF5KCk7DQoJCQkkZGV0YWlsc1swXSA9IHNlbGY6Om1lcmdlQXJyYXlzKCRkZWZhdWx0KTsNCgkJCS8vIHN0YXJ0IGJ1aWxkaW5nIHRoZSBlbWFpbHMNCgkJCWZvcmVhY2ggKCRsaXN0IGFzICRyZWZlcmVuY2UpDQoJCQl7DQoJCQkJLy8gbm93IGxldHMgZ2V0IHRoZSBleHBlcnQgZGV0YWlscw0KCQkJCSRkZXRhaWxzWzFdID0gc2VsZjo6Z2V0RXhwZXJ0RGV0YWlscygkcmVmZXJlbmNlWydbcmVmZXJyYWxfZXhwZXJ0X2lkXSddLCAncGxhY2Vob2xkZXInLCAnZnVsbCcpOw0KCQkJCSRkZXRhaWxzWzJdID0gJHJlZmVyZW5jZTsNCgkJCQkvLyBub3cgbW9yZSB2YWx1ZXMNCgkJCQkkcGxhY2Vob2xkZXJzID0gc2VsZjo6bWVyZ2VBcnJheXMoJGRldGFpbHMpOw0KCQkJCSRib2R5ID0gc2VsZjo6c2V0RHluYW1pY0RhdGEoJHRlbXBsYXRlLCAkcGxhY2Vob2xkZXJzKTsNCgkJCQkkc3ViamVjdCA9IHNlbGY6OnNldER5bmFtaWNEYXRhKCRzdWJqZWN0X3RlbXBsYXRlLCAkcGxhY2Vob2xkZXJzKTsNCgkJCQkvLyBzZXQgdGhlIGVtYWlsIGRldGFpbHMNCgkJCQlzZWxmOjokY29uZmlybWF0aW9uRW1haWxzW10gPSBhcnJheSgnaWQnID0+ICRyZWZlcmVuY2VbJ1tyZWZlcnJhbF9pZF0nXSwgJ2VtYWlsJyA9PiAkcmVmZXJlbmNlWydbcmVmZXJyYWxfZW1haWxdJ10sICdzdWJqZWN0JyA9PiAkc3ViamVjdCwgJ2h0bWwnID0+ICRib2R5KTsNCgkJCQkvLyBsZXRzIHNlbmQgbWFpbCBlYWNoIHRpbWUgd2UgaGF2ZSBtb3JlIHRoZW4gMTAgc2V0DQoJCQkJc2VsZjo6c2VuZENvbmZpcm1hdGlvbkVtYWlsKDEwKTsNCgkJCX0NCgkJCS8vIHNlbmQgZmluYWwgZW1haWxzIGlmIGFueSByZW1haW4NCgkJCXNlbGY6OnNlbmRDb25maXJtYXRpb25FbWFpbCgpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogU2VuZCB0aGUgZW1haWwgbmVlZGVkIGZvciBjb25maXJtYXRpb24NCgkqDQoJKiBAcGFyYW0gaW50ICAkcXR5IHRoZSBxdHkgYmVmb3JlIGVtYWlsaW5nIHRoZSBsaXN0DQoJKg0KCSogQHJldHVybiAgYm9vbGVhbiBmYWxzZSBvbiBmYWlsdXJlDQoJKg0KCSoqLwkNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNlbmRDb25maXJtYXRpb25FbWFpbCgkcXR5ID0gMSkNCgl7DQoJCWlmIChjb3VudChzZWxmOjokY29uZmlybWF0aW9uRW1haWxzKSA+PSAkcXR5KQ0KCQl7DQoJCQkvLyBzZW5kIHRoZSBlbWFpbHMNCgkJCWZvcmVhY2ggKHNlbGY6OiRjb25maXJtYXRpb25FbWFpbHMgYXMgJGRldGFpbHMpDQoJCQl7DQoJCQkJaWYgKCFbW1tDb21wb25lbnRdXV1FbWFpbDo6c2VuZCgkZGV0YWlsc1snZW1haWwnXSwgJGRldGFpbHNbJ3N1YmplY3QnXSwgc2VsZjo6ZW1haWxCb2R5KCRkZXRhaWxzWydodG1sJ10sICRkZXRhaWxzWydzdWJqZWN0J10pLCAnJywgMSwgbnVsbCwgbnVsbCwgc2VsZjo6JHJlcGx5RW1haWwsICBzZWxmOjokcmVwbHlOYW1lKSkNCgkJCQl7DQoJCQkJCSRmaWVsZHMgPSBhcnJheSgpOw0KCQkJCQkkZmllbGRzW10gPSAkZGItPnF1b3RlTmFtZSgnZW1haWxzZW5kJykgLiAnID0gMCc7ICAvLyBzZXQgdG8gZXJyb3IgYXMgbm90IHNlbmQNCgkJCQkJc2VsZjo6JHVwZGF0ZXJbXSAgPSBhcnJheSgnZmllbGRzJyA9PiAkZmllbGRzLCAnY29uZGl0aW9ucycgPT4gYXJyYXkoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJyAuICRkZXRhaWxzWydpZCddKSk7DQoJCQkJCS8vIHJ1biB1cGRhdGUgaWYgbWFueSB2YWx1ZXMgZm91bmQNCgkJCQkJc2VsZjo6dXBkYXRlRGF0YSgxMCk7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gcnVuIHVwZGF0ZSBvbiBsYXN0IHJlbWFpbmluZyB2YWx1ZXMNCgkJCXNlbGY6OnVwZGF0ZURhdGEoKTsNCgkJCS8vIGNsZWFyIHRoZSB2YWx1ZXMgYXJyYXkNCgkJCXNlbGY6OiRjb25maXJtYXRpb25FbWFpbHMgPSBhcnJheSgpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCU9uY2UgdGhlIGVtYWlsIHdhcyBzZW5kIHRoZSBnaXZlcyB1cyB0aGUgb3B0aW9uIHRoZSBzdG9yZSB0aGUgbWFzc2FnZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RvcmVNZXNzYWdlKCRzZW5kbWFpbCwgJHJlY2lwaWVudCwgJHN1YmplY3QsICRib2R5LCAkdGV4dG9ubHksICRtb2RlLCAkdHlwZSkNCgl7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogCXRoZSB1cGRhdGVyIGFycmF5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXBkYXRlciA9IGFycmF5KCk7DQoNCgkvKioNCgkqIAlHZXQgdGhlIGxpc3Qgb2YgdW4tZW1haWxlZCBjb25maXJtYXRpb25zIGFuZCBsb2NrIHRoZW0NCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldENvbmZpcm1hdGlvbk5lZWRlZExpc3QoJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicpDQoJew0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJaWYgKCdwbGFjZWhvbGRlcicgPT0gJG1ldGhvZCkNCgkJew0KCQkJJGYgPSAnW3JlZmVycmFsXyc7DQoJCQkkYiA9ICddJzsNCgkJfQ0KCQkvLyBnZXQgdGhlIGxpc3Qgb2YgdmFsdWVzIHdlIHdhbnQgZnJvbSBkYg0KCQkkc2VsZWN0aW9uID0gc2VsZjo6Z2V0U2VsZWN0aW9uKCdyZWZlcnJhbCcsICRmLCAkYik7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5X2tleXMoJHNlbGVjdGlvbiksIGFycmF5X3ZhbHVlcygkc2VsZWN0aW9uKSkpOw0KCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uIHRhYmxlLg0KCQkkcXVlcnktPmZyb20oJyNfX1tbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24gQVMgYScpOw0KCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fY291bnRyeSB0YWJsZS4NCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5JywgJ2InKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnYS5jb3VudHJ5JykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdiLmlkJykgLiAnKScpOw0KCQkkcXVlcnktPndoZXJlKCdhLmVtYWlsc2VuZCA9IDInKTsNCgkJJHF1ZXJ5LT53aGVyZSgnYS5jb25maXJtZWQgPSAwJyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkvLyBHZXQgdGhlIGJhc2ljIGVuY3J5cHRpb24uDQoJCQkkYmFzaWNrZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnYmFzaWMnLCAnZXJqZzQzNTl3aWRjdWplM2FzYWlmMDl0YnY5OWhvd2lkMHJnZjAzOGhmaG9kaTh3Zm9lZCcpOyAvLyB3ZSBtdXN0IGhhdmUgYSBrZXkgaGVyZQ0KCQkJLy8gR2V0IHRoZSBlbmNyeXB0aW9uIG9iamVjdC4NCgkJCSRiYXNpYyA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRiYXNpY2tleSwgMTI4KTsNCgkJCS8vIGxvYWQgdGhlIGxpc3Qgb2YgZXhwZXJ0cyB0byBjb25maXJtDQoJCQkkbGlzdCA9ICRkYi0+bG9hZEFzc29jTGlzdCgpOw0KCQkJZm9yZWFjaCAoJGxpc3QgYXMgJG5yID0+ICRyZWZlcmVuY2UpDQoJCQl7DQoJCQkJJGZpZWxkcyA9IGFycmF5KCk7DQoJCQkJJGZpZWxkc1tdID0gJGRiLT5xdW90ZU5hbWUoJ2VtYWlsc2VuZCcpIC4gJyA9IDEnOyAvLyBsb2NrIGRvd24gdG8gbG9vayBhcyBzZW5kIHRvIGtlZXAgbXVsdGkgZW1haWxzIGZyb20gYmVpbmcgc2VuZA0KCQkJCXNlbGY6OiR1cGRhdGVyW10gID0gYXJyYXkoJ2ZpZWxkcycgPT4gJGZpZWxkcywgJ2NvbmRpdGlvbnMnID0+IGFycmF5KCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcgLiAkcmVmZXJlbmNlWyRmLidpZCcuJGJdKSk7DQoJCQkJLy8gYnVpbGQgdGhlIGNvbmZpcm1hdGlvbiBsaW5rDQoJCQkJJGxpc3RbJG5yXVsnW2NvbmZpcm1hdGlvbl9saW5rXSddID0gc2VsZjo6Z2V0Q29uZmlybWF0aW9uTGluaygkcmVmZXJlbmNlLCBhcnJheSgkZiwgJGIpLCAkYmFzaWMpOw0KCQkJCS8vIHJ1biB1cGRhdGUgaWYgbWFueSB2YWx1ZXMgZm91bmQNCgkJCQlzZWxmOjp1cGRhdGVEYXRhKDEwMCk7DQoJCQl9DQoJCQkvLyBydW4gdXBkYXRlIG9uIGxhc3QgcmVtYWluaW5nIHZhbHVlcw0KCQkJc2VsZjo6dXBkYXRlRGF0YSgpOw0KCQkJLy8gcmV0dXJuIHRoZSBmb3VuZCBsaXN0DQoJCQlyZXR1cm4gJGxpc3Q7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPWJhc2VTaXh0eUZvdXJVUkxdDQoJLyoqDQoJICoJVG8gbG9hZCB0aGUgYXBwbGljYXRpb24gZm9ybQ0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QXBwbGljYXRpb25Gb3JtKCRkYXRhID0gbnVsbCwgJHR5cGUgPSAnZXhwZXJ0JywgJGFjY2VzcyA9ICdwdWJsaWMnKQ0KCXsNCgkJLy8gZ2V0IGZvcm1zIHBhdGgNCgkJJHBhdGgJPSBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vbW9kZWxzL2Zvcm1zJzsNCgkJLy8gYnVpbGQgZnVsbCBwYXRoIHRvIGZpbGUNCgkJJGZ1bGxQYXRoID0gJHBhdGguJy8nLiR0eXBlLicueG1sJzsNCgkJLy8gY2hlY2sgaWYgZmlsZSBleGlzdHMNCgkJaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpDQoJCXsNCgkJCS8vIEdldCB0aGUgZm9ybS4NCgkJCWppbXBvcnQoICdqb29tbGEuZm9ybS5mb3JtJyApOw0KCQkJLy8gc2V0IHRoZSBwYXRocw0KCQkJSkZvcm06OmFkZEZvcm1QYXRoKCRwYXRoKTsNCgkJCUpGb3JtOjphZGRGaWVsZFBhdGgoSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fW1tbY29tcG9uZW50XV1dL21vZGVscy9maWVsZHMnKTsNCgkJCS8vIGdyZWF0IHdlIGFyZSBkb25lIHJldHVybiByZXN1bHRzDQoJCQkkZm9ybSA9IEpGb3JtOjpnZXRJbnN0YW5jZSgnY29tX1tbW2NvbXBvbmVudF1dXS4nLiR0eXBlLCAkdHlwZSwgYXJyYXkoJ2NvbnRyb2wnID0+ICdqZm9ybScsICdsb2FkX2RhdGEnID0+IGZhbHNlKSwgZmFsc2UsIGZhbHNlKTsNCgkJCS8vIGNoYW5nZSB0aGUgZm9ybSBmb3IgcHVibGljIHN1Ym1pc3Npb24NCgkJCWlmICgncHVibGljJyA9PSAkYWNjZXNzKQ0KCQkJew0KCQkJCXNlbGY6OnB1YmxpY0FwcGxpY2F0aW9uRm9ybSgkZm9ybSwgJHR5cGUpOw0KCQkJfQ0KCQkJLy8gbm93IGxvYWQgdGhlIGRhdGENCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZGF0YSkpDQoJCQl7DQoJCQkJJGZvcm0tPmJpbmQoJGRhdGEpOw0KCQkJfQ0KCQkJcmV0dXJuICRmb3JtOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRhcHBsaWNhdGlvbkZpZWxkcyA9IA0KCQlhcnJheSgNCgkJCSdleHBlcnQnID0+DQoJCQkJYXJyYXkoDQoJCQkJCSdyZW1vdmVGaWVsZHMnID0+DQoJCQkJCQlhcnJheSgnaWQnLCdjcmVhdGVkJywnY3JlYXRlZF9ieScsJ3B1Ymxpc2hlZCcsJ21vZGlmaWVkJywnbW9kaWZpZWRfYnknLCdhY2Nlc3MnLCdvcmRlcmluZycsJ3ZlcnNpb24nLCdtZXRha2V5JywnbWV0YWRlc2MnLCd1c2VyJywnYXNzZXRfaWQnLCdydWxlcycpLA0KCQkJCQkncmVtb3ZlR3JvdXBzJyA9Pg0KCQkJCQkJYXJyYXkoJ21ldGFkYXRhJywnYWNjZXNzY29udHJvbCcpDQoJCQkJKQ0KCQkpOw0KDQoJLyoqDQoJICoJTW9kZWwgdGhlIGZvcm0gZm9yIHB1YmxpIHN1Ym1pc3Npb24NCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHB1YmxpY0FwcGxpY2F0aW9uRm9ybSgmJGZvcm0sICR0eXBlKQ0KCXsNCgkJaWYgKGlzc2V0KHNlbGY6OiRhcHBsaWNhdGlvbkZpZWxkc1skdHlwZV0pKQ0KCQl7DQoJCQlpZiAoaXNzZXQoc2VsZjo6JGFwcGxpY2F0aW9uRmllbGRzWyR0eXBlXVsncmVtb3ZlRmllbGRzJ10pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiRhcHBsaWNhdGlvbkZpZWxkc1skdHlwZV1bJ3JlbW92ZUZpZWxkcyddKSkNCgkJCXsNCgkJCQkvLyBmaXJzdCByZW1vdmUgYWxsIHVud2FudGVkIGZpZWxkcw0KCQkJCWZvcmVhY2ggKHNlbGY6OiRhcHBsaWNhdGlvbkZpZWxkc1skdHlwZV1bJ3JlbW92ZUZpZWxkcyddIGFzICRmaWVsZCkNCgkJCQl7DQoJCQkJCSRmb3JtLT5yZW1vdmVGaWVsZCgkZmllbGQpOw0KCQkJCX0NCgkJCX0NCgkJCWlmIChpc3NldChzZWxmOjokYXBwbGljYXRpb25GaWVsZHNbJHR5cGVdWydyZW1vdmVHcm91cHMnXSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGFwcGxpY2F0aW9uRmllbGRzWyR0eXBlXVsncmVtb3ZlR3JvdXBzJ10pKQ0KCQkJew0KCQkJCS8vIGZpcnN0IHJlbW92ZSBhbGwgdW53YW50ZWQgZmllbGRzDQoJCQkJZm9yZWFjaCAoc2VsZjo6JGFwcGxpY2F0aW9uRmllbGRzWyR0eXBlXVsncmVtb3ZlR3JvdXBzJ10gYXMgJGdyb3VwKQ0KCQkJCXsNCgkJCQkJJGZvcm0tPnJlbW92ZUdyb3VwKCRncm91cCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIGFkZCB0aGUgdXNlciBmaWVsZHMNCgkJc2VsZjo6YWRkVXNlckZpZWxkcygkZm9ybSk7DQoJfQ0KDQoJLyoqDQoJICoJQWRkIHVzZXIgZmllbGRzIHRvIGFwcGxpY2F0aW9uDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhZGRVc2VyRmllbGRzKCYkZm9ybSkNCgl7DQoJCS8vIHdlIG11c3QgYWRkIHNvbWUgdXNlciBmaWVsZHMNCgkJJHVzZXJGaWVsZHMgPQ0KCQkJYXJyYXkoDQoJCQkJJ25hbWUnID0+DQoJCQkJCWFycmF5KCduYW1lJywndXNlcm5hbWUnLCdlbWFpbCcsJ3Bhc3N3b3JkJywncGFzc3dvcmQyJywgJ2NhcHRjaGEnKSwNCgkJCQkndHlwZScgPT4NCgkJCQkJYXJyYXkoJ3RleHQnLCd0ZXh0JywnZW1haWwnLCdwYXNzd29yZCcsJ3Bhc3N3b3JkJywnY2FwdGNoYScpLA0KCQkJCSdsYWJlbCcgPT4NCgkJCQkJYXJyYXkoVGV4dDo6XygnTmFtZScpLFRleHQ6Ol8oJ1VzZXJuYW1lL0xvZ2luLW5hbWUnKSxUZXh0OjpfKCdFbWFpbCcpLFRleHQ6Ol8oJ1Bhc3N3b3JkJyksVGV4dDo6XygnQ29uZmlybSBQYXNzd29yZCcpLFRleHQ6Ol8oJ1JlQ2FwdGNoYScpKSwNCgkJCQknZGVzY3JpcHRpb24nID0+DQoJCQkJCWFycmF5KFRleHQ6Ol8oJ1lvdXIgRnVsbCBOYW1lJyksVGV4dDo6XygnU2V0IHRoZSB1c2VybmFtZS9sb2dpbi1uYW1lIG9mIHlvdXIgY2hvaWNlLicpLFRleHQ6Ol8oJ1lvdXIgRW1haWwgQWRkcmVzcycpLFRleHQ6Ol8oJ1VzZSBhdCBsZWFzdCA2IGNoYXJhY3RlcnMsIHVwcGVyLWNhc2UgYW5kIGxvd2VyLWNhc2UgbGV0dGVyLCBudW1iZXJzIGFuZCBhdCBsZWFzdCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXIuJyksVGV4dDo6XygnQ29uZmlybSBQYXNzd29yZCcpLFRleHQ6Ol8oJ0p1c3QgY2hlY2tpbmcgdGhhdCB5b3VyIG5vdCBhIHJvYm90LicpKSwNCgkJCQknaGludCcgPT4NCgkJCQkJYXJyYXkoVGV4dDo6XygnRXhwZXJ0IEZ1bGwgTmFtZScpLCBUZXh0OjpfKCdVc2VybmFtZScpLCAneW91ckBlbWFpbC5jb20nLG51bGwsbnVsbCxudWxsKSwNCgkJCQknY2xhc3MnID0+DQoJCQkJCWFycmF5KCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLCd0ZXh0X2FyZWEnLG51bGwpLA0KCQkJCSd2YWxpZGF0ZScgPT4NCgkJCQkJYXJyYXkobnVsbCwgbnVsbCwgJ2VtYWlsJywgbnVsbCwgbnVsbCwgJ2NhcHRjaGEnKSwNCgkJCQknZmlsdGVyJyA9Pg0KCQkJCQlhcnJheSgnc3RyaW5nJywgJ3N0cmluZycsICdlbWFpbCcsIG51bGwsIG51bGwsbnVsbCksDQoJCQkJJ2ZpZWxkJyA9Pg0KCQkJCQlhcnJheShudWxsLCBudWxsLCBudWxsLCAncGFzc3dvcmQyJywgbnVsbCwgbnVsbCkNCgkJCSk7DQoJCSRhZGRSZUNhcHRjaGEgPSBGYWN0b3J5OjpnZXRDb25maWcoKS0+Z2V0KCdjYXB0Y2hhJyk7DQoJCS8vIG5vdyBsb29wIHRoZSBmaWVsZHMgYW5kIGFkZCB0byBmb3JtDQoJCWZvcmVhY2ggKCR1c2VyRmllbGRzWyduYW1lJ10gYXMgJG5yID0+ICRuYW1lKQ0KCQl7DQoJCQkvLyBidWlsZCB0aGUgZmllbGQNCgkJCSR4bWwgPSBhcnJheSgpOw0KCQkJLy8gb25seSBsb2FkIFJlQ2FwdGNoYSBpZiB0dXJuZWQgb24gaW4gc3lzdGVtDQoJCQlpZiAoJ2NhcHRjaGEnICE9ICRuYW1lIHx8ICRhZGRSZUNhcHRjaGEpDQoJCQl7DQoJCQkJJHhtbFtdID0gJzxmaWVsZCAnOw0KCQkJCSR4bWxbXSA9ICd0eXBlPSInLiR1c2VyRmllbGRzWyd0eXBlJ11bJG5yXS4nIiAnOw0KCQkJCSR4bWxbXSA9ICduYW1lPSInLiRuYW1lLiciICc7DQoJCQkJaWYgKCR1c2VyRmllbGRzWydsYWJlbCddWyRucl0pDQoJCQkJew0KCQkJCQkkeG1sW10gPSAnbGFiZWw9IicuJHVzZXJGaWVsZHNbJ2xhYmVsJ11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ2Rlc2NyaXB0aW9uJ11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdkZXNjcmlwdGlvbj0iJy4kdXNlckZpZWxkc1snZGVzY3JpcHRpb24nXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCWlmICgkdXNlckZpZWxkc1snY2xhc3MnXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2NsYXNzPSInLiR1c2VyRmllbGRzWydjbGFzcyddWyRucl0uJyIgJzsNCgkJCQl9DQoJCQkJaWYgKCdjYXB0Y2hhJyAhPSAkbmFtZSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdyZXF1aXJlZD0idHJ1ZSIgJzsNCgkJCQl9DQoJCQkJaWYgKCR1c2VyRmllbGRzWydmaWx0ZXInXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2ZpbHRlcj0iJy4kdXNlckZpZWxkc1snZmlsdGVyJ11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQlpZiAoJHVzZXJGaWVsZHNbJ3ZhbGlkYXRlJ11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICd2YWxpZGF0ZT0iJy4kdXNlckZpZWxkc1sndmFsaWRhdGUnXVskbnJdLiciICc7DQoJCQkJfQ0KCQkJCWlmICgkdXNlckZpZWxkc1snZmllbGQnXVskbnJdKQ0KCQkJCXsNCgkJCQkJJHhtbFtdID0gJ2ZpZWxkPSInLiR1c2VyRmllbGRzWydmaWVsZCddWyRucl0uJyIgJzsNCgkJCQl9DQoJCQkJaWYgKCR1c2VyRmllbGRzWydoaW50J11bJG5yXSkNCgkJCQl7DQoJCQkJCSR4bWxbXSA9ICdoaW50PSInLiR1c2VyRmllbGRzWydoaW50J11bJG5yXS4nIiAnOw0KCQkJCX0NCgkJCQkkeG1sW10gPSAnLz4nOw0KCQkJCS8vIHNldCB0aGUgZmllbGQNCgkJCQkkZm9ybS0+c2V0RmllbGQoIHNpbXBsZXhtbF9sb2FkX3N0cmluZyhpbXBsb2RlKCJcbiIsICR4bWwpKSk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkqIFRoaXMgY29uZmlybXMgZXhwZXJ0cw0KCSoNCgkqIEBwYXJhbSBzdHJpbmcgdGhlIGJhc2U2NCBlbmNyeXB0ZWQgc3RyaW5nDQoJKg0KCSogQHJldHVybiAgYm9vbGVhbiBmYWxzZSBvbiBmYWlsdXJlDQoJKg0KCSoqLwkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbmZpcm1FeHBlcnQoJGFjdGlvbikNCgl7DQoJCS8vIGVycm9yIGFycmF5IGlmIG5lZWRlZA0KCQkkZXJyb3JzID0gYXJyYXkoKTsNCgkJLy8gR2V0IHRoZSBiYXNpYyBlbmNyeXB0aW9uLg0KCQkkYmFzaWNrZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnYmFzaWMnLCAnZXJqZzQzNTl3aWRjdWplM2FzYWlmMDl0YnY5OWhvd2lkMHJnZjAzOGhmaG9kaTh3Zm9lZCcpOyAvLyB3ZSBtdXN0IGhhdmUgYSBrZXkgaGVyZQ0KCQkvLyBHZXQgdGhlIGVuY3JpcHRpb24gb2JqZWN0Lg0KCQkkb3BlbmVyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGJhc2lja2V5LCAxMjgpOw0KCQkvLyB3ZSB0cnkgdG8gb3BlbiBpdA0KCQlpZiAoJHJlZmVyZW5jZSA9IGpzb25fZGVjb2RlKHJ0cmltKCRvcGVuZXItPmRlY3J5cHRTdHJpbmcoc2VsZjo6YmFzZTY0X3VybGRlY29kZSgkYWN0aW9uKSksICJcMCIpKSkNCgkJew0KCQkJaWYgKGlzc2V0KCRyZWZlcmVuY2UtPmlkKSkNCgkJCXsNCgkJCQkvLyBHZXQgYSBkYiBjb25uZWN0aW9uLg0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCQkvLyBnZXQgdmFsdWVzIGluIGRhdGFiYXNlDQoJCQkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2V4cGVydCcsICduYW1lJywgJ2VtYWlsJywgJ2NvbmZpcm1lZCcpKSk7DQoJCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uJykpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJy4gKGludCkgJHJlZmVyZW5jZS0+aWQpOw0KCQkJCS8vIG5vdyBnZXQgdGhlIGRhdGENCgkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJaWYgKCRkYi0+ZXhlY3V0ZSgpKQ0KCQkJCXsNCgkJCQkJJGxvY2FsID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJCSR2ZXJpZmllZCA9IGZhbHNlOwkJCQ0KCQkJCQkvLyBub3cgY2hlY2sgaWYgdGhlIGRhdGEgaXMgc3RpbGwgdGhlIHNhbWUNCgkJCQkJaWYgKCRsb2NhbC0+Y29uZmlybWVkID09IDEpDQoJCQkJCXsNCgkJCQkJCSRlcnJvcnNbXSA9IFRleHQ6Ol8oJ1RoZSBkZXRhaWxzIHdlcmUgYWxyZWFkeSBzdWNjZXNzZnVsbHkgdmVyaWZpZWQuJyk7DQoJCQkJCQkkdmVyaWZpZWQgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWlmICgkbG9jYWwtPmV4cGVydCAhPSAkcmVmZXJlbmNlLT5leHBlcnRfaWQpDQoJCQkJCXsNCgkJCQkJCSRlcnJvcnNbXSA9IFRleHQ6Ol8oJ1RoZSB3cm9uZyBleHBlcnQgd2FzIHNlbGVjdGVkLicpOw0KCQkJCQl9DQoJCQkJCWlmICgkbG9jYWwtPm5hbWUgIT0gJHJlZmVyZW5jZS0+bmFtZSkNCgkJCQkJew0KCQkJCQkJJGVycm9yc1tdID0gVGV4dDo6XygnWW91ciBuYW1lIG5vIGxvbmdlciBtYXRjaCB0aGUgbmFtZSB3ZSBoYXZlIG9uIGZpbGUuJyk7DQoJCQkJCX0NCgkJCQkJaWYgKCRsb2NhbC0+ZW1haWwgIT0gJHJlZmVyZW5jZS0+ZW1haWwpDQoJCQkJCXsNCgkJCQkJCSRlcnJvcnNbXSA9IFRleHQ6Ol8oJ1lvdXIgZW1haWwgbm8gbG9uZ2VyIG1hdGNoIHRoZSBlbWFpbCB3ZSBoYXZlIG9uIGZpbGUuJyk7DQoJCQkJCX0NCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRlcnJvcnMpKQ0KCQkJCQl7DQoJCQkJCQlpZiAoISR2ZXJpZmllZCkNCgkJCQkJCXsNCgkJCQkJCQkkZXJyb3JzW10gPSBUZXh0OjpfKCdUaGVzZSBjaGFuZ2VzIG1heSBoYXZlIGJlZW4gbWFkZSBieSB0aGUgZXhwZXJ0IGFmdGVyIHRoZSBlbWFpbCB3YXMgc2VuZCB0byB5b3UuJyk7DQoJCQkJCQl9DQoJCQkJCQkvLyBzZXQgdGhlIGVycm9yDQoJCQkJCQlzZWxmOjpzZXRFcnJvcigxLCAkZXJyb3JzKTsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCS8vIENyZWF0ZSBhbiBvYmplY3QgZm9yIHRoZSByZWNvcmQgd2UgYXJlIGdvaW5nIHRvIHVwZGF0ZS4NCgkJCQkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJCQkvLyBNdXN0IGJlIGEgdmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUuDQoJCQkJCQkkb2JqZWN0LT5pZCA9ICRyZWZlcmVuY2UtPmlkOw0KCQkJCQkJJG9iamVjdC0+Y29uZmlybWVkID0gMTsNCg0KCQkJCQkJLy8gVXBkYXRlIHRoZWlyIGRldGFpbHMgaW4gdGhlIGNvbmZpcm1hdGlvbiB0YWJsZSB1c2luZyBpZCBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCQkJCQlpZiAoRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX2NvbmZpcm1hdGlvbicsICRvYmplY3QsICdpZCcpKQ0KCQkJCQkJew0KCQkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQkJfQ0KCQkJCQkJJGVycm9yc1tdID0gVGV4dDo6XygnVGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyB0aGUgdmVyaWZpY2F0aW9uIHByb3Nlcy4nKTsNCgkJCQkJCS8vIHNldCB0aGUgZXJyb3INCgkJCQkJCXNlbGY6OnNldEVycm9yKDEsICRlcnJvcnMpOw0KCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCSRlcnJvcnNbXSA9IFRleHQ6Ol8oJ1lvdXIgbGluayBpcyBub3QgdmFsaWQuJyk7DQoJCS8vIHNldCB0aGUgZXJyb3INCgkJc2VsZjo6c2V0RXJyb3IoMSwgJGVycm9ycyk7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIEJ1aWxkIHRoZSBsaW5rIHVzZWQgdG8gY29uZmlybSBleHBlcnQgZGF0YQ0KCSoNCgkqIEBwYXJhbSBhcnJheSB0aGUgcmVmZXJyYWxzIGRldGFpbHMNCgkqDQoJKiBAcmV0dXJuICBib29sZWFuIGZhbHNlIG9uIGZhaWx1cmUNCgkqDQoJKiovCQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29uZmlybWF0aW9uTGluaygkcmVmZXJlbmNlLCAkb3V0LCBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyICRsb2NrZXIpDQoJew0KCQkkYnVja2V0ID0gYXJyYXkoKTsNCgkJZm9yZWFjaCgkcmVmZXJlbmNlIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQl7DQoJCQkkYXRLZXkgPSBzdHJfcmVwbGFjZSgkb3V0LCAnJywgJGtleSk7DQoJCQkkYnVja2V0WyRhdEtleV0gPSAkdmFsdWU7DQoJCX0NCgkJcmV0dXJuIFVyaTo6cm9vdCgpLidpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1jb25maXJtLmV4cGVydCZhY3Rpb249Jy5zZWxmOjpiYXNlNjRfdXJsZW5jb2RlKCRsb2NrZXItPmVuY3J5cHRTdHJpbmcoanNvbl9lbmNvZGUoJGJ1Y2tldCkpKTsNCgl9DQoNCgkvKioNCgkqIFVwZGF0ZSB0aGUgZGF0YSBmcm9tIHRoZSBmaWxlIHRvIHRoZSBkYXRhYmFzZQ0KCSoNCgkqIEBwYXJhbSBpbnQgICRxdHkgdGhlIHF0eSBiZWZvcmUgZG9pbmcgYW4gdXBkYXRlDQoJKiBAcGFyYW0gYXJyYXkgICR0YWJsZSBUaGUgdGFibGUgYmVpbmcgdXBkYXRlZA0KCSoNCgkqIEByZXR1cm4gIGJvb2xlYW4gZmFsc2Ugb24gZmFpbHVyZQ0KCSoNCgkqKi8JDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVEYXRhKCRxdHkgPSAxLCAkdGFibGUgPSAnY29uZmlybWF0aW9uJykNCgl7DQoJCWlmIChjb3VudChzZWxmOjokdXBkYXRlcikgPj0gJHF0eSkNCgkJew0KCQkJLy8gbG9hZCB0aGUgZGF0YQ0KCQkJZm9yZWFjaChzZWxmOjokdXBkYXRlciBhcyAkdmFsdWUpDQoJCQl7DQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCQkvLyBQcmVwYXJlIHRoZSB1cGRhdGUgcXVlcnkuDQoJCQkJJHF1ZXJ5LT51cGRhdGUoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV8nLiR0YWJsZSkpDQoJCQkJCS0+c2V0KCR2YWx1ZVsnZmllbGRzJ10pLT53aGVyZSgkdmFsdWVbJ2NvbmRpdGlvbnMnXSk7DQoJCQkJLy8gU2V0IHRoZSBxdWVyeSB1c2luZyBvdXIgbmV3bHkgcG9wdWxhdGVkIHF1ZXJ5IG9iamVjdCBhbmQgZXhlY3V0ZSBpdC4NCgkJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkJJGRiLT5leGVjdXRlKCk7DQoJCQl9DQoJCQkvLyBjbGVhciB0aGUgdmFsdWVzIGFycmF5DQoJCQlzZWxmOjokdXBkYXRlciA9IGFycmF5KCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBlbWFpbEJvZHkoJiRodG1sLCAmJHN1YmplY3QpDQoJew0KCQkkYm9keSA9IGFycmF5KCk7DQoJCSRib2R5W10gPSAiPCFET0NUWVBFIGh0bWwgUFVCTElDIFwiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU5cIiBcImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGRcIj4iOw0KCQkkYm9keVtdID0gIjxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPiI7DQoJCSRib2R5W10gPSAiPGhlYWQ+IjsNCgkJJGJvZHlbXSA9ICI8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiIC8+IjsNCgkJJGJvZHlbXSA9ICI8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFwiLz4iOw0KCQkkYm9keVtdID0gIjx0aXRsZT4iLiRzdWJqZWN0LiI8L3RpdGxlPiI7DQoJCSRib2R5W10gPSAiPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPiI7DQoJCSRib2R5W10gPSAiI291dGxvb2sgYSB7cGFkZGluZzowO30iOw0KCQkkYm9keVtdID0gIi5FeHRlcm5hbENsYXNzIHt3aWR0aDoxMDAlO30iOw0KCQkkYm9keVtdID0gIi5FeHRlcm5hbENsYXNzLCAuRXh0ZXJuYWxDbGFzcyBwLCAuRXh0ZXJuYWxDbGFzcyBzcGFuLCAuRXh0ZXJuYWxDbGFzcyBmb250LCAuRXh0ZXJuYWxDbGFzcyB0ZCwgLkV4dGVybmFsQ2xhc3MgZGl2IHtsaW5lLWhlaWdodDogMTAwJTt9ICI7DQoJCSRib2R5W10gPSAicCB7bWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBmb250LXNpemU6IDBweDsgbGluZS1oZWlnaHQ6IDBweDt9ICI7DQoJCSRib2R5W10gPSAidGFibGUgdGQge2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7fSI7DQoJCSRib2R5W10gPSAidGFibGUge2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IG1zby10YWJsZS1sc3BhY2U6MHB0OyBtc28tdGFibGUtcnNwYWNlOjBwdDsgfSI7DQoJCSRib2R5W10gPSAiaW1nIHtkaXNwbGF5OiBibG9jazsgb3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljO30iOw0KCQkkYm9keVtdID0gImEgaW1nIHtib3JkZXI6IG5vbmU7fSI7DQoJCSRib2R5W10gPSAiYSB7dGV4dC1kZWNvcmF0aW9uOiBub25lOyBjb2xvcjogIzAwMDAwMTt9IjsNCgkJJGJvZHlbXSA9ICJhLnBob25lIHt0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiAjMDAwMDAxICFpbXBvcnRhbnQ7IHBvaW50ZXItZXZlbnRzOiBhdXRvOyBjdXJzb3I6IGRlZmF1bHQ7fSI7DQoJCSRib2R5W10gPSAic3BhbiB7Zm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMTdweDsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6ICMwMDAwMDE7fSI7DQoJCSRib2R5W10gPSAiPC9zdHlsZT4iOw0KCQkkYm9keVtdID0gIjwhLS1baWYgZ3RlIG1zbyA5XT4iOw0KCQkkYm9keVtdID0gIjxzdHlsZT4iOw0KCQkkYm9keVtdID0gIi8qIFRhcmdldCBPdXRsb29rIDIwMDcgYW5kIDIwMTAgKi8iOw0KCQkkYm9keVtdID0gIjwvc3R5bGU+IjsNCgkJJGJvZHlbXSA9ICI8IVtlbmRpZl0tLT4iOw0KCQkkYm9keVtdID0gIjwvaGVhZD4iOw0KCQkkYm9keVtdID0gIjxib2R5IHN0eWxlPVwid2lkdGg6MTAwJTsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCU7XCI+IjsNCgkJJGJvZHlbXSA9ICJcbjwhLS0gYm9keSB3cmFwcGVyIC0tPiI7DQoJCSRib2R5W10gPSAiPHRhYmxlIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGJvcmRlcj1cIjBcIiBzdHlsZT1cIm1hcmdpbjowOyBwYWRkaW5nOjA7IHdpZHRoOjEwMCU7IGxpbmUtaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XCI+IjsNCgkJJGJvZHlbXSA9ICI8dHI+IjsNCgkJJGJvZHlbXSA9ICI8dGQgdmFsaWduPVwidG9wXCI+IjsNCgkJJGJvZHlbXSA9ICI8IS0tIGVkZ2Ugd3JhcHBlciAtLT4iOw0KCQkkYm9keVtdID0gIjx0YWJsZSBjZWxscGFkZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIiBib3JkZXI9XCIwXCIgYWxpZ249XCJjZW50ZXJcIiB3aWR0aD1cIjgwMFwiID4iOw0KCQkkYm9keVtdID0gIjx0cj4iOw0KCQkkYm9keVtdID0gIjx0ZCB2YWxpZ249XCJ0b3BcIj4iOw0KCQkkYm9keVtdID0gIjwhLS0gY29udGVudCB3cmFwcGVyIC0tPiI7DQoJCSRib2R5W10gPSAiPHRhYmxlIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGJvcmRlcj1cIjBcIiBhbGlnbj1cImNlbnRlclwiIHdpZHRoPVwiNzgwXCI+IjsNCgkJJGJvZHlbXSA9ICI8dHI+IjsNCgkJJGJvZHlbXSA9ICI8dGQgdmFsaWduPVwidG9wXCIgc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjogdG9wO1wiPiI7DQoJCSRib2R5W10gPSAkaHRtbDsNCgkJJGJvZHlbXSA9ICI8L3RkPiI7DQoJCSRib2R5W10gPSAiPC90cj4iOw0KCQkkYm9keVtdID0gIjwvdGFibGU+IjsNCgkJJGJvZHlbXSA9ICI8IS0tIC8gY29udGVudCB3cmFwcGVyIC0tPiI7DQoJCSRib2R5W10gPSAiPC90ZD4iOw0KCQkkYm9keVtdID0gIjwvdHI+IjsNCgkJJGJvZHlbXSA9ICI8L3RhYmxlPiI7DQoJCSRib2R5W10gPSAiPCEtLSAvIGVkZ2Ugd3JhcHBlciAtLT4iOw0KCQkkYm9keVtdID0gIjwvdGQ+IjsNCgkJJGJvZHlbXSA9ICI8L3RyPiI7DQoJCSRib2R5W10gPSAiPC90YWJsZT4iOw0KCQkkYm9keVtdID0gIjwhLS0gLyBwYWdlIHdyYXBwZXIgLS0+IjsNCgkJJGJvZHlbXSA9ICI8L2JvZHk+IjsNCgkJJGJvZHlbXSA9ICI8L2h0bWw+IjsNCgkJcmV0dXJuIGltcGxvZGUoIlxuIiwgJGJvZHkpOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RXhwZXJ0RGlzcGxheSgmJGlkLCAkdmlldyA9IG51bGwsICR0eXBlID0gbnVsbCkNCgl7DQoJCWlmICgkaWQgPiAwKQ0KCQl7DQoJCQkvLyByZXNldCB0aGUgZGV0YWlscyBhcnJheQ0KCQkJJGRldGFpbHMgPSBhcnJheSgpOw0KCQkJLy8gZ2V0IHRoZSBjb21wYW55DQoJCQkkY29tcGFueSA9ICBzZWxmOjpnZXRDb21wYW55RGV0YWlscygncGxhY2Vob2xkZXInKTsNCgkJCS8vIGdldCBlbWFpbCB0ZW1wbGF0ZQ0KCQkJJHRlbXBsYXRlID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ2V4cGVydF9wcm9maWxlJyk7DQoJCQkvLyBzZXQgZG9jdW1lbnQgaGVhZGVyIGFuZCBmb290ZXINCgkJCSRkb2NfaGVhZGVyID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ2RvY19oZWFkZXInKTsNCgkJCSRkb2NfZm9vdGVyID0gc2VsZjo6Z2V0VGVtcGxhdGUoJ2RvY19mb290ZXInKTsNCgkJCSRkZXRhaWxzW10gPSBhcnJheSgnW2RvY3VtZW50X2hlYWRlcl0nID0+IHNlbGY6OnNldER5bmFtaWNEYXRhKCRkb2NfaGVhZGVyLCAkY29tcGFueSksICdbZG9jdW1lbnRfZm9vdGVyXScgPT4gc2VsZjo6c2V0RHluYW1pY0RhdGEoJGRvY19mb290ZXIsICRjb21wYW55KSk7DQoJCQkvLyBub3cgbGV0cyBnZXQgdGhlIGNvbXBhbnkgZGV0YWlscw0KCQkJJGRldGFpbHNbXSA9ICRjb21wYW55Ow0KCQkJLy8gZ2V0IHVzZXIgYWNjZXNzIHJpZ2h0cw0KCQkJJHVzZXJJcyA9IHNlbGY6OnVzZXJJcygpOw0KCQkJJGFjY2VzcyA9ICdwdWJsaWMnOw0KCQkJaWYgKCR1c2VySXMgPT0gMiB8fCAkdXNlcklzID09IDMpDQoJCQl7DQoJCQkJJGFjY2VzcyA9ICdzcGVjaWFsJzsNCgkJCQlpZiAoJHVzZXJJcyA9PSAyKSANCgkJCQl7DQoJCQkJCSRkZXRhaWxzW10gPSBhcnJheSgnW2lzX29yZ2FuaXNhdGlvbl0nID0+IDEpOw0KCQkJCX0NCgkJCQllbHNlaWYgKCR1c2VySXMgPT0gMykNCgkJCQl7DQoJCQkJCSRkZXRhaWxzW10gPSBhcnJheSgnW2lzX2FkbWluXScgPT4gMSk7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmICgkdXNlcklzID09IDEpDQoJCQl7DQoJCQkJaWYgKCdwcm9maWxlJyA9PSAkdmlldyAmJiAxOTQ4ID09ICR0eXBlKSAvLyB3aGVuIGV4cGVydCB2aWV3cyBvd24gcHJvZmlsZSAoVE9ETyBtb3JlIGNoZWNrcyB0byBpbnN1cmUgaXQgaXMgdHJ1ZSkNCgkJCQl7DQoJCQkJCSRhY2Nlc3MgPSAnZnVsbCc7DQoJCQkJfQ0KCQkJCSRkZXRhaWxzW10gPSBhcnJheSgnW2lzX2V4cGVydF0nID0+IDEpOw0KCQkJfQ0KCQkJLy8gbm93IGxldHMgZ2V0IHRoZSBleHBlcnQgZGV0YWlscw0KCQkJJGRldGFpbHNbXSA9IHNlbGY6OmdldEV4cGVydERldGFpbHMoJGlkLCAncGxhY2Vob2xkZXInLCAkYWNjZXNzKTsNCgkJCS8vIG5vdyBtZXJlIHZhbHVlcw0KCQkJJHBsYWNlaG9sZGVycyA9IHNlbGY6Om1lcmdlQXJyYXlzKCRkZXRhaWxzKTsNCgkJCWlmICgkYm9keSA9IHNlbGY6OnNldER5bmFtaWNEYXRhKCR0ZW1wbGF0ZSwgJHBsYWNlaG9sZGVycykpDQoJCQl7DQoJCQkJcmV0dXJuICRib2R5Ow0KCQkJfQkJCQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljICRleHBlcnREZXRhaWxzID0gYXJyYXkoKTsNCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV4cGVydERldGFpbHMoJiRpZCwgJG1ldGhvZCA9ICdvYmplY3QnLCAkYWNjZXNzID0gJ3B1YmxpYycpDQoJew0KCQkvLyB3ZSBuZWVkIHRvIG1hbmFnZSBzb21lIG1lbW9yeSBoZXJlDQoJCWlmIChjb3VudChzZWxmOjokZXhwZXJ0RGV0YWlscykgPj0gMjAwKQ0KCQl7DQoJCQkvLyByZW1vdmUgZmlyc3QgMTAwIGZyb20gbWVtb3J5DQoJCQlmb3JlYWNoIChzZWxmOjokZXhwZXJ0RGV0YWlscyBhcyAkcmVtb3ZlID0+ICRub3cpDQoJCQl7DQoJCQkJLy8gcmVtb3ZlIHRoZSBmaXJzdCB2YWx1ZXMgdGhhdCB3YXMgc2V0DQoJCQkJdW5zZXQoc2VsZjo6JGV4cGVydERldGFpbHNbJHJlbW92ZV0pOw0KCQkJCWlmIChjb3VudChzZWxmOjokZXhwZXJ0RGV0YWlscykgPD0gMTAwKQ0KCQkJCXsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmICghaXNzZXQoc2VsZjo6JGV4cGVydERldGFpbHNbJGlkLiRtZXRob2QuJGFjY2Vzc10pKQ0KCQl7DQoJCQkvLyBnZXQgZXhwZXJ0IGRldGFpbHMNCgkJCXNlbGY6OiRleHBlcnREZXRhaWxzWyRpZC4kbWV0aG9kLiRhY2Nlc3NdID0gc2VsZjo6Z2V0RXhwZXJ0KCRpZCwgJG1ldGhvZCwgJGFjY2Vzcyk7DQoJCX0NCgkJaWYgKCFpc3NldChzZWxmOjokZXhwZXJ0RGV0YWlsc1skaWQuJG1ldGhvZC4kYWNjZXNzXSkpDQoJCXsNCgkJCXNlbGY6OiRleHBlcnREZXRhaWxzWyRpZC4kbWV0aG9kLiRhY2Nlc3NdID0gZmFsc2U7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRleHBlcnREZXRhaWxzWyRpZC4kbWV0aG9kLiRhY2Nlc3NdOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgJGV4cGVydCA9IGFycmF5KCk7DQoNCgkvKioNCgkqIEdldCB0aGUgDQoJKiANCgkqIEByZXR1cm4gICAgaHRtbCBzdHJpbmcNCgkqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RXhwZXJ0KCYkaWQsICRtZXRob2QgPSAnb2JqZWN0JywgJGFjY2VzcyA9ICdwdWJsaWMnKQ0KCXsNCgkJLy8gd2UgbmVlZCB0byBtYW5hZ2Ugc29tZSBtZW1vcnkgaGVyZQ0KCQlpZiAoY291bnQoc2VsZjo6JGV4cGVydCkgPj0gMTAwKQ0KCQl7DQoJCQkvLyByZW1vdmUgZmlyc3QgNTAgZnJvbSBtZW1vcnkNCgkJCWZvcmVhY2ggKHNlbGY6OiRleHBlcnQgYXMgJHJlbW92ZSA9PiAkbm93KQ0KCQkJew0KCQkJCS8vIHJlbW92ZSB0aGUgZmlyc3QgdmFsdWVzIHRoYXQgd2FzIHNldA0KCQkJCXVuc2V0KHNlbGY6OiRleHBlcnRbJHJlbW92ZV0pOw0KCQkJCWlmIChjb3VudChzZWxmOjokZXhwZXJ0KSA8PSA1MCkNCgkJCQl7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PSAkbWV0aG9kKQ0KCQl7DQoJCQkkZiA9ICdbZXhwZXJ0Xyc7DQoJCQkkYiA9ICddJzsNCgkJfQ0KCQlpZiAoIWlzc2V0KHNlbGY6OiRleHBlcnRbJGlkLiRtZXRob2QuJGFjY2Vzc10pKQ0KCQl7DQoJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoNCgkJCS8vIFNlbGVjdCBzb21lIGZpZWxkcw0KCQkJJHNlbGVjdGlvbiA9IHNlbGY6OmdldFNlbGVjdGlvbignZXhwZXJ0JywgJGYsICRiKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5X2tleXMoJHNlbGVjdGlvbiksIGFycmF5X3ZhbHVlcygkc2VsZWN0aW9uKSkpOw0KDQoJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fZXhwZXJ0IHRhYmxlDQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9leHBlcnQnLCAnYScpKTsNCg0KCQkJLy8gRnJvbSB0aGUgdXNlcnMgdGFibGUuDQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fdXNlcnMnLCAnZycpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnVzZXInKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2cuaWQnKSAuICcpJyk7DQoJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fY291bnRyeSB0YWJsZS4NCgkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY291bnRyeScsICdoJykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuY291bnRyeXJlc2lkZW5jZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnaC5pZCcpIC4gJyknKTsNCgkJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9hcmVhX29mX2V4cGVydGlzZSB0YWJsZS4NCgkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fYXJlYV9vZl9leHBlcnRpc2UnLCAnaScpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmFyZWFfb2ZfZXhwZXJ0aXNlJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdpLmlkJykgLiAnKScpOw0KCQkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX2NvdW50cnkgdGFibGUuDQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvdW50cnknLCAnaicpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLm5hdGlvbmFsaXR5JykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdqLmlkJykgLiAnKScpOw0KCQkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX2FjYWRlbWljX3F1YWxpZmljYXRpb24gdGFibGUuDQoJCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2FjYWRlbWljX3F1YWxpZmljYXRpb24nLCAnaycpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmFjYWRlbWljX3F1YWxpZmljYXRpb24nKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2suaWQnKSAuICcpJyk7DQoJCQkvLyBGcm9tIHRoZSBbW1tjb21wb25lbnRdXV1fcHJlZml4IHRhYmxlLg0KCQkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9wcmVmaXgnLCAncCcpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnByZWZpeCcpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgncC5pZCcpIC4gJyknKTsNCgkJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV90aXRsZSB0YWJsZS4NCgkJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fdGl0bGUnLCAndCcpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnRpdGxlJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCd0LmlkJykgLiAnKScpOw0KDQoJCQkkcXVlcnktPndoZXJlKCdhLmlkID0gJy4oaW50KSAkaWQpOw0KCQkJLy8gb25seSBsb2FkIGNvbmZpcm1lZCBwcm9maWxlcyB0byB0aGVzZSBncm91cHMNCgkJCWlmICgncHVibGljJyA9PSAkYWNjZXNzIHx8ICdzcGVjaWFsJyA9PSAkYWNjZXNzKQ0KCQkJew0KCQkJCS8vIEZyb20gdGhlIFtbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24gdGFibGUuDQoJCQkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24nLCAnYycpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLmlkJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdjLmV4cGVydCcpIC4gJyknKTsNCgkJCQkkcXVlcnktPndoZXJlKCdjLmNvbmZpcm1lZCA9IDEnKTsNCgkJCX0NCgkJCS8vIG1ha2Ugc3VyZSB0aGV5IGhhdmUgYWNjZXNzIHRvIHRoaXMgcHJvZmlsZSBhbmQgaXQgaXMgcHVibGlzaGVkDQoJCQlpZiAoJ3B1YmxpYycgPT0gJGFjY2VzcykNCgkJCXsNCgkJCQkkdXNlcgk9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJCQkkbGV2ZWxzCT0gJHVzZXItPmdldEF1dGhvcmlzZWRWaWV3TGV2ZWxzKCk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYS5wdWJsaXNoZWQgPSAxJyk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgnYS5hY2Nlc3MgSU4gKCcgLiBpbXBsb2RlKCcsJywgJGxldmVscykgLiAnKScpOw0KCQkJfQ0KDQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQlpZiAoJ29iamVjdCcgPT0gJG1ldGhvZCkNCgkJCQl7DQoJCQkJCXNlbGY6OiRleHBlcnRbJGlkLiRtZXRob2QuJGFjY2Vzc10gPSBzZWxmOjptb2RlbEV4cGVydCgkZGItPmxvYWRPYmplY3QoKSwgJG1ldGhvZCwgJGFjY2VzcywgJGYsICRiKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJc2VsZjo6JGV4cGVydFskaWQuJG1ldGhvZC4kYWNjZXNzXSA9IHNlbGY6Om1vZGVsRXhwZXJ0KCRkYi0+bG9hZEFzc29jKCksICRtZXRob2QsICRhY2Nlc3MsICRmLCAkYik7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIHJldHVybiB0aGUgdmFsdWVzDQoJCWlmICghaXNzZXQoc2VsZjo6JGV4cGVydFskaWQuJG1ldGhvZC4kYWNjZXNzXSkpDQoJCXsNCgkJCXNlbGY6OiRleHBlcnRbJGlkLiRtZXRob2QuJGFjY2Vzc10gPSBmYWxzZTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGV4cGVydFskaWQuJG1ldGhvZC4kYWNjZXNzXTsNCgl9DQoNCgkvKioNCgkqIFJldHVybiBhcnJheSBvZiBzZWxlY3Rpb25zDQoJKiANCgkqIEByZXR1cm4gICAgYXJyYXkgaWYgdHlwZSBtYXRjaA0KCSovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oJHR5cGUsICRmLCAkYikNCgl7DQoJCWlmICgnZXhwZXJ0JyA9PSAkdHlwZSkNCgkJew0KCQkJcmV0dXJuIGFycmF5KA0KCQkJCSdnLm5hbWUnID0+ICRmLiduYW1lJy4kYiwJDQoJCQkJJ2cuZW1haWwnID0+ICRmLidlbWFpbCcuJGIsDQoJCQkJJ2gubmFtZScgPT4gJGYuJ2NvdW50cnlyZXNpZGVuY2UnLiRiLA0KCQkJCSdpLm5hbWUnID0+ICRmLidhcmVhX29mX2V4cGVydGlzZScuJGIsDQoJCQkJJ2EuY2l0eScgPT4gJGYuJ2NpdHknLiRiLA0KCQkJCSdhLnBob25lJyA9PiAkZi4ncGhvbmUnLiRiLA0KCQkJCSdhLnN1bW1hcnknID0+ICRmLidzdW1tYXJ5Jy4kYiwNCgkJCQknYS5hZGRyZXNzJyA9PiAkZi4nYWRkcmVzcycuJGIsDQoJCQkJJ2EuY3ZrZXknID0+ICRmLidjdmxpbmsnLiRiLA0KCQkJCSdwLm5hbWUnID0+ICRmLidwcmVmaXgnLiRiLA0KCQkJCSdhLm1lbWJlcnNoaXAnID0+ICRmLidtZW1iZXJzaGlwJy4kYiwNCgkJCQkndC5uYW1lJyA9PiAkZi4ndGl0bGUnLiRiLA0KCQkJCSdhLnByb2Zlc3Npb24nID0+ICRmLidwcm9mZXNzaW9uJy4kYiwNCgkJCQknYS5leHBlcmllbmNlJyA9PiAkZi4nZXhwZXJpZW5jZScuJGIsDQoJCQkJJ2EubW9iaWxlX3Bob25lJyA9PiAkZi4nbW9iaWxlX3Bob25lJy4kYiwNCgkJCQknai5uYW1lJyA9PiAkZi4nbmF0aW9uYWxpdHknLiRiLA0KCQkJCSdhLm9yZ2FuaXNhdGlvbicgPT4gJGYuJ29yZ2FuaXNhdGlvbicuJGIsDQoJCQkJJ2submFtZScgPT4gJGYuJ2FjYWRlbWljX3F1YWxpZmljYXRpb24nLiRiLA0KCQkJCSdhLnNwZWNpYWxpc2F0aW9uJyA9PiAkZi4nc3BlY2lhbGlzYXRpb24nLiRiLA0KCQkJCSdhLndvcmtlZF9mb3InID0+ICRmLid3b3JrZWRfZm9yJy4kYiwNCgkJCQknYS53ZWJzaXRlJyA9PiAkZi4nd2Vic2l0ZScuJGIsDQoJCQkJJ2EuZ2VvZ3JhcGhpY19mb2N1cycgPT4gJGYuJ2dlb2dyYXBoaWNfZm9jdXMnLiRiLA0KCQkJCSdhLnByb2Zlc3Npb25hbF9uZXR3b3JrcycgPT4gJGYuJ3Byb2Zlc3Npb25hbF9uZXR3b3JrcycuJGIsDQoJCQkJJ2EucHJpdmFjeV9hY2FkZW1pY19xdWFsaWZpY2F0aW9uJyA9PiAkZi4ncHJpdmFjeV9hY2FkZW1pY19xdWFsaWZpY2F0aW9uJy4kYiwNCgkJCQknYS5wcml2YWN5X2FkZHJlc3MnID0+ICRmLidwcml2YWN5X2FkZHJlc3MnLiRiLA0KCQkJCSdhLnByaXZhY3lfY2l0eScgPT4gJGYuJ3ByaXZhY3lfY2l0eScuJGIsDQoJCQkJJ2EucHJpdmFjeV9jb3VudHJ5cmVzaWRlbmNlJyA9PiAkZi4ncHJpdmFjeV9jb3VudHJ5cmVzaWRlbmNlJy4kYiwNCgkJCQknYS5wcml2YWN5X2N2JyA9PiAkZi4ncHJpdmFjeV9jdmxpbmsnLiRiLA0KCQkJCSdhLnByaXZhY3lfbWVtYmVyc2hpcCcgPT4gJGYuJ3ByaXZhY3lfbWVtYmVyc2hpcCcuJGIsDQoJCQkJJ2EucHJpdmFjeV9tb2JpbGVfcGhvbmUnID0+ICRmLidwcml2YWN5X21vYmlsZV9waG9uZScuJGIsDQoJCQkJJ2EucHJpdmFjeV9uYXRpb25hbGl0eScgPT4gJGYuJ3ByaXZhY3lfbmF0aW9uYWxpdHknLiRiLA0KCQkJCSdhLnByaXZhY3lfb3JnYW5pc2F0aW9uJyA9PiAkZi4ncHJpdmFjeV9vcmdhbmlzYXRpb24nLiRiLA0KCQkJCSdhLnByaXZhY3lfcGhvbmUnID0+ICRmLidwcml2YWN5X3Bob25lJy4kYiwNCgkJCQknYS5wcml2YWN5X3Byb2Zlc3Npb24nID0+ICRmLidwcml2YWN5X3Byb2Zlc3Npb24nLiRiLA0KCQkJCSdhLnByaXZhY3lfcHJvZmVzc2lvbmFsX25ldHdvcmtzJyA9PiAkZi4ncHJpdmFjeV9wcm9mZXNzaW9uYWxfbmV0d29ya3MnLiRiLA0KCQkJCSdhLnByaXZhY3lfd29ya2VkX2ZvcicgPT4gJGYuJ3ByaXZhY3lfd29ya2VkX2ZvcicuJGINCgkJCSk7DQoJCX0NCgkJaWYgKCdyZWZlcnJhbCcgPT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheSgNCgkJCQknYS5pZCcgPT4gJGYuJ2lkJy4kYiwNCgkJCQknYS5leHBlcnQnID0+ICRmLidleHBlcnRfaWQnLiRiLA0KCQkJCSdhLm5hbWUnID0+ICRmLiduYW1lJy4kYiwNCgkJCQknYS5vcmdhbmlzYXRpb24nID0+ICRmLidvcmdhbmlzYXRpb24nLiRiLA0KCQkJCSdhLnBvc2l0aW9uJyA9PiAkZi4ncG9zaXRpb24nLiRiLA0KCQkJCSdiLm5hbWUnID0+ICRmLidjb3VudHJ5Jy4kYiwNCgkJCQknYS5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYg0KCQkJKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKiBUaGUgbW9kZWxsaW5nIG9mIEV4cGVydCBkYXRhDQoJKiANCgkqIEByZXR1cm4gICAgb2JqZWN0IG9mIGFsbG93ZWQgdmFsdWVzDQoJKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIG1vZGVsRXhwZXJ0KCRpdGVtLCAmJG1ldGhvZCwgJiRhY2Nlc3MsICYkZiwgJiRiKQ0KCXsNCgkJLy8gZmlsZXIgYWxsIHByaXZhY3kgaW5mbyB0aGF0IHRoZXkgdXNlciBkb2VzIG5vdCB3YW50IHB1YmxpYw0KCQlpZiAoJ3B1YmxpYycgPT0gJGFjY2VzcykNCgkJew0KCQkJZm9yZWFjaCAoJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpDQoJCQl7DQoJCQkJaWYgKHN0cnBvcygka2V5LCAkZi4ncHJpdmFjeV8nKSAhPT0gZmFsc2UpDQoJCQkJew0KCQkJCQlpZiAoJHZhbHVlID09IDApDQoJCQkJCXsNCgkJCQkJCS8vIHJlbW92ZSBmcm9tIGRhdGEgaXQgaXMgbm90IHB1YmxpYw0KCQkJCQkJJHZhbHVlS2V5ID0gc3RyX3JlcGxhY2UoJ3ByaXZhY3lfJywgJycsICRrZXkpOw0KCQkJCQkJaWYgKCdvYmplY3QnID09ICRtZXRob2QpDQoJCQkJCQl7DQoJCQkJCQkJdW5zZXQoJGl0ZW0tPiR2YWx1ZUtleSk7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJdW5zZXQoJGl0ZW1bJHZhbHVlS2V5XSk7DQoJCQkJCQl9DQoJCQkJCQkvLyBhbHNvIHJlbW92ZSB0aGUgcHJpdmFjeSB2YWx1ZXMNCgkJCQkJCWlmICgnb2JqZWN0JyA9PSAkbWV0aG9kKQ0KCQkJCQkJew0KCQkJCQkJCXVuc2V0KCRpdGVtLT4ka2V5KTsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQl1bnNldCgkaXRlbVska2V5XSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9CQ0KCQkJfQ0KCQl9DQoJCS8vIEdldCB0aGUgYmFzaWMgZW5jcmlwdGlvbi4NCgkJJGJhc2lja2V5ID0gc2VsZjo6Z2V0Q3J5cHRLZXkoJ2Jhc2ljJyk7DQoJCS8vIEdldCB0aGUgZW5jcmlwdGlvbiBvYmplY3QuDQoJCSRiYXNpYyA9IG5ldyBTdXBlcl9fXzk5MTc1ZjZkX2RiYThfNDA4Nl84YTY1XzVjNGVjMTc1ZTYxZF9fX1Bvd2VyKCRiYXNpY2tleSwgMTI4KTsNCgkJLy8gbm90IGZvdW5kLCByZW1vdmUNCgkJJHJlbW92ZUxpbmsgPSB0cnVlOw0KCQkvLyBzdGFydCBpbXBsZW1lbnRhdGlvbiB0byBidWlsZCBDViBsaW5rDQoJCWlmICgkYmFzaWNrZXkgJiYgJ29iamVjdCcgPT0gJG1ldGhvZCAmJiBpc3NldCgkaXRlbS0+eyRmLidjdmxpbmsnLiRifSkpDQoJCXsNCgkJCWlmICghZW1wdHkoJGl0ZW0tPnskZi4nY3ZsaW5rJy4kYn0pICYmICFpc19udW1lcmljKCRpdGVtLT57JGYuJ2N2bGluaycuJGJ9KSAmJiAkaXRlbS0+eyRmLidjdmxpbmsnLiRifSA9PT0gYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRpdGVtLT57JGYuJ2N2bGluaycuJGJ9LCB0cnVlKSkpDQoJCQl7DQoJCQkJJGtleSA9IHJ0cmltKCRiYXNpYy0+ZGVjcnlwdFN0cmluZygkaXRlbS0+eyRmLidjdmxpbmsnLiRifSksICJcMCIpOw0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygka2V5KSAmJiAhaXNfbnVtZXJpYygka2V5KSkNCgkJCQl7DQoJCQkJCSRrZXlBcnJheSA9IGV4cGxvZGUoJy4nLCAka2V5KTsNCgkJCQkJJGl0ZW0tPnskZi4nY3ZsaW5rJy4kYn0gPSBVcmk6OnJvb3QoKS4naW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9ZG93bmxvYWQucGRmJnRva2VuPScuSm9vbWxhX19fNWJhMzg1MTNfNWM0Zl80YjBkXzkzNWVfNDllOTg2YTZiY2U4X19fUG93ZXI6OmdldEZvcm1Ub2tlbigpLicmZmlsZT0nIC4gJGtleUFycmF5WzBdIC4gJy5wZGYnOw0KCQkJCQkkcmVtb3ZlTGluayA9IGZhbHNlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCRiYXNpY2tleSAmJiBpc3NldCgkaXRlbVskZi4nY3ZsaW5rJy4kYl0pKQ0KCQl7DQoJCQlpZiAoIWVtcHR5KCRpdGVtWyRmLidjdmxpbmsnLiRiXSkgJiYgIWlzX251bWVyaWMoJGl0ZW1bJGYuJ2N2bGluaycuJGJdKSAmJiAkaXRlbVskZi4nY3ZsaW5rJy4kYl0gPT09IGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkaXRlbVskZi4nY3ZsaW5rJy4kYl0sIHRydWUpKSkNCgkJCXsNCgkJCQkka2V5ID0gcnRyaW0oJGJhc2ljLT5kZWNyeXB0U3RyaW5nKCRpdGVtWyRmLidjdmxpbmsnLiRiXSksICJcMCIpOw0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygka2V5KSAmJiAhaXNfbnVtZXJpYygka2V5KSkNCgkJCQl7DQoJCQkJCSRrZXlBcnJheSA9IGV4cGxvZGUoJy4nLCAka2V5KTsNCgkJCQkJJGl0ZW1bJGYuJ2N2bGluaycuJGJdID0gVXJpOjpyb290KCkuJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWRvd25sb2FkLnBkZiZ0b2tlbj0nLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4nJmZpbGU9JyAuICRrZXlBcnJheVswXSAuICcucGRmJzsNCgkJCQkJJHJlbW92ZUxpbmsgPSBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJaWYgKCRyZW1vdmVMaW5rKQ0KCQl7DQoJCQlpZiAoaXNzZXQoJGl0ZW0tPnskZi4nY3ZsaW5rJy4kYn0pKQ0KCQkJew0KCQkJCXVuc2V0KCRpdGVtLT57JGYuJ2N2bGluaycuJGJ9KTsNCgkJCX0NCgkJCWVsc2VpZiAoaXNzZXQoJGl0ZW1bJGYuJ2N2bGluaycuJGJdKSkNCgkJCXsNCgkJCQl1bnNldCgkaXRlbVskZi4nY3ZsaW5rJy4kYl0pOw0KCQkJfQ0KCQl9DQoJCS8vIGJ1aWxkIHRoZSBuYW1lDQoJCWlmICgnb2JqZWN0JyA9PSAkbWV0aG9kICYmIGlzc2V0KCRpdGVtLT57JGYuJ25hbWUnLiRifSkpDQoJCXsNCgkJCSR0aXRsZSA9IChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRpdGVtLT57JGYuJ3RpdGxlJy4kYn0pKSA/ICRpdGVtLT57JGYuJ3RpdGxlJy4kYn0uJy4gJyA6ICgoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkaXRlbS0+eyRmLidwcmVmaXgnLiRifSkpID8gJGl0ZW0tPnskZi4ncHJlZml4Jy4kYn0uJy4gJzogJycpOw0KCQkJJGl0ZW0tPnskZi4nbmFtZScuJGJ9ID0gJHRpdGxlLiRpdGVtLT57JGYuJ25hbWUnLiRifTsNCgkJCS8vIGFsc28gcmVtb3ZlIHRpdGxlIGFuZCBwcmVmaXgNCgkJCXVuc2V0KCRpdGVtLT57JGYuJ3ByZWZpeCcuJGJ9KTsNCgkJCXVuc2V0KCRpdGVtLT57JGYuJ3RpdGxlJy4kYn0pOw0KCQl9DQoJCWlmICgncGxhY2Vob2xkZXInID09ICRtZXRob2QgJiYgaXNzZXQoJGl0ZW1bJGYuJ25hbWUnLiRiXSkpDQoJCXsNCgkJCSR0aXRsZSA9IChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRpdGVtWyRmLid0aXRsZScuJGJdKSkgPyAkaXRlbVskZi4ndGl0bGUnLiRiXS4nLiAnIDogKChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRpdGVtWyRmLidwcmVmaXgnLiRiXSkpID8gJGl0ZW1bJGYuJ3ByZWZpeCcuJGJdLicuICc6ICcnKTsNCgkJCSRpdGVtWyRmLiduYW1lJy4kYl0gPSAkdGl0bGUuJGl0ZW1bJGYuJ25hbWUnLiRiXTsNCgkJCS8vIGFsc28gcmVtb3ZlIHRpdGxlIGFuZCBwcmVmaXgNCgkJCXVuc2V0KCRpdGVtWyRmLidwcmVmaXgnLiRiXSk7DQoJCQl1bnNldCgkaXRlbVskZi4ndGl0bGUnLiRiXSk7DQoJCX0NCgkJLy8gYnVpbGQgdGhlIGV4cGVyaWVuY2UNCgkJaWYgKCdvYmplY3QnID09ICRtZXRob2QgJiYgaXNzZXQoJGl0ZW0tPnskZi4nZXhwZXJpZW5jZScuJGJ9KSkNCgkJew0KCQkJJHllYXJzID0gKCRpdGVtLT57JGYuJ2V4cGVyaWVuY2UnLiRifSA9PSAxKSA/IFRleHQ6Ol8oJ1llYXInKTogVGV4dDo6XygnWWVhcnMnKTsNCgkJCSRpdGVtLT57JGYuJ2V4cGVyaWVuY2UnLiRifSA9ICRpdGVtLT57JGYuJ2V4cGVyaWVuY2UnLiRifS4nICcuJHllYXJzOw0KCQl9DQoJCWlmICgncGxhY2Vob2xkZXInID09ICRtZXRob2QgJiYgaXNzZXQoJGl0ZW1bJGYuJ2V4cGVyaWVuY2UnLiRiXSkpDQoJCXsNCgkJCSR5ZWFycyA9ICgkaXRlbVskZi4nZXhwZXJpZW5jZScuJGJdID09IDEpID8gVGV4dDo6XygnWWVhcicpOiBUZXh0OjpfKCdZZWFycycpOw0KCQkJJGl0ZW1bJGYuJ2V4cGVyaWVuY2UnLiRiXSA9ICRpdGVtWyRmLidleHBlcmllbmNlJy4kYl0uJyAnLiR5ZWFyczsNCgkJfQ0KCQkvLyBzZXQgc3BlY2lhbGlzYXRpb24gYW5kIGdlb2dyYXBoaWNfZm9jdXMgdG8gc3RyaW5nDQoJCSR0YWJsZXMgPSBhcnJheSgnc3BlY2lhbGlzYXRpb24nLCdnZW9ncmFwaGljX2ZvY3VzJyk7DQoJCWZvcmVhY2ggKCR0YWJsZXMgYXMgJHRhYmxlKQ0KCQl7DQoJCQlpZiAoJ29iamVjdCcgPT0gJG1ldGhvZCAmJiBpc3NldCgkaXRlbS0+eyRmLiR0YWJsZS4kYn0pKQ0KCQkJew0KCQkJCSRzdHVmZiA9IGpzb25fZGVjb2RlKCRpdGVtLT57JGYuJHRhYmxlLiRifSx0cnVlKTsNCgkJCQkkbGluZSA9IGFycmF5KCk7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzdHVmZikpDQoJCQkJew0KCQkJCQkkbmFhbSA9ICcnOw0KCQkJCQlmb3JlYWNoICgkc3R1ZmYgYXMgJHZhbCkNCgkJCQkJew0KCQkJCQkJaWYgKCRuYWFtID0gc2VsZjo6Z2V0VmFyKCR0YWJsZSwgJHZhbCwgJ2lkJywgJ25hbWUnKSkNCgkJCQkJCXsNCgkJCQkJCQkkbGluZVtdID0gJG5hYW07DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKGlzc2V0KCRsaW5lKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkbGluZSkpDQoJCQkJew0KCQkJCQkkaXRlbS0+eyRmLiR0YWJsZS4kYn0gPSBpbXBsb2RlKCcsICcsICRsaW5lKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJdW5zZXQoJGl0ZW0tPnskZi4kdGFibGUuJGJ9KTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKGlzc2V0KCRpdGVtWyRmLiR0YWJsZS4kYl0pKQ0KCQkJew0KCQkJCSRzdHVmZiA9IGpzb25fZGVjb2RlKCRpdGVtWyRmLiR0YWJsZS4kYl0sdHJ1ZSk7DQoJCQkJJGxpbmUgPSBhcnJheSgpOw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkc3R1ZmYpKQ0KCQkJCXsNCgkJCQkJJG5hYW0gPSAnJzsNCgkJCQkJZm9yZWFjaCAoJHN0dWZmIGFzICR2YWwpDQoJCQkJCXsNCgkJCQkJCWlmICgkbmFhbSA9IHNlbGY6OmdldFZhcigkdGFibGUsICR2YWwsICdpZCcsICduYW1lJykpDQoJCQkJCQl7DQoJCQkJCQkJJGxpbmVbXSA9ICRuYWFtOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmIChpc3NldCgkbGluZSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGxpbmUpKQ0KCQkJCXsNCgkJCQkJJGl0ZW1bJGYuJHRhYmxlLiRiXSA9IGltcGxvZGUoJywgJywgJGxpbmUpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQl1bnNldCgkaXRlbVskZi4kdGFibGUuJGJdKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gcmVtb3ZlIDAgYW5kIHJlcGxhY2Ugd2l0aCBlbXB0eSBzdHJpbmcNCgkJaWYgKCdwbGFjZWhvbGRlcicgPT0gJG1ldGhvZCkNCgkJew0KCQkJZm9yZWFjaCAoJGl0ZW0gYXMgJGtleSA9PiAmJHZhbHVlKQ0KCQkJew0KCQkJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHZhbHVlKSkNCgkJCQl7DQoJCQkJCSR2YWx1ZSA9ICcnOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGl0ZW07DQoJfQ0KDQoJcHJvdGVjdGVkIHN0YXRpYyAkY29tcGFueURldGFpbHMgPSBhcnJheSgpOw0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29tcGFueURldGFpbHMoJG1ldGhvZCA9ICdhcnJheScpDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXSkpDQoJCXsNCgkJCSRmID0gJyc7DQoJCQkkYiA9ICcnOw0KCQkJaWYgKCdwbGFjZWhvbGRlcicgPT0gJG1ldGhvZCkNCgkJCXsNCgkJCQkkZiA9ICdbJzsNCgkJCQkkYiA9ICddJzsNCgkJCX0NCgkJCSRhcHBQYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF0gPSBhcnJheSgpOw0KCQkJc2VsZjo6JGNvbXBhbnlEZXRhaWxzWyRtZXRob2RdWyRmLidjb21wYW55X25hbWUnLiRiXSA9ICRhcHBQYXJhbXMtPmdldCgnY29tcGFueW5hbWUnLCAnJyk7DQoJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF1bJGYuJ2NvbXBhbnlfbG9nbycuJGJdID0gJzxpbWcgYWx0PSInLnNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXVskZi4nY29tcGFueV9uYW1lJy4kYl0uJyIgc3JjPSInLlVyaTo6cm9vdCgpLiRhcHBQYXJhbXMtPmdldCgnY29tcGFueWxvZ28nLCAnJykuJyI+JzsNCgkJCXNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXVskZi4nY29tcGFueV9lbWFpbCcuJGJdID0gJGFwcFBhcmFtcy0+Z2V0KCdlbWFpbCcsICcnKTsNCgkJCXNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXVskZi4nY29tcGFueV9waG9uZScuJGJdID0gJGFwcFBhcmFtcy0+Z2V0KCdwaG9uZScsICcnKTsNCgkJCXNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXVskZi4nY29tcGFueV9tb2JpbGUnLiRiXSA9ICRhcHBQYXJhbXMtPmdldCgnbW9iaWxlX3Bob25lJywgJycpOw0KCQkJc2VsZjo6JGNvbXBhbnlEZXRhaWxzWyRtZXRob2RdWyRmLidjb21wYW55X3N0cmVldCcuJGJdID0gJGFwcFBhcmFtcy0+Z2V0KCdzdHJlZXQnLCAnJyk7DQoJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF1bJGYuJ2NvbXBhbnlfcG9zdGFsJy4kYl0gPSAkYXBwUGFyYW1zLT5nZXQoJ3Bvc3RhbCcsICcnKTsNCgkJCXNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXVskZi4nY29tcGFueV9wb3N0YWxjb2RlJy4kYl0gPSAkYXBwUGFyYW1zLT5nZXQoJ3Bvc3RhbGNvZGUnLCAnJyk7DQoJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF1bJGYuJ2NvbXBhbnlfY2l0eScuJGJdID0gJGFwcFBhcmFtcy0+Z2V0KCdjaXR5JywgJycpOw0KCQkJc2VsZjo6JGNvbXBhbnlEZXRhaWxzWyRtZXRob2RdWyRmLidjb21wYW55X3dlYnNpdGUnLiRiXSA9ICRhcHBQYXJhbXMtPmdldCgnd2Vic2l0ZScsICcnKTsNCgkJCXNlbGY6OiRjb21wYW55RGV0YWlsc1skbWV0aG9kXVskZi4nY29tcGFueV9yZWdpb24nLiRiXSA9ICRhcHBQYXJhbXMtPmdldCgncmVnaW9uJywgJycpOw0KCQkJLy8gc2V0IHRoZSBjb3VudHJ5DQoJCQkkY291bnRyeSA9ICRhcHBQYXJhbXMtPmdldCgnY291bnRyeScpOw0KCQkJaWYgKCRjb3VudHJ5ICYmICRjb3VudHJ5ID4gMCkNCgkJCXsNCgkJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF1bJGYuJ2NvbXBhbnlfY291bnRyeV9uYW1lJy4kYl0gPSBzZWxmOjpnZXRWYXIoJ2NvdW50cnknLCAkY291bnRyeSwgJ2lkJywgJ25hbWUnKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF1bJGYuJ2NvbXBhbnlfY291bnRyeV9uYW1lJy4kYl0gPSAnJzsNCgkJCX0NCgkJCS8vIGlmIG9iamVjdCBpcyBjYWxsZWQgZm9yDQoJCQlpZiAoJ29iamVjdCcgPT0gJG1ldGhvZCkNCgkJCXsNCgkJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF0gPSAob2JqZWN0KSBzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF07DQoJCQl9DQoJCX0NCgkJLy8gcmV0dXJuIHRoZSB2YWx1ZXMNCgkJaWYgKCFpc3NldChzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF0pKQ0KCQl7DQoJCQlzZWxmOjokY29tcGFueURldGFpbHNbJG1ldGhvZF0gPSBmYWxzZTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGNvbXBhbnlEZXRhaWxzWyRtZXRob2RdOw0KCX0NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQogW0NVU1RPTUNPREU9dXNlcklzVGhyZWUrYWRtaW51c2VyLG9yZ2FuaXNhdGlvbnVzZXIsZXhwZXJ0dXNlcixvcmdhbmlzYXRpb24sZXhwZXJ0XQ0KCS8qKg0KCSogCVRoZSBvd25lcg0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG93bmVyID0gYXJyYXkoKTsNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzQWNjZXNzKCRyZWNvcmRJZCwgJHVzZXJJZCA9IG51bGwsICR0byA9ICdleHBlcnQnKQ0KCXsNCgkJaWYoISR1c2VySWQpDQoJCXsNCgkJCSR1c2VySWQgPSBGYWN0b3J5OjpnZXRVc2VyKCktPmlkOw0KCQl9DQoJCSR0eXBlID0gc2VsZjo6dXNlcklzKCR1c2VySWQpOw0KCQlpZiAoJHR5cGUgJiYgJHJlY29yZElkID4gMCkNCgkJew0KCQkJc3dpdGNoKCR0bykNCgkJCXsNCgkJCQljYXNlICdleHBlcnQnOg0KCQkJCQlyZXR1cm4gc2VsZjo6YWNjZXNzRXhwZXJ0KCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpOw0KCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ29yZ2FuaXNhdGlvbic6DQoJCQkJCXJldHVybiBzZWxmOjphY2Nlc3NPcmdhbmlzYXRpb24oJHR5cGUsICRyZWNvcmRJZCwgJHVzZXJJZCk7DQoJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzT3JnYW5pc2F0aW9uKCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6IC8vIGNoZWNrIGlmIG9yZ2FuaXNhdGlvbiBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnb3JnYW5pc2F0aW9uJy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnb3JnYW5pc2F0aW9uJy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdvcmdhbmlzYXRpb24nLCAkcmVjb3JkSWQsICdpZCcsICd1c2VyJyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnb3JnYW5pc2F0aW9uJy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzRXhwZXJ0KCR0eXBlLCAkcmVjb3JkSWQsICR1c2VySWQpDQoJew0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDM6IC8vIGFkbWluIGlzIGFsbG93ZWQgdG8gZWRpdA0KCQkJCXJldHVybiB0cnVlOw0KCQkJYnJlYWs7DQoJCQljYXNlIDE6IC8vIGNoZWNrIGlmIGV4cGVydCBpcyB0aGUgb3duZXINCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiRvd25lclsnZXhwZXJ0Jy4kcmVjb3JkSWRdKSkNCgkJCQl7DQoJCQkJCS8vIGxvYWQgdGhlIG93bmVyDQoJCQkJCXNlbGY6OiRvd25lclsnZXhwZXJ0Jy4kcmVjb3JkSWRdID0gc2VsZjo6Z2V0VmFyKCdleHBlcnQnLCAkcmVjb3JkSWQsICdpZCcsICd1c2VyJyk7DQoJCQkJfQ0KCQkJCS8vIG9ubHkgdHJ1ZSBpZiBvd25lciBpcyB0aGUgc2FtZSBhcyB1c2VyDQoJCQkJaWYgKHNlbGY6OiRvd25lclsnZXhwZXJ0Jy4kcmVjb3JkSWRdID09ICR1c2VySWQpDQoJCQkJew0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogY2hlY2sgY29uZmlybWF0aW9uDQoJKg0KCSogQGlucHV0CSAgaW50ICAgICAgICAgICAgICAgICAgICAgICAkaWQgICAgIFRoZSBkYXRhIGlkDQoJKiBAaW5wdXQJICBhcnJheSAgICAgICAgICAgICAgICAgICAkZGF0YSAgICAgVGhlIHZhbGlkIGRhdGENCgkqDQoJKiBAcmV0dXJucyAgYm9vbGVhbiBvbiBzdWNjZXNzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja0NvbmZpcm1hdGlvbigkaWQsICYkZGF0YSkNCgl7DQoJCSR1cGRhdGVEYXRhID0gYXJyYXkoKTsNCgkJLy8gbG9hZCB0aGUgcmVmZXJlbmNlIGRhdGEgaWYgc2V0DQoJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkZGF0YVsncmVmZXJlbmNlJ10pKQ0KCQl7DQoJCQkkcmVmZXJlbmNlID0ganNvbl9kZWNvZGUoJGRhdGFbJ3JlZmVyZW5jZSddLHRydWUpOw0KCQl9DQoJCS8vIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGNvbmZpcm1hdGlvbiBkYXRhIHNldA0KCQlpZiAoJGNvbmZpcm1hdGlvbiA9IHNlbGY6OmdldENvbmZpcm1hdGlvbigkaWQpKQ0KCQl7DQoJCQkvLyB0aGVyZSBpcyBhbnkgcmVmZXJlbmNlIGRhdGEgc2V0DQoJCQlpZiAoaXNzZXQoJHJlZmVyZW5jZSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHJlZmVyZW5jZVsnZW1haWwnXSkpDQoJCQl7DQoJCQkJLy8gd2UgbWF5IG5lZWQgdG8gdXBkYXRlIHRoZSBkYXRhIGlmIHRoZSBlbWFpbCBjaGFuZ2VkDQoJCQkJaWYgKAkkcmVmZXJlbmNlWydlbWFpbCddWzBdICE9PSAkY29uZmlybWF0aW9uWydlbWFpbCddIHx8DQoJCQkJCSRyZWZlcmVuY2VbJ29yZ2FuaXNhdGlvbl9yZWYnXVswXSAhPT0gJGNvbmZpcm1hdGlvblsnb3JnYW5pc2F0aW9uJ10gfHwNCgkJCQkJJHJlZmVyZW5jZVsnbmFtZSddWzBdICE9PSAkY29uZmlybWF0aW9uWyduYW1lJ10gfHwNCgkJCQkJJHJlZmVyZW5jZVsncGhvbmUnXVswXSAhPT0gJGNvbmZpcm1hdGlvblsncGhvbmUnXSB8fA0KCQkJCQkkcmVmZXJlbmNlWyJjb3VudHJ5Il1bMF0gIT09ICRjb25maXJtYXRpb25bJ2NvdW50cnknXSAgfHwNCgkJCQkJJHJlZmVyZW5jZVsicG9zaXRpb24iXVswXSAhPT0gJGNvbmZpcm1hdGlvblsncG9zaXRpb24nXQ0KCQkJCQkpDQoJCQkJew0KCQkJCQlpZiAoKGlzc2V0KCRjb25maXJtYXRpb25bJ2NvbmZpcm1lZCddKSAmJiAkY29uZmlybWF0aW9uWydjb25maXJtZWQnXSA9PSAxKSB8fCAoIXNlbGY6OnVwZGF0ZUNvbmZpcm1hdGlvbigkaWQsICRyZWZlcmVuY2UsICRkYXRhKSkpDQoJCQkJCXsNCgkJCQkJCS8vIHNldCB0aGUgcmVmZXJlbmNlIGRhdGEgYmFjayBlbiBsb2FkIGVycm9yDQoJCQkJCQkkcmVmZXJlbmNlWyJvcmdhbmlzYXRpb25fcmVmIl1bMF0gPSAkY29uZmlybWF0aW9uWydvcmdhbmlzYXRpb24nXTsNCgkJCQkJCSRyZWZlcmVuY2VbIm5hbWUiXVswXSA9ICRjb25maXJtYXRpb25bJ25hbWUnXTsNCgkJCQkJCSRyZWZlcmVuY2VbImVtYWlsIl1bMF0gPSAkY29uZmlybWF0aW9uWydlbWFpbCddOw0KCQkJCQkJJHJlZmVyZW5jZVsicGhvbmUiXVswXSA9ICRjb25maXJtYXRpb25bJ3Bob25lJ107DQoJCQkJCQkkcmVmZXJlbmNlWyJwb3NpdGlvbiJdWzBdID0gJGNvbmZpcm1hdGlvblsncG9zaXRpb24nXTsNCgkJCQkJCSRyZWZlcmVuY2VbImNvdW50cnkiXVswXSA9ICRjb25maXJtYXRpb25bJ2NvdW50cnknXTsNCgkJCQkJCS8vIHVwZGF0ZSB0aGUgcmVmZXJlbmNlIGRhdGENCgkJCQkJCXNlbGY6OnVwZGF0ZVJlZmVyZW5jZURhdGEoJGlkLCBqc29uX2VuY29kZSgkcmVmZXJlbmNlKSk7DQoJCQkJCQkvLyBzZXQgdGhlIHdhcm5pbmcgbm90aWNlIHNpbmNlIG5vdCByZWZlcnJhbCB3YXMgc2V0DQoJCQkJCQlpZiAoaXNzZXQoJGNvbmZpcm1hdGlvblsnY29uZmlybWVkJ10pICYmICRjb25maXJtYXRpb25bJ2NvbmZpcm1lZCddID09IDEpDQoJCQkJCQl7DQoJCQkJCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgY2Fubm90IGRlbGV0ZSBvciBjaGFuZ2UgdGhpcyBmaXJzdCByZWZlcmVuY2UgcGVyc29uIGRldGFpbHMgYWZ0ZXIgdGhpcyBwZXJzb24gaGFzIHZlcmlmaWVkIHlvdXIgaW5mb3JtYXRpb24sIHVubGVzcyB5b3UgY29udGFjdCBzdXBwb3J0IHdpdGggdGhlIHJlYXNvbnMgZm9yIGRvaW5nIHNvLicpOw0KCQkJCQkJfQ0KCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQkJLy8gc2V0IHRoZSByZWZlcmVuY2UgZGF0YSBiYWNrIGVuIGxvYWQgZXJyb3INCgkJCSR1cGRhdGVEYXRhWyJvcmdhbmlzYXRpb25fcmVmIl1bXSA9ICRjb25maXJtYXRpb25bJ29yZ2FuaXNhdGlvbiddOw0KCQkJJHVwZGF0ZURhdGFbIm5hbWUiXVtdID0gJGNvbmZpcm1hdGlvblsnbmFtZSddOw0KCQkJJHVwZGF0ZURhdGFbImVtYWlsIl1bXSA9ICRjb25maXJtYXRpb25bJ2VtYWlsJ107DQoJCQkkdXBkYXRlRGF0YVsicGhvbmUiXVtdID0gJGNvbmZpcm1hdGlvblsncGhvbmUnXTsNCgkJCSR1cGRhdGVEYXRhWyJwb3NpdGlvbiJdW10gPSAkY29uZmlybWF0aW9uWydwb3NpdGlvbiddOw0KCQkJJHVwZGF0ZURhdGFbImNvdW50cnkiXVtdID0gJGNvbmZpcm1hdGlvblsnY291bnRyeSddOw0KCQkJLy8gdXBkYXRlIHRoZSByZWZlcmVuY2UgZGF0YQ0KCQkJc2VsZjo6dXBkYXRlUmVmZXJlbmNlRGF0YSgkaWQsIGpzb25fZW5jb2RlKCR1cGRhdGVEYXRhKSk7DQoJCQkkZGF0YVsnZXJyb3JzJ11bXSA9IFRleHQ6Ol8oJ1lvdSBjYW5ub3QgZGVsZXRlIG9yIGNoYW5nZSB0aGlzIGZpcnN0IHJlZmVyZW5jZSBwZXJzb24gZGV0YWlscyBhZnRlciB0aGlzIHBlcnNvbiBoYXMgdmVyaWZpZWQgeW91ciBpbmZvcm1hdGlvbiwgdW5sZXNzIHlvdSBjb250YWN0IHN1cHBvcnQgd2l0aCB0aGUgcmVhc29ucyBmb3IgZG9pbmcgc28uJyk7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJLy8gdGhlcmUgaXMgYW55IHJlZmVyZW5jZSBkYXRhIHNldA0KCQlpZiAoaXNzZXQoJHJlZmVyZW5jZSkgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHJlZmVyZW5jZVsnZW1haWwnXSkpDQoJCXsNCgkJCWlmIChzZWxmOjpzZXRDb25maXJtYXRpb24oJGlkLCAkcmVmZXJlbmNlLCAkZGF0YSkpDQoJCQl7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCgkJLy8gc2V0IHRoZSB3YXJuaW5nIG5vdGljZSBzaW5jZSBub3QgcmVmZXJyYWwgd2FzIHNldA0KCQkkZGF0YVsnZXJyb3JzJ11bXSA9IFRleHQ6Ol8oJ1lvdXIgYWNjb3VudCB3aWxsIG5vdCBiZSBhY3RpdmF0ZWQuIEl0IGlzIG1hbmRhdG9yeSB0byBhZGQgYXQgbGVhc3Qgb25lIHJlZmVyZW5jZSBwZXJzb24gaW4gb3JkZXIgdG8gdmVyaWZ5IHRoZSBpbmZvcm1hdGlvbiB5b3UgcHJvdmlkZWQuJyk7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIHVwZGF0ZSBSZWZlcmVuY2UgRGF0YQ0KCSoNCgkqIEBpbnB1dAkgIGludCAgICAgICAgJGlkICAgICBUaGUgZXhwZXJ0IGlkDQoJKiBAaW5wdXQJICBzdHJpbmcgICAgICAgICRyZWZlcmVuY2UgICAgIFRoZSByZWZlcmVuY2UganNvbg0KCSoNCgkqIEByZXR1cm5zICBib29sIG9uIHN1Y2Nlc3MNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZVJlZmVyZW5jZURhdGEoJGlkLCAkdmFsdWUsICR0YXJnZXQgPSAicmVmZXJlbmNlIikNCgl7CQkNCgkJLy8gQ3JlYXRlIGFuIG9iamVjdCBmb3IgdGhlIHJlY29yZCB3ZSBhcmUgZ29pbmcgdG8gdXBkYXRlLg0KCQkkb2JqZWN0ID0gbmV3IFxzdGRDbGFzcygpOw0KIA0KCQkvLyBNdXN0IGJlIGEgdmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUuDQoJCSRvYmplY3QtPmlkID0gJGlkOw0KCQkkb2JqZWN0LT4kdGFyZ2V0ID0gJHZhbHVlOw0KIA0KCQkvLyBVcGRhdGUgdGhlaXIgZGV0YWlscyBpbiB0aGUgZXhwZXJ0IHRhYmxlIHVzaW5nIGlkIGFzIHRoZSBwcmltYXJ5IGtleS4NCgkJcmV0dXJuIEZhY3Rvcnk6OmdldERibygpLT51cGRhdGVPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9leHBlcnQnLCAkb2JqZWN0LCAnaWQnKTsNCgl9DQoNCgkvKioNCgkqIGdldCBjb25maXJtYXRpb24NCgkqDQoJKiBAaW5wdXQJICBpbnQgICAgICAgICRpZCAgICAgVGhlIGV4cGVydCBpZA0KCSoNCgkqIEByZXR1cm5zICBvYmplY3QgaWYgZm91bmQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldENvbmZpcm1hdGlvbigkaWQpDQoJewkJDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkkcXVlcnktPnNlbGVjdCgnYS4qJyk7DQoJCSRxdWVyeS0+ZnJvbSgnI19fW1tbY29tcG9uZW50XV1dX2NvbmZpcm1hdGlvbiBBUyBhJyk7DQoJCSRxdWVyeS0+d2hlcmUoJ2EuZXhwZXJ0ID0gJy4gKGludCkgJGlkKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiAkZGItPmxvYWRBc3NvYygpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIHVwZGF0ZSBjb25maXJtYXRpb24NCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZUNvbmZpcm1hdGlvbigkaWQsICRyZWZlcmVuY2UsICYkZGF0YSkNCgl7DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBkYXRhIGFuZCB0aGF0IGl0IGlzIGNvcnJlY3QNCgkJJG1haWwgPSBGYWN0b3J5OjpnZXRNYWlsZXIoKTsNCgkJJHVwZGF0ZSA9IHRydWU7DQoJCWlmICghJG1haWwtPlZhbGlkYXRlQWRkcmVzcygkcmVmZXJlbmNlWydlbWFpbCddWzBdKSkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSAkcmVmZXJlbmNlWydlbWFpbCddWzBdIC4gJyAnIC4gVGV4dDo6XygnaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcy4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSR1cGRhdGUgPSBmYWxzZTsNCgkJfQ0KCQlpZiAoIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRyZWZlcmVuY2VbJ25hbWUnXVswXSkpDQoJCXsNCgkJCSRkYXRhWydlcnJvcnMnXVtdID0gVGV4dDo6XygnWW91IG5lZWQgdG8gYWRkIHJlZmVyZW5jZSBuYW1lLiA8Yj4oUmVmZXJlbmNlcyBFUlJPUiEpPC9iPicpOw0KCQkJJHVwZGF0ZSA9IGZhbHNlOw0KCQl9DQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHJlZmVyZW5jZVsnb3JnYW5pc2F0aW9uX3JlZiddWzBdKSkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgbmVlZCB0byBhZGQgcmVmZXJlbmNlIG9yZ2FuaXNhdGlvbiBuYW1lLiA8Yj4oUmVmZXJlbmNlcyBFUlJPUiEpPC9iPicpOw0KCQkJJHVwZGF0ZSA9IGZhbHNlOw0KCQl9DQoJCWlmICghaXNzZXQoJHJlZmVyZW5jZVsnY291bnRyeSddWzBdKSB8fCAkcmVmZXJlbmNlWydjb3VudHJ5J11bMF0gPD0gMCkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgbmVlZCB0byBhZGQgcmVmZXJlbmNlIGNvdW50cnkuIDxiPihSZWZlcmVuY2VzIEVSUk9SISk8L2I+Jyk7DQoJCQkkdXBkYXRlID0gZmFsc2U7DQoJCX0NCgkJaWYgKCR1cGRhdGUpDQoJCXsNCgkJCS8vIENyZWF0ZSBhbiBvYmplY3QgZm9yIHRoZSByZWNvcmQgd2UgYXJlIGdvaW5nIHRvIHVwZGF0ZS4NCgkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkvLyBNdXN0IGJlIGEgdmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUuDQoJCQkkb2JqZWN0LT5leHBlcnQgPSAkaWQ7DQoJCQkkb2JqZWN0LT5vcmdhbmlzYXRpb24gPSAkcmVmZXJlbmNlWydvcmdhbmlzYXRpb25fcmVmJ11bMF07DQoJCQkkb2JqZWN0LT5uYW1lID0gJHJlZmVyZW5jZVsnbmFtZSddWzBdOw0KCQkJJG9iamVjdC0+ZW1haWwgPSAkcmVmZXJlbmNlWydlbWFpbCddWzBdOw0KCQkJJG9iamVjdC0+cGhvbmUgPSAkcmVmZXJlbmNlWydwaG9uZSddWzBdOw0KCQkJJG9iamVjdC0+cG9zaXRpb24gPSAkcmVmZXJlbmNlWydwb3NpdGlvbiddWzBdOw0KCQkJJG9iamVjdC0+Y291bnRyeSA9IChpbnQpICRyZWZlcmVuY2VbJ2NvdW50cnknXVswXTsNCgkJCSRvYmplY3QtPmVtYWlsc2VuZCA9IDI7DQoNCgkJCS8vIFVwZGF0ZSB0aGVpciBkZXRhaWxzIGluIHRoZSBleHBlcnQgdGFibGUgdXNpbmcgZXhwZXJ0IGFzIHRoZSBwcmltYXJ5IGtleS4NCgkJCXJldHVybiBGYWN0b3J5OjpnZXREYm8oKS0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fY29uZmlybWF0aW9uJywgJG9iamVjdCwgJ2V4cGVydCcpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIHNldCBjb25maXJtYXRpb24NCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldENvbmZpcm1hdGlvbigkaWQsICRyZWZlcmVuY2UsICYkZGF0YSkNCgl7DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBkYXRhIGFuZCB0aGF0IGl0IGlzIGNvcnJlY3QNCgkJJG1haWwgPSBGYWN0b3J5OjpnZXRNYWlsZXIoKTsNCgkJJHN0b3JlID0gdHJ1ZTsNCgkJaWYgKCEkbWFpbC0+VmFsaWRhdGVBZGRyZXNzKCRyZWZlcmVuY2VbJ2VtYWlsJ11bMF0pKQ0KCQl7DQoJCQkkZGF0YVsnZXJyb3JzJ11bXSA9ICRyZWZlcmVuY2VbJ2VtYWlsJ11bMF0gLiAnICcgLiBUZXh0OjpfKCdpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiA8Yj4oUmVmZXJlbmNlcyBFUlJPUiEpPC9iPicpOw0KCQkJJHN0b3JlID0gZmFsc2U7DQoJCX0NCgkJaWYgKCFTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcmVmZXJlbmNlWyduYW1lJ11bMF0pKQ0KCQl7DQoJCQkkZGF0YVsnZXJyb3JzJ11bXSA9IFRleHQ6Ol8oJ1lvdSBuZWVkIHRvIGFkZCByZWZlcmVuY2UgbmFtZS4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSRzdG9yZSA9IGZhbHNlOw0KCQl9DQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHJlZmVyZW5jZVsnb3JnYW5pc2F0aW9uX3JlZiddWzBdKSkNCgkJew0KCQkJJGRhdGFbJ2Vycm9ycyddW10gPSBUZXh0OjpfKCdZb3UgbmVlZCB0byBhZGQgcmVmZXJlbmNlIG9yZ2FuaXNhdGlvbiBuYW1lLiA8Yj4oUmVmZXJlbmNlcyBFUlJPUiEpPC9iPicpOw0KCQkJJHN0b3JlID0gZmFsc2U7DQoJCX0NCgkJaWYgKCFpc3NldCgkcmVmZXJlbmNlWydjb3VudHJ5J11bMF0pIHx8ICRyZWZlcmVuY2VbJ2NvdW50cnknXVswXSA8PSAwKQ0KCQl7DQoJCQkkZGF0YVsnZXJyb3JzJ11bXSA9IFRleHQ6Ol8oJ1lvdSBuZWVkIHRvIGFkZCByZWZlcmVuY2UgY291bnRyeS4gPGI+KFJlZmVyZW5jZXMgRVJST1IhKTwvYj4nKTsNCgkJCSRzdG9yZSA9IGZhbHNlOw0KCQl9DQoJCWlmICgkc3RvcmUpDQoJCXsNCgkJCS8vIENyZWF0ZSBhbiBvYmplY3QgZm9yIHRoZSByZWNvcmQgd2UgYXJlIGdvaW5nIHRvIHVwZGF0ZS4NCgkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkvLyBNdXN0IGJlIGEgdmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUuDQoJCQkkb2JqZWN0LT5leHBlcnQgPSAkaWQ7DQoJCQkkb2JqZWN0LT5vcmdhbmlzYXRpb24gPSAkcmVmZXJlbmNlWydvcmdhbmlzYXRpb25fcmVmJ11bMF07DQoJCQkkb2JqZWN0LT5uYW1lID0gJHJlZmVyZW5jZVsnbmFtZSddWzBdOw0KCQkJJG9iamVjdC0+ZW1haWwgPSAkcmVmZXJlbmNlWydlbWFpbCddWzBdOw0KCQkJJG9iamVjdC0+cGhvbmUgPSAkcmVmZXJlbmNlWydwaG9uZSddWzBdOw0KCQkJJG9iamVjdC0+cG9zaXRpb24gPSAkcmVmZXJlbmNlWydwb3NpdGlvbiddWzBdOw0KCQkJJG9iamVjdC0+Y291bnRyeSA9IChpbnQpICRyZWZlcmVuY2VbJ2NvdW50cnknXVswXTsNCgkJCSRvYmplY3QtPmVtYWlsc2VuZCA9IDI7DQoNCgkJCS8vIFVwZGF0ZSB0aGVpciBkZXRhaWxzIGluIHRoZSBleHBlcnQgdGFibGUgdXNpbmcgaWQgYXMgdGhlIHByaW1hcnkga2V5Lg0KCQkJcmV0dXJuIEZhY3Rvcnk6OmdldERibygpLT5pbnNlcnRPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9jb25maXJtYXRpb24nLCAkb2JqZWN0KTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KW0NVU1RPTUNPREU9aGVscGVyRXJyb3JzXQ==', 'CS8qKg0KCSogCUxvYWQgdGhlIENvbmZpcm1hdGlvbiBBamF4IHRvIHBhZ2UNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRDb25maXJtYXRpb25BamF4KCRkb2N1bWVudCkNCgl7DQoJCS8vIGFkZCBhbiBldmVudCB0aGF0IHdpbGwgc2VuZCBvdXQgYWxsIGNvbmZpcm1hdGlvbiBlbWFpbHMsIG5vdCB5ZXQgc2VuZA0KCQkkZG9jdW1lbnQtPmFkZFNjcmlwdERlY2xhcmF0aW9uKCINCgkJCWpRdWVyeSh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJc2VuZENvbmZpcm1hdGlvbkVtYWlscygxKTsNCgkJCX0pOw0KCQkJDQoJCQlmdW5jdGlvbiBzZW5kQ29uZmlybWF0aW9uRW1haWxzKHR5cGUpIHsNCgkJCQl2YXIgZ2V0VXJsID0gJyIuVXJpOjpyb290KCkuImluZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFqYXguc2VuZENvbmZpcm1hdGlvbkVtYWlscyZmb3JtYXQ9anNvbic7DQoJCQkJaWYodHlwZSA+IDApew0KCQkJCQl2YXIgcmVxdWVzdCA9ICd0b2tlbj0iLkpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKS4iJnR5cGU9Jyt0eXBlOw0KCQkJCX0NCgkJCQlyZXR1cm4galF1ZXJ5LmFqYXgoew0KCQkJCQl0eXBlOiAnUE9TVCcsDQoJCQkJCXVybDogZ2V0VXJsLA0KCQkJCQlkYXRhVHlwZTogJ2pzb25wJywNCgkJCQkJZGF0YTogcmVxdWVzdCwNCgkJCQkJanNvbnA6ICdjYWxsYmFjaycNCgkJCQl9KTsNCgkJCX0iKTsNCgl9', '', '', '', '', '', 'CQlzZWxmOjpsb2FkQ29uZmlybWF0aW9uQWpheCgkZG9jdW1lbnQpOw==', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Expert Database', '', '', 'Expert Database (Manos)', '', '', '', 1, 'https://www.vdm.io/updates/expertdatabase_update_server.xml', 'http://www.vdm.io', '', 'zSYEoVlA9p1iyV/JrkCLRwmThI0jeYJfXizVtS48+Dbcg8C5CE8A/fZMNtJWaNvLoOrv2asyvQOQB2Vh7F/h4w==', 'https://www.vdm.io/access/', '', 2, 5, '', 1, 62), +(32, '', '', '', '', '', '', '', '', 1, '', '', '', 1, '', 1, '', '', '', '', 1, '', '', '', '', '', '', '', 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.3', 'Copyright (C) 2015. All Rights Reserved', '2017-06-16 19:13:20', '', '54Nlhb/V3NPJ/yahgAFbte09Jo8xyB7TWPRZKvhXaqM=', '40sDxN28jGZ9sFg9B24mgBQItFN9xm+qYBeE05PYVwk=', '', '41s1TWjLw/emmZi1+vw6yTm65rhbpIsVama2dtpEys0=', '', '', '', 1, '', 'The watcher that helps monitor dynamic IP changes.', 'info@vdm.io', '', '', 't17fhvVRF0sPjxpHhemffyAy+Tp52Wc0B9S1hsdKMnK5RLQoTPV1dsw5IEsofM5V', '', '9220910b-4c08-40b2-bdb2-57514a493910', 'images/vdm/DYNAMICIP500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2020-05-25 12:10:19', '', 'Dynamic IP', 'dynamicip', '', 4, '', '', '', 'W0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0NCltDVVNUT01DT0RFPWlzVmFsaWRJUF0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VmFyXygmJGtleSwgJHRhYmxlLCAkd2hlcmUgPSBudWxsLCAkd2hlcmVTdHJpbmcgPSAndXNlcicsICR3aGF0ID0gJ2lkJywgJG9wZXJhdG9yID0gJz0nLCAkbWFpbiA9ICdbW1tjb21wb25lbnRdXV0nKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCR3aGF0LCAkd2hlcmVTdHJpbmcpKSk7DQoJCWlmIChlbXB0eSgkdGFibGUpKQ0KCQl7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfXycuJG1haW4pKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fJy4kbWFpbi4nXycuJHRhYmxlKSk7DQoJCX0NCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkc2VhcmNoID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJZm9yZWFjaCAoJHNlYXJjaCBhcyAkaXRlbSkNCgkJCXsNCgkJCQlpZiAoaXNzZXQoJGl0ZW0tPnskd2hlcmVTdHJpbmd9KSAmJiAhaXNfbnVtZXJpYygkaXRlbS0+eyR3aGVyZVN0cmluZ30pICYmICRpdGVtLT57JHdoZXJlU3RyaW5nfSA9PT0gYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRpdGVtLT57JHdoZXJlU3RyaW5nfSwgdHJ1ZSkpKQ0KCQkJCXsNCgkJCQkJLy8gYmFzaWMgZGVjcnlwdCBkYXRhIHZhbHVlLg0KCQkJCQkkaXRlbS0+eyR3aGVyZVN0cmluZ30gPSBydHJpbSgka2V5LT5kZWNyeXB0U3RyaW5nKCRpdGVtLT57JHdoZXJlU3RyaW5nfSksICJcMCIpOw0KCQkJCX0NCgkJCQkvLyBzZWUgaWYgaXQgaXMgdGhpcyBvbmUNCgkJCQlpZiAoaXNzZXQoJGl0ZW0tPnskd2hlcmVTdHJpbmd9KSAmJiBpc3NldCgkaXRlbS0+eyR3aGF0fSkgJiYgJGl0ZW0tPnskd2hlcmVTdHJpbmd9ID09PSAkd2hlcmUpDQoJCQkJew0KCQkJCQlyZXR1cm4gJGl0ZW0tPnskd2hhdH07DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9', '', 'CQkvLyBHZXQgQXBwbGljYXRpb24gb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnRmlyc3Qgc2V0IHRoZSBjb21wb25lbnRzIGdsb2JhbCBzZXR0aW5ncyBhbmQgcGVybWlzc2lvbnMgaW4gdGhlIDxiPk9wdGlvbnM8L2I+IGFyZWEsIG9yIHRoZSBmcm9udC1lbmQgb2YgdGhlIGNvbXBvbmVudCB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiA8YnIgLz5QbGVhc2Ugbm90ZSB0aGF0IGVhY2ggdmlldyBvbiB0aGUgZnJvbnQtZW5kIGhhcyBhY2Nlc3MgYW5kIHBlcm1pc3Npb25zLCBzbyBpZiB5b3Ugd291bGQgbGlrZSB0aGUgcHVibGljIHRvIGFjY2VzcyB0aG9zZSB2aWV3cyB0aGV5IG11c3QgYmUgZ2l2ZW4gdGhlIGFjY2VzcyBhbmQgcGVybWlzc2lvbi4nLCAnSW5mbycpOw==', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', '', '', 'Dynamic IP', '', '', 'Dynamic IP', '.git', '', 1, 1, 'https://www.vdm.io/updates/demo_update_server.xml', 'https://www.vdm.io/', '', 'qcgAgVbJW4swWf16dQYpJw73vqPuS+NB/B+ck6XsdqE=', '', '', 1, 34, '', 1, 13), +(33, '', '', '', '', '', '', '', '', 1, '', '', '', 1, '', 1, '', '', '', '', 1, '', '', '', '', '', '{}', '', '', 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '3.0.3', 'Copyright (C) 2015. All Rights Reserved', '2016-10-18 11:44:09', '', 'o8KXSRmDTHWcqZCIQBGBEIzUWKp3gloU4rAwbGXE+5Q=', 'Dcwzi8PkJn+0a6NOGjmtWUw3JIDQGN/wJI9PPKq1OTQ=', '', 'koqQzSNiTjmHtjFu+bZEoZ6m/gsmQGHSApLDOF9n958=', '', '', '', 1, '', 'Google Plus Profile Feed.', 'joomla@vdm.io', '', 'https://vdm.bz/jcb-google-plus-profiles', 'IC9msQX0nf9zeyJ8LnlRwuo9nq+9gPDN/7MNC9tLXQ/x41kDGVsIqVlLvDKN5nCjrXskwgVR5vrm3fpMYbZ0fA==', '', 'c4e35263-cf03-4e12-9045-ad416ab613ad', 'images/vdm/GooglePlus500.jpg', '', 'https://github.com/vdm-io/JCB-Packages/raw/master/JCB_googlePlusProfileFeed.zip', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2020-07-28 00:11:26', 2, 'Google Plus Profiles', 'googleplusprofile', '', 4, '', '', '', 'W0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0=', '', 'CQkvLyBHZXQgQXBwbGljYXRpb24gb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnRmlyc3Qgc2V0IHRoZSBjb21wb25lbnRzIGdsb2JhbCBzZXR0aW5ncyBhbmQgcGVybWlzc2lvbnMgaW4gdGhlIDxiPk9wdGlvbnM8L2I+IGFyZWEsIG9yIHRoZSBmcm9udC1lbmQgb2YgdGhlIGNvbXBvbmVudCB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiA8YnIgLz5QbGVhc2Ugbm90ZSB0aGF0IGVhY2ggdmlldyBvbiB0aGUgZnJvbnQtZW5kIGhhcyBhY2Nlc3MgYW5kIHBlcm1pc3Npb25zLCBzbyBpZiB5b3Ugd291bGQgbGlrZSB0aGUgcHVibGljIHRvIGFjY2VzcyB0aG9zZSB2aWV3cyB0aGV5IG11c3QgYmUgZ2l2ZW4gdGhlIGFjY2VzcyBhbmQgcGVybWlzc2lvbi4nLCAnSW5mbycpOw==', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Google Plus Profile Feed.', '', '', 'Google Plus Profiles (public)', '.git', '', 1, 1, 'https://www.vdm.io/updates/google_plus_profile_server.xml', 'https://www.vdm.io/', '', 'DLskP0PGQKG9Zbggb/uWlfr3MMzyMJsMuuwsGMcr7KE=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 85, '', 1, 14), +(34, '', '', '', '', 1, '', '', '', 1, '', '', 1, '', '', 1, '', 1, '', '', 1, '', '', '', '', '', '', '', 1, 1, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.1', 'Copyright (C) 2015. All Rights Reserved', '2017-07-17 10:38:15', '', '', '', '', '', '', '', '', 1, '', 'The Sync Portal that helps synchronization of data across multiple databases.', 'info@vdm.io', '', '', 'qqDFvORZ7GJ/mZpJbbg3wdmHk5u2AGSiHN+BOV8XuExPRj6zvjNi8CHf5R6RveTMusOYhval993w7PsFEZ7mng==', '', 'd51f4a4a-d524-4458-8c27-7f3ee458d36a', 'images/vdm/SYNC500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2018-02-22 15:15:30', '', 'Sync Portal', 'syncportal', '', 4, '', '', 'CXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCltDVVNUT01DT0RFPWNvbmZpcm1UcnVzdCt0cnVzdF9zaXRlLFZETV0NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN5bmNVcmwoJHN5c3RlbSwgJHR5cGUgPSAndHJ1c3QnKQ0KCXsNCgkJLy8gYnVpbGQgdGhlIHN5bmMgdXJsIHRvIHF1ZXJ5DQoJCXN3aXRjaCAoJHN5c3RlbVsnbGlua190eXBlJ10pDQoJCXsNCgkJCWNhc2UgMToNCgkJCQkvLyBJUA0KCQkJCWlmICgyID09ICRzeXN0ZW1bJ2lwX3R5cGUnXSAmJiBzZWxmOjppc1ZhbGlkSVAoJHN5c3RlbVsnaXAnXSkpDQoJCQkJew0KCQkJCQkvLyBzZXQgdGhlIFN0YXRpYyBJUA0KCQkJCQkkdXJsID0gJ2h0dHA6Ly8nIC4gdHJpbSgkc3lzdGVtWydpcCddKTsNCgkJCQl9DQoJCQkJZWxzZWlmICgxID09ICRzeXN0ZW1bJ2lwX3R5cGUnXSkNCgkJCQl7DQoJCQkJCS8vIG11c3Qgc3RpbGwgYnVpbGQgdGhpcw0KCQkJCX0NCgkJCWJyZWFrOw0KCQkJY2FzZSAyOg0KCQkJCS8vIERPTUFJTg0KCQkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc3lzdGVtWyd1cmwnXSkpDQoJCQkJew0KCQkJCQkkdXJsID0gdHJpbSgkc3lzdGVtWyd1cmwnXSwgJy8nKTsNCgkJCQl9DQoJCQlicmVhazsNCgkJfQ0KCQkvLyBjaGVjayBpZiBhIHVybCB3YXMgZm91bmQNCgkJaWYgKGlzc2V0KCR1cmwpKQ0KCQl7DQoJCQkvLyByZXR1cm4gdGhlIHVybA0KCQkJcmV0dXJuICR1cmwgLiAnL2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ0YXNrPWFwaS4nIC4gJHR5cGU7DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc3luY1RhYmxlc0F2YWlsYWJsZSgkdGFibGVzKQ0KCXsNCgkJLy8gZ2V0IHRoZSB3YXRjaGVyIG1vZGVsDQoJCSRtb2RlbCA9IHNlbGY6OmdldE1vZGVsKCd3YXRjaGVycycsIEpQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SKTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgcGxhY2UgaG9sZGVycw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGxhY2VIb2xkZXJzKCR0eXBlKQ0KCXsNCgkJaWYgKCd0cnVzdF9yZXF1ZXN0JyA9PSAkdHlwZSkNCgkJew0KCQkJJGYgPSAnWyc7DQoJCQkkYiA9ICddJzsNCgkJCSRwbGFjZWhvbGRlciA9IGFycmF5KCk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5X2tleXMoc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJykpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBzZWxmOjpnZXRTZWxlY3Rpb24oJ3RydXN0X3JlcXVlc3QnLCAkZiwgJGIpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2NvbmZpcm1hdGlvbl9saW5rXScpOw0KCQkJcmV0dXJuICBzZWxmOjptZXJnZUFycmF5cygkcGxhY2Vob2xkZXIpOw0KCQl9DQoJCWVsc2VpZiAoJ3RydXN0X2NvbmZpcm0nID09ICR0eXBlKQ0KCQl7DQoJCQkkZiA9ICdbJzsNCgkJCSRiID0gJ10nOw0KCQkJJHBsYWNlaG9sZGVyID0gYXJyYXkoKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXlfa2V5cyhzZWxmOjpnZXRDb21wYW55RGV0YWlscygncGxhY2Vob2xkZXInKSk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IHNlbGY6OmdldFNlbGVjdGlvbigndHJ1c3RfY29uZmlybScsICRmLCAkYik7DQoJCQlyZXR1cm4gIHNlbGY6Om1lcmdlQXJyYXlzKCRwbGFjZWhvbGRlcik7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCU9uY2UgdGhlIGVtYWlsIHdhcyBzZW5kIHRoZSBnaXZlcyB1cyB0aGUgb3B0aW9uIHRoZSBzdG9yZSB0aGUgbWFzc2FnZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RvcmVNZXNzYWdlKCRzZW5kbWFpbCwgJHJlY2lwaWVudCwgJHN1YmplY3QsICRib2R5LCAkdGV4dG9ubHksICRtb2RlLCAkdHlwZSkNCgl7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogUmV0dXJuIGFycmF5IG9mIHNlbGVjdGlvbnMNCgkqIA0KCSogQHJldHVybiAgICBhcnJheSBpZiB0eXBlIG1hdGNoDQoJKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGVjdGlvbigkdHlwZSwgJGYsICRiKQ0KCXsNCgkJaWYgKCd0cnVzdF9yZXF1ZXN0JyA9PSAkdHlwZSkNCgkJew0KCQkJcmV0dXJuIGFycmF5KA0KCQkJCSdhLmNoYWluJyA9PiAkZi4nY2hhaW4nLiRiLAkNCgkJCQknYS51cmwnID0+ICRmLid1cmwnLiRiLA0KCQkJCSdhLnBhdGgnID0+ICRmLidwYXRoJy4kYiwNCgkJCQknYS5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYiwNCgkJCQknYS5uYW1lJyA9PiAkZi4nbmFtZScuJGIsDQoJCQkJJ2EubWV0aG9kJyA9PiAkZi4nbWV0aG9kJy4kYiwNCgkJCQknYS5yZXF1ZXN0X2lkJyA9PiAkZi4ncmVxdWVzdF9pZCcuJGINCgkJCSk7DQoJCX0NCgkJZWxzZWlmICgndHJ1c3RfY29uZmlybScgPT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheSgNCgkJCQknYS51cmwnID0+ICRmLid1cmwnLiRiLA0KCQkJCSdhLnBhdGgnID0+ICRmLidwYXRoJy4kYiwNCgkJCQknYS5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYiwNCgkJCQknYS5uYW1lJyA9PiAkZi4nbmFtZScuJGIsDQoJCQkJJ2EudHJ1c3RrZXknID0+ICRmLid0cnVzdGtleScuJGIsDQoJCQkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN5bmNDaGFpbigkaWQpDQoJew0KCQkvLyBsb2FkIHRoZSBidWNrZXQNCgkJJGJ1Y2tldCA9IGFycmF5KCk7DQoJCS8vIGZpcnN0IGdldCBhbGwgR2F0ZXdheXMgTGlua2VkIHRvIHN5bmMgc2l0ZQ0KCQkkbW9kZWwgPSBzZWxmOjpnZXRNb2RlbCgnc3luY19zaXRlJywgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IpOw0KCQkkbW9kZWwtPnN5bmNfc2l0ZXZ2dnYgPSAkaWQ7DQoJCS8vIG5vdyBnZXQgYWxsIHdhdGNoZXJzIGxpbmtlZCB0byBnYXRld2F5cw0KCQlpZiAoJGdhdGVXYXlzID0gJG1vZGVsLT5nZXRWdnlnYXRld2F5cygpKQ0KCQl7DQoJCQlmb3JlYWNoICgkZ2F0ZVdheXMgYXMgJGdhdGUpDQoJCQl7DQoJCQkJLy8gbWFrZSBzdXJlIHRvIGNvbnZlcnQgaWYgbmVlZGVkDQoJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRnYXRlLT5oYXNoZXMpKQ0KCQkJCXsNCgkJCQkJJGdhdGUtPmhhc2hlcyA9IGpzb25fZGVjb2RlKCRnYXRlLT5oYXNoZXMsIHRydWUpOw0KCQkJCX0NCgkJCQkvLyBtYWtlIHN1cmUgaXQgaXMgYXJyYXkNCgkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdhdGUtPmhhc2hlcykpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkZ2F0ZS0+aGFzaGVzIGFzICRnZXQpDQoJCQkJCXsNCgkJCQkJCSR3YXRjaGVycyA9IHNlbGY6OmdldFZhcignd2F0Y2hlcicsICRnZXRbJ3dhdGNoZXInXSwgJ2lkJywgJ2hhc2hlcycpOw0KCQkJCQkJLy8gbWFrZSBzdXJlIHRvIGNvbnZlcnQgaWYgbmVlZGVkDQoJCQkJCQlpZiAoU3VwZXJfX180YjIyNWM1MV9kMjkzXzQ4ZTRfYjNmNl81MTM2Y2Y1YzNmMThfX19Qb3dlcjo6Y2hlY2soJHdhdGNoZXJzKSkNCgkJCQkJCXsNCgkJCQkJCQkkd2F0Y2hlcnMgPSBqc29uX2RlY29kZSgkd2F0Y2hlcnMsIHRydWUpOw0KCQkJCQkJfQ0KCQkJCQkJLy8gbWFrZSBzdXJlIGl0IGlzIGFycmF5DQoJCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHdhdGNoZXJzKSkNCgkJCQkJCXsNCgkJCQkJCQlmb3JlYWNoICgkd2F0Y2hlcnMgYXMgJHdhdGNoZXIpDQoJCQkJCQkJew0KCQkJCQkJCQkvLyBub3cgZ2V0IGFsbCB0YWJsZXMgbGlua2VkIHRvIHdhdGNoZXJzDQoJCQkJCQkJCSRuYW1lID0gc2VsZjo6Z2V0VmFyKCd0YWJsZScsICR3YXRjaGVyWyd0YWJsZSddLCAnaWQnLCAnbmFtZScpOw0KCQkJCQkJCQkkYnVja2V0WyRuYW1lXSA9IGFycmF5KCduYW1lJyA9PiAkbmFtZSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIGlmIGZvdW5kIHRhYmxlcw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGJ1Y2tldCkpDQoJCXsNCgkJCS8vIHNvcnQgYnkgdGFibGUgbmFtZQ0KCQkJa3NvcnQoJGJ1Y2tldCk7DQoJCQkvLyBsb2FkIHRoZSBjaGFpbg0KCQkJJGNoYWluID0gYXJyYXkoKTsNCgkJCSRjb3VudGVyID0gMDsNCgkJCWZvcmVhY2ggKCRidWNrZXQgYXMgJGFycmF5KQ0KCQkJew0KCQkJCSRjaGFpblsnY2hhaW4nLiRjb3VudGVyXSA9ICRhcnJheTsNCgkJCQkkY291bnRlcisrOw0KCQkJfQ0KCQkJcmV0dXJuICRjaGFpbjsNCgkJfQ0KCQkvLyBub25lIGZvdW5kDQoJCXJldHVybiBudWxsOw0KCX0NCltDVVNUT01DT0RFPWdldFRlbXBsYXRlXQ0KW0NVU1RPTUNPREU9bWRzaXhdDQpbQ1VTVE9NQ09ERT1nZXRDb21wYW55RGV0YWlsc10NCltDVVNUT01DT0RFPWN1cmxXb3JrZXJIZWxwZXJdDQpbQ1VTVE9NQ09ERT1iYXNlU2l4dHlGb3VyVVJMXQ0KW0NVU1RPTUNPREU9d3JpdGVGaWxlXQ0KW0NVU1RPTUNPREU9c2V0SGlkZGVuRmlsZV0NCltDVVNUT01DT0RFPWxvY2tlcl0NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQpbQ1VTVE9NQ09ERT1pc1ZhbGlkSVBdDQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXQ==', '', '', 'CQkvLyBHZXQgQXBwbGljYXRpb24gb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnPGgxPkhvdyBpdCB3b3JrczwvaDE+PHA+UGxlYXNlIHdhdGNoIHRoZSBmb2xsb3dpbmcgPGEgaHJlZj0iIyIgdGFyZ2V0PSJfYmxhbmsiPnR1dG9yaWFsPC9hPiBiZWZvcmUgeW91IGNvbnRpbnVlLiBUaGlzIHdpbGwgaW5zdXJlIHRoYXQgeW91IGZ1bGwgdW5kZXJzdGFuZCBob3cgaXQgd29ya3MgYW5kIGF2b2lkIGNvcnJ1cHRpb24gb2YgeW91IGRhdGEuPC9wPicsICdJbmZvJyk7', '', 'CQkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY3VybCBpbnN0YWxsZWQNCgkJCWlmICghZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnRXJyb3IhIEN1cmwgbm90IGZvdW5kISBDdXJsIGlzIHJlcXVpcmVkIHRvIHJ1biB0aGUgc3luYyBvcGVyYXRpb25zLCB3aXRob3V0IGl0IHdlIGNhbiBub3QgY29udGludWUuJywgJ2Vycm9yJyk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', '', '', 'Sync Portal', '', '', 'Sync Portal', '.git', '', '', 1, 'https://www.vdm.io/updates/demo_update_server.xml', 'https://www.vdm.io/', '', '3NkQKoYfIUTod/HWu93LdYEEjTyf7G5ti0El5QJRaqM=', '', '', 1, 127, '', 1, 16), +(35, '', '', '', '', 1, '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, 1, '', '', '', 1, '{}', 3, 1, 3, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.8', 'Copyright (C) 2015. All Rights Reserved', '2018-02-26 15:27:39', '', 'AIEdncGGYhXwT3K9riCVHj77bZdow5JNzfd5v/JFWRE=', '+qzH++P20Vn9Lu6rDFk8Guugn5VHGPApQXV92hIl21o=', '', 'VxGjDkRxSYPEI0CbN5lPWPGZMuMBwE7dh48Jb4AZxn0=', '', '', '', 1, '', 'Certification Authority', 'joomla@vdm.io', '', '', 'VMTs0q3O6q5SP+sxS2o2+28AeqDNOJbwXric5PkFxS8yVHU+7K9o8XeGgIDrcW4xHSw5dCLESW4Rnadyr4OAXg==', '', '679e64b0-9d16-42df-a5ca-87e1de35c2a9', 'images/vdm/CA500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2021-03-08 03:12:42', 2, 'Certification Authority', 'CertificationAuthority', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29uZmlybVRydXN0K3RydXN0X3BvcnRhbCxKQ0JdDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTeW5jVXJsKCRzeXN0ZW0sICR0eXBlID0gJ3RydXN0JykNCgl7DQoJCS8vIGJ1aWxkIHRoZSBzeW5jIHVybCB0byBxdWVyeQ0KCQlzd2l0Y2ggKCRzeXN0ZW1bJ2xpbmtfdHlwZSddKQ0KCQl7DQoJCQljYXNlIDE6DQoJCQkJLy8gSVANCgkJCQlpZiAoMiA9PSAkc3lzdGVtWydpcF90eXBlJ10gJiYgc2VsZjo6aXNWYWxpZElQKCRzeXN0ZW1bJ2lwJ10pKQ0KCQkJCXsNCgkJCQkJLy8gc2V0IHRoZSBTdGF0aWMgSVANCgkJCQkJJHVybCA9ICdodHRwOi8vJyAuIHRyaW0oJHN5c3RlbVsnaXAnXSk7DQoJCQkJfQ0KCQkJCWVsc2VpZiAoMSA9PSAkc3lzdGVtWydpcF90eXBlJ10pDQoJCQkJew0KCQkJCQkvLyBtdXN0IHN0aWxsIGJ1aWxkIHRoaXMNCgkJCQl9DQoJCQlicmVhazsNCgkJCWNhc2UgMjoNCgkJCQkvLyBET01BSU4NCgkJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHN5c3RlbVsndXJsJ10pKQ0KCQkJCXsNCgkJCQkJJHVybCA9IHRyaW0oJHN5c3RlbVsndXJsJ10sICcvJyk7DQoJCQkJfQ0KCQkJYnJlYWs7DQoJCX0NCgkJLy8gY2hlY2sgaWYgYSB1cmwgd2FzIGZvdW5kDQoJCWlmIChpc3NldCgkdXJsKSkNCgkJew0KCQkJLy8gcmV0dXJuIHRoZSB1cmwNCgkJCXJldHVybiAkdXJsIC4gJy9pbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1hcGkuJyAuICR0eXBlOw0KCQl9DQoJCXJldHVybiAnJzsNCgl9DQoNCgkvKioNCgkqIAlnZXQgcGxhY2UgaG9sZGVycw0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGxhY2VIb2xkZXJzKCR0eXBlKQ0KCXsNCgkJaWYgKCd0cnVzdF9yZXF1ZXN0JyA9PSAkdHlwZSkNCgkJew0KCQkJJGYgPSAnWyc7DQoJCQkkYiA9ICddJzsNCgkJCSRwbGFjZWhvbGRlciA9IGFycmF5KCk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IGFycmF5X2tleXMoc2VsZjo6Z2V0Q29tcGFueURldGFpbHMoJ3BsYWNlaG9sZGVyJykpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBzZWxmOjpnZXRTZWxlY3Rpb24oJ3RydXN0X3JlcXVlc3QnLCAkZiwgJGIpOw0KCQkJJHBsYWNlaG9sZGVyW10gPSBhcnJheSgnW2NvbmZpcm1hdGlvbl9saW5rXScpOw0KCQkJcmV0dXJuICBzZWxmOjptZXJnZUFycmF5cygkcGxhY2Vob2xkZXIpOw0KCQl9DQoJCWVsc2VpZiAoJ3RydXN0X2NvbmZpcm0nID09ICR0eXBlKQ0KCQl7DQoJCQkkZiA9ICdbJzsNCgkJCSRiID0gJ10nOw0KCQkJJHBsYWNlaG9sZGVyID0gYXJyYXkoKTsNCgkJCSRwbGFjZWhvbGRlcltdID0gYXJyYXlfa2V5cyhzZWxmOjpnZXRDb21wYW55RGV0YWlscygncGxhY2Vob2xkZXInKSk7DQoJCQkkcGxhY2Vob2xkZXJbXSA9IHNlbGY6OmdldFNlbGVjdGlvbigndHJ1c3RfY29uZmlybScsICRmLCAkYik7DQoJCQlyZXR1cm4gIHNlbGY6Om1lcmdlQXJyYXlzKCRwbGFjZWhvbGRlcik7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSogCU9uY2UgdGhlIGVtYWlsIHdhcyBzZW5kIHRoZSBnaXZlcyB1cyB0aGUgb3B0aW9uIHRoZSBzdG9yZSB0aGUgbWFzc2FnZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RvcmVNZXNzYWdlKCRzZW5kbWFpbCwgJHJlY2lwaWVudCwgJHN1YmplY3QsICRib2R5LCAkdGV4dG9ubHksICRtb2RlLCAkdHlwZSkNCgl7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSogUmV0dXJuIGFycmF5IG9mIHNlbGVjdGlvbnMNCgkqIA0KCSogQHJldHVybiAgICBhcnJheSBpZiB0eXBlIG1hdGNoDQoJKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGVjdGlvbigkdHlwZSwgJGYsICRiKQ0KCXsNCgkJaWYgKCd0cnVzdF9yZXF1ZXN0JyA9PSAkdHlwZSkNCgkJew0KCQkJcmV0dXJuIGFycmF5KA0KCQkJCSdhLmNoYWluJyA9PiAkZi4nY2hhaW4nLiRiLAkNCgkJCQknYS51cmwnID0+ICRmLid1cmwnLiRiLA0KCQkJCSdhLnBhdGgnID0+ICRmLidwYXRoJy4kYiwNCgkJCQknYS5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYiwNCgkJCQknYS5uYW1lJyA9PiAkZi4nbmFtZScuJGIsDQoJCQkJJ2EubWV0aG9kJyA9PiAkZi4nbWV0aG9kJy4kYiwNCgkJCQknYS5yZXF1ZXN0X2lkJyA9PiAkZi4ncmVxdWVzdF9pZCcuJGINCgkJCSk7DQoJCX0NCgkJZWxzZWlmICgndHJ1c3RfY29uZmlybScgPT0gJHR5cGUpDQoJCXsNCgkJCXJldHVybiBhcnJheSgNCgkJCQknYS51cmwnID0+ICRmLid1cmwnLiRiLA0KCQkJCSdhLnBhdGgnID0+ICRmLidwYXRoJy4kYiwNCgkJCQknYS5lbWFpbCcgPT4gJGYuJ2VtYWlsJy4kYiwNCgkJCQknYS5uYW1lJyA9PiAkZi4nbmFtZScuJGIsDQoJCQkJJ2EudHJ1c3RrZXknID0+ICRmLid0cnVzdGtleScuJGIsDQoJCQkpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN5bmNDaGFpbigkaWQpDQoJew0KCQkvLyBub25lIGZvdW5kDQoJCXJldHVybiBudWxsOw0KCX0NCltDVVNUT01DT0RFPWdldENvbXBhbnlEZXRhaWxzXQ0KW0NVU1RPTUNPREU9YmFzZVNpeHR5Rm91clVSTF0NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQpbQ1VTVE9NQ09ERT1nZXRUZW1wbGF0ZV0gDQpbQ1VTVE9NQ09ERT1tZHNpeF0NCltDVVNUT01DT0RFPWN1cmxXb3JrZXJIZWxwZXJdDQpbQ1VTVE9NQ09ERT1sb2NrZXJdDQpbQ1VTVE9NQ09ERT11cmxFeGlzdHNdDQpbQ1VTVE9NQ09ERT1nZXRGaWxlUGF0aF0NCltDVVNUT01DT0RFPWdldEZvbGRlclBhdGhdDQpbQ1VTVE9NQ09ERT1nZXRGaWxlQ29udGVudHNdDQpbQ1VTVE9NQ09ERT1jb21wb3NlVkVORE9SK3BocHNlY2xpYl0NCltDVVNUT01DT0RFPWNyeXB0XQ==', '', '', '', '', '', '', '', 'IyBKb29tbGEgIyMjQ29tcG9uZW50X25hbWUjIyMgKEpDQikNClshW0dpdEh1YiByZWxlYXNlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9yZWxlYXNlL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvcmVsZWFzZXMpIFshW1RvdGFsIERvd25sb2Fkc10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvZG93bmxvYWRzL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvdG90YWwuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvcmVsZWFzZXMpDQoNClRoaXMgaXMgYSBbSm9vbWxhIDMueF0oaHR0cHM6Ly9leHRlbnNpb25zLmpvb21sYS5vcmcvZXh0ZW5zaW9uL2NvbXBvbmVudC1idWlsZGVyLykgY29tcG9uZW50LiBbX19TZWUgSW4gQWN0aW9uX19dKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9SVFmc0xZSWVibGsmbGlzdD1QTFFSR0ZJOFhaX3d0R3ZQUVpXQmZEenpsRVJMUWdwTVJFJmluZGV4PTQ1KQ0KDQogIVsjIyNDb21wb25lbnRfbmFtZSMjIyBpbWFnZV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3ZkbS1pby9Kb29tbGEtQ29tcG9uZW50LUJ1aWxkZXIvbWFzdGVyL2FkbWluL2Fzc2V0cy9pbWFnZXMvdmRtLWNvbXBvbmVudC5qcGcgIlRoZSAjIyNDb21wb25lbnRfbmFtZSMjIyIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCllvdSBjYW4gaW5zdGFsbCBpdCBxdWl0ZSBlYXNpbHkgYW5kIHdpdGggbm8gbGltaXRhdGlvbnMuIE9uIFtnaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3JlbGVhc2VzKSBpcyB0aGUgbGF0ZXN0IHJlbGVhc2UgKCMjI0FDVFVBTFZFUlNJT04jIyMpIHdpdGggKipBTEwqKiBpdHMgZmVhdHVyZXMgYW5kICoqQUxMKiogY29uY2VwdHMgdG90YWxseSBvcGVuLXNvdXJjZSBhbmQgZnJlZSEgDQoNCj4gV2F0Y2ggUXVpY2sgQnVpbGQgb2YgYSBIZWxsbyBXb3JsZCBjb21wb25lbnQgaW4gW0pDQiBvbiBZb3V0dWJlXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUlRZnNMWUllYmxrJmxpc3Q9UExRUkdGSThYWl93dEd2UFFaV0JmRHp6bEVSTFFncE1SRSZpbmRleD00NSkNCg0KT25jZSBpbnN0YWxsZWQgdXBncmFkZXMgYXJlIHF1aWNrIGFuZCBlYXN5IHZpYSB0aGUgZGVmYXVsdCBKb29tbGEgdXBncmFkZSBhcmVhLg0KDQpTb21lIG9mIHRoZSBGZWF0dXJlcw0KPT09PT09PT09PT09PT09PT09PT0NCg0KKyBBZGRpbmcgbXlTUUwgRHVtcCB0byBhbnkgVmlldy9UYWJsZS4NCisgR3JhYiBleGlzdGluZyBUYWJsZSBkYXRhIGFuZCBidWlsZCBhIGR5bmFtaWMgZHVtcC4NCisgVW5saW1pdGVkIEpvb21sYSBDb21wb25lbnRzLg0KKyBVbmxpbWl0ZWQgVGFibGVzL1ZpZXdzLg0KKyBSZXVzaW5nIFZpZXdzIGFuZCBGaWVsZHMuDQorIFJ1bnMgb24gWW91ciBPd24gSm9vbWxhIEluc3RhbGwuDQorIEFkZCBEeW5hbWljL2N1c3RvbSBiYWNrLWVuZCB2aWV3cyB0aGF0IHVzZXMgVGFibGUgYW5kIENoYXJ0IHJlc3VsdCBzZXRzLg0KKyBCdWlsZCBkYXRhIHF1ZXJ5IG9mIGV4dHJlbWUgY29tcGxleCBuYXR1cmUgdG8gdXNlIGluIER5bmFtaWMvY3VzdG9tIHZpZXdzLg0KKyBIaWdobHkgRHluYW1pYy9jdXN0b20gRnJvbnQtZW5kIFN0cnVjdHVyZXMuDQorIER5bmFtaWNhbGx5IHNldHVwIHRlbXBsYXRlcyBhbmQgbGF5b3V0cyBmb3IgRnJvbnQtZW5kIGRlc2lnbi4NCisgSW50ZWdyYXRpb24gb2YgdGhlIGV4Y2VsbGVudCBVSUtJVCBsaWIuDQorIEludGVncmF0aW9uIG9mIHRoZSBleGNlbGxlbnQgRk9PVEFCTEUgbGliLg0KKyBBbGwgSm9vbWxhIFN0YW5kYXJkIEZpZWxkIFR5cGVzIChpbmNsdWRpbmcgcmVwZWF0YWJsZSBmaWVsZHMpLg0KKyBTdHJvbmcgSW1wbGVtZW50YXRpb24gb2YgYWxsIEpvb21sYSBGb3JtIFNlY3VyaXR5Lg0KKyBMb2FkIGRhdGEgdmlhIGFqYXggd2l0aCBlYXNlLg0KKyBZb3UgY2FuIGFkZCBhbiBVcGRhdGUgU2VydmVyIHRvIENvbXBvbmVudHMgeW91IGJ1aWxkLg0KKyBCdWlsZCBhZHZhbmNlZCBEeW5hbWljIGZyb250LWVuZCBmb3Jtcy4NCisgRHluYW1pYyBkYXRhIHF1ZXJpZXMgZnJvbSBtdWx0aXBsZSB0YWJsZXMuDQorIFBsYWNlIGluIGxvY2FsIEdJVCBmb2xkZXIsIGFuZCBwdWJsaXNoIHRvIHNhbGVzIHNlcnZlci4NCisgSW5jbHVkZSBhbnkgYW1vdW50IG9mIGN1c3RvbSBmaWxlcyBhbmQgZm9sZGVycyBkdXJpbmcgYnVpbGQuDQorIFN0YXRpYyBoZWxwZXIgY2xhc3Mgd2l0aCBzbWFydCBtZXRob2RzIGFscmVhZHkgaW5jbHVkZWQuDQorIFN0YXRpYyBoZWxwZXIgbWV0aG9kcyBDYW4gZWFzaWx5IGJlIGFkZGVkLg0KKyBEaXJlY3QgaW5zdGFsbCBmcm9tIGNvbXBsaWVyIHZpZXcuDQorIEludGVncmF0aXZlIHdpdGggbmF0aXZlIEpvb21sYSBDYXRlZ29yaWVzIGFuZCBUYWdzLg0KKyBGdWxseSBEeW5hbWljIFNlYXJjaCBGcmllbmRseSBVUkwgQXV0byBJbXBsZW1lbnRhdGlvbi4NCisgQ3VzdG9tIHNjcmlwdGluZyBvcHRpb25zIGFsbCBvdmVyIHRoZSBNVkMgc3RydWN0dXJlLg0KKyBQZXJtaXNzaW9uIGltcGxlbWVudGF0aW9uIGRvd24gdG8gZWFjaCB2aWV3LCBpdGVtIGFuZCBmaWVsZC4NCisgRWFzeSBleHRlbmRpYmxlIHRvIGluY2x1ZGUgb3RoZXIgbGlicmFyaWVzLg0KKyBDYW4gaW5jbHVkZSBTUUwgYW5kIHZpc2lvbmluZyB1cGRhdGUgbGluayB0byBkaXN0cmlidXRlIHlvdXIgY29tcG9uZW50IHVwZGF0ZXMgdmlhIEpvb21sYSBkZWZhdWx0IHVwZ3JhZGUgb2YgY29tcG9uZW50cy4NCisgRWFzeSBFeHBvcnQgJiBJbXBvcnQgYWRkb24gdG8gYWxsIGJhY2tlbmQtdGFibGVzLg0KKyBPdmVycmlkaW5nIGFiaWxpdHkgb2YgaW1wb3J0IGNvbmNlcHRzIGluIGFsbCBiYWNrZW5kLXRhYmxlcy4NCisgVGhlIEJhdGNoIGFuZCBGaWx0ZXIgaW1wbGVtZW50YXRpb24gb24gYWxsIGJhY2tlbmQtbGlzdCB2aWV3cy4NCisgVGhpcyBhbmQgbXVjaCBtdWNoIG1vcmUgYXJlIGFsbCBwb3NzaWJsZSB3aXRoIHRoaXMgY29tcG9uZW50IGJ1aWxkZXIhDQoNCkp1c3QgSW1hZ2luZQ0KPT09PT09PT09PT09PT09PT09PT0NCg0KKyBZb3VyIENvbXBvbmVudCBCYWNrLWVuZCBjYW4gYmUgbW9yZSBhZHZhbmNlZCB0aGVuIHRoZSBKb29tbGEgQXJ0aWNsZSBNYW5hZ2VyLg0KKyBZb3VyIENvZGUgYXMgUGVyZmVjdGx5IFVuaWZpZWQgdG8gdGhlIHN0cmljdCBKb29tbGEgU3RhbmRhcmRzLg0KKyBBZGRpbmcgQ3VzdG9tIFNjcmlwdGluZyBhbG1vc3QgYW55d2hlcmUgaW4gdGhlIE1WQyBzdHJ1Y3R1cmUuDQorIEltcG9ydCBhbmQgZXhwb3J0IGZlYXR1cmUgdG8gYWxsIGJhY2tlbmQtdmlld3MuDQorIEJhdGNoIGNvcHkgYW5kIG1vdmUvdXBkYXRlIGZlYXR1cmUgZm9yIGFsbCBiYWNrZW5kLXZpZXdzLg0KKyBIaXN0b3J5IHRyYWNraW5nIHBlci9jaGFuZ2UgbWFkZSBvbiBhbnkgYmFjay1lbmQgaXRlbS4NCisgRHluYW1pYyBmaWVsZCBjb250cm9sLCB0byBzaG93IGFuZCBoaWRlIGZpZWxkcyBpbiBhbWF6aW5nIHdheXMuDQorIEZyb250LWVuZCBmcmVlZG9tIG9mIGRlc2lnbiB0aGF0IGFsbG93cyBmb3IgYW55IGxpYnJhcnkgdG8gYmUgdXNlZC4NCisgVGhpcyBhbmQgbXVjaCBtdWNoIG1vcmUgYXJlIGFsbCBwb3NzaWJsZSB3aXRoIHRoaXMgY29tcG9uZW50IGJ1aWxkZXIhDQoNCllvdSBhcmUgaW4gQ29udHJvbA0KPT09PT09PT09PT09PT09PT09PT0NCg0KKyBZb3UgY2FuIGNoYW5nZSB0aGUgbGljZW5zaW5nIHRlbXBsYXRlIGZvciB5b3VyIGNvbXBvbmVudHMuDQorIFlvdSBjYW4gY2hhbmdlL2ltcHJvdmUgZXhpc3RpbmcgZmllbGQgdHlwZXMgYW5kIGFkZCBtb3JlLg0KKyBMaW5lIG51bWJlcnMgdG8gc2hvdyB3aGVyZSBpbiBjb21waWxlciB3YXMgdGhlIGNvZGUgYnVpbGQuDQorIFlvdSBjYW4gaW1wcm92ZSB0aGUgY29tcG9uZW50IHNpbmNlIGFsbCBjb2RlIGFyZSBvcGVuLXNvdXJjZS4NCisgRnJlZSB1cGRhdGVzIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2plY3QuDQorIFlvdSBjYW4gZHluYW1pY2FsbHkgYWRkIGludGVybmFsIGhlbHAgc3RydWN0dXJlcyB0byBhbGwgY29tcG9uZW50Lg0KKyBUaGVyZSBpcyBubyBsaW1pdGF0aW9ucyBvbiBob3cgYmlnIG9yIGhvdyBtdWNoIHlvdSB3YW50IHRvIGJ1aWxkIChzZXJ2ZXIgbGltaXRhdGlvbiBvbmx5KS4NCisgVGhpcyBpcyBhIGNvbXBsZXRlIGZhY3Rvcnkga2luZCBvZiBjb21wb25lbnQgdGhhdCBmdW5jdGlvbnMgbGlrZSBhIGRlcGxveW1lbnQgaHViLg0KKyBFeHBvcnQgYW55IGNvbXBvbmVudCBjb21wbGV0ZWx5IG1hcHBlZCBpbiBKQ0IgYW5kIGltcG9ydCBpbnRvIGFub3RoZXIgSkNCLg0KKyBUaGlzIGFuZCBtdWNoIG11Y2ggbW9yZSBhcmUgYWxsIHBvc3NpYmxlIHdpdGggdGhpcyBjb21wb25lbnQgYnVpbGRlciENCg0KR2V0IE1vcmUgRGVtbyBDb250ZW50DQo9PT09PT09PT09PT09PT09PT09PQ0KDQo+ICoqWW91IGNhbiBwdXJjaGFzZSBtb3JlIFtkZW1vIGNvbnRlbnRdKGh0dHA6Ly92ZG0uYnovamNiLXBhY2thZ2VzKSBmb3IgIyMjQ29tcG9uZW50X25hbWUjIyM6KioNCg0KKyAqRGVtbyBDb21wb25lbnQqIHNlZSB0aGUgYnVpbGQgb24gW2dpdGh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL25hbWliaWEvZGVtby1qb29tbGEtMy1jb21wb25lbnQpIG9yIGdldCB0aGUgW0pDQiBQYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pDQi1QYWNrYWdlcy9yYXcvbWFzdGVyL0pDQl9kZW1vLnppcCkgXyhmcmVlKV8NCisgKkFkdmFuY2UgRGVtbyBDb21wb25lbnQqIGdldCB0aGUgW0pDQiBQYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pDQi1QYWNrYWdlcy9yYXcvbWFzdGVyL0pDQl9kZW1vQWR2YW5jZWQuemlwKSBfKFtidXkga2V5XShodHRwOi8vdmRtLmJ6L2dldC1hZHZhbmNlLWRlbW8ta2V5KSlfDQorICpTZXJtb24gRGlzdHJpYnV0b3IqIHNlZSB0aGUgYnVpbGQgb24gW2dpdGh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL1Nlcm1vbkRpc3RyaWJ1dG9yL0pvb21sYS0zLUNvbXBvbmVudCkgb3IgZ2V0IHRoZSBbSkNCIFBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSkNCLVBhY2thZ2VzL3Jhdy9tYXN0ZXIvSkNCX3Nlcm1vbmRpc3RyaWJ1dG9yLnppcCkgXyhbYnV5IGtleV0oaHR0cDovL3ZkbS5iei9nZXQtc2VybW9uLWRpc3RyaWJ1dG9yLWtleSkpXw0KKyAqTG9jYXRpb24gRGF0YSogc2VlIHRoZSBidWlsZCBvbiBbZ2l0aHViXShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pvb21sYS1Mb2NhdGlvbi1EYXRhKSBvciBnZXQgdGhlIFtKQ0IgUGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ZkbS1pby9KQ0ItUGFja2FnZXMvcmF3L21hc3Rlci9KQ0JfbG9jYXRpb25EYXRhLnppcCkgXyhbYnV5IGtleV0oaHR0cDovL3ZkbS5iei9nZXQtbG9jYXRpb24tZGF0YS1rZXkpKV8NCisgKk1vcmUgQ29taW5nLi4uKg0KDQpXaGVyZSBjYW4geW91IGdldCBzdXBwb3J0IGFuZCBoZWxwPw0KPT09PT09PT09PT09PT09PT09PT0NCg0KKyBbVGhlIEpDQiBUdXRvcmlhbHNdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UExRUkdGSThYWl93dEd2UFFaV0JmRHp6bEVSTFFncE1SRSkNCisgW0hlbGxvIFdvcmxkIFR1dG9yaWFsXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUlRZnNMWUllYmxrJmxpc3Q9UExRUkdGSThYWl93dEd2UFFaV0JmRHp6bEVSTFFncE1SRSZpbmRleD00NSkNCisgW1RoZSBKQ0IhIFdpa2ldKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL3dpa2kpDQorIFtKQ0IgR29vZ2xlIEdyb3VwL2ZvcnVtXShodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2EvdmRtLmlvL2QvZm9ydW0vamNiKQ0KKyBbUmVwb3J0IGEgU2VjdXJpdHkgSXNzdWVdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tL3JlcG9ydC1zZWN1cml0eS1pc3N1ZXMpDQorIFtDb21tdW5pdHkgQ29tcGxhaW50XShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbS9jb21tdW5pdHktY29tcGxhaW50KQ0KKyBbT3BlbiBJc3N1ZSBPbiBHaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZG0taW8vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyL2lzc3VlcykgXl4NCg0KU2luY2UgSkNCIGhhcyBbYmVjb21lIGEgY29tbXVuaXR5XShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pvb21sYS1Db21wb25lbnQtQnVpbGRlci9ibG9iL3N0YWdpbmcvLmdpdGh1Yi9TVVBQT1JULm1kKSBwcm9qZWN0IFtWRE0uaW9dKGh0dHBzOi8vd3d3LnZkbS5pby9qb29tbGEtY29tcG9uZW50LWJ1aWxkZXIpIGlzICoqbm8gbG9uZ2VyIHNvbGVseSByZXNwb25zaWJsZSoqIGZvciBzdXBwb3J0Lg0KDQpXZSBoYXZlIHN0YXJ0ZWQgYSBbKipKQ0IgZm9ydW0qKl0oaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9hL3ZkbS5pby9kL2ZvcnVtL2pjYikgd2hlcmUgeW91IGNhbiBwb3N0IHF1ZXN0aW9ucywgYWJvdXQgaG93IHRoaW5ncyB3b3JrLCBvciBpZiB5b3UgbmVlZCBzb21lIGtpbmQgb2YgaGVscCBpbiByZWxhdGlvbiB0byB5b3VyIGRldmVsb3BtZW50IG9mIHlvdXIgY29tcG9uZW50cy4NCg0KXl4gVGhlbiBpZiB5b3UgcnVuIGludG8gYW55IGlzc3VlcywgcmVsYXRlZCB0byB0aGUgSkNCIGNvZGUsIGxpa2UgYnVncywgKipzdGFydCBieSBzZWFyY2hpbmcqKiB0aGUgKCpvcGVuICYgY2xvc2VkKikgaXNzdWVzIG92ZXIgb24gR2l0aHViLCBhbmQgaWYgdGhlIGlzc3VlIGhhcyBub3QgYmVlbiBtZW50aW9uZWQgYmVmb3JlLCAqKnRoZW4gb25seSoqIG9wZW4gYSBuZXcgaXNzdWUsIGZvbGxvd2luZyB0aGUgW2NvbW11bml0eSBndWlkZWxpbmVzXShodHRwczovL2dpdGh1Yi5jb20vdmRtLWlvL0pvb21sYS1Db21wb25lbnQtQnVpbGRlci9ibG9iL21hc3Rlci8uZ2l0aHViL0NPTlRSSUJVVElORy5tZCkuDQoNCldIWSBHSVZFIElUIEFXQVkgTElLRSBUSElTPw0KPT09PT09PT09PT09PT09PT09PT0NCg0KPiBXZSBhcmUgT3BlbiBTb3VyY2UgRW50aHVzaWFzdA0KPiBXaG8gU3VwcG9ydCB0aGUgSm9vbWxhIENvbW11bml0eQ0KDQpPdXIgaWRlYSB3YXMgdG8gYWxtb3N0IGxldCB0aGlzIHRvb2wgc2VydmUgYXMgYSBjaGVhdCBzaGVldCB0byBob3cgdGhpbmdzIGNhbiBiZSBkb25lLi4uIGFuZCB3aXRoIHRoZSBoZWxwIG9mIG90aGVyIGRldmVsb3BlcnMgZW5kIHVwIGZvcm11bGF0aW5nIHRoZSB3YXkgaG93IHRoaW5ncyBub3Qgb25seSBjYW4sIGJ1dCBtdXN0IGJlIGRvbmUgdG8gaW5zdXJlIHNlY3VyZSwgc3RhYmxlLCBzY2FsYWJsZSBhbmQgbWFpbnRhaW5hYmxlIGNvZGUgaXMgcHJvZHVjZWQuIA0KDQpNQUtJTkcgSVQgQkVUVEVSIQ0KPT09PT09PT09PT09PT09PT09PT0NCg0KQ29tcG9uZW50IEJ1aWxkZXIgaXMgbWFwcGVkIGFzIGEgY29tcG9uZW50IGluIGl0c2VsZiBvbiBteSBsb2NhbCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4gU28gd2UgYXJlIGltcHJvdmluZyBpdCBsaWtlIHlvdSB3b3VsZCBhbnkgb3RoZXIgY29tcG9uZW50IGluIGl0LiBJIGFtIGxvb2tpbmcgZm9yIGRldmVsb3BlcnMgd2l0aCB0aGUgKipza2lsbCoqIGFuZCB0aGUgKipkZXNpcmUqKiB0byByZWFsbHkgam9pbiB1cy4uLiBhbmQgdGhlbiB3ZSB3aWxsIFtwb3NzaWJsZSBnaXZlIHRoZW0gYWNjZXNzXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PWxMT2Z4OVlBN1ZRJmxpc3Q9UExRUkdGSThYWl93c2Z6M05kS2F3Q2lZc0FMdVotR2h3SikgdG8gdGhpcywgc28gd2UgY2FuIGFsbCBoZWxwIGltcHJvdmUgdGhpcyBzaW1wbGUsIHlldCBhZHZhbmNlZCB0b29sLg0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oaHR0cHM6Ly93d3cudmRtLmlvLykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI0FDVFVBTFZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmllbGQgY291bnQqOiAqKiMjI0ZJRUxEX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKG1haWx0bzpqb29tbGFAdmRtLmlvKQ0KDQojIyBEb25hdGlvbnMNCg0KQ29tZSBvbiBidXkgVkRNIGEgY29mZmVlIDopDQogKiBPcGVuIENvbGxlY3RpdmU6IFtKb29tbGEtQ29tcG9uZW50LUJ1aWxkZXJdKGh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL0pvb21sYS1Db21wb25lbnQtQnVpbGRlcik=', '', '', 'Certification Authority', '', '', 'Certification Authority', '.git, .github', '', 1, 1, 'https://www.vdm.io/updates/certificationauthority_update_server.xml', 'https://www.vdm.io', '', 'CWxMWTAk4dMjFc8FuG0fB9okNIENoXyPlnUbkdHx4qE=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 12, '', 1, 69), +(36, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, 1, 1, 3, 'Llewellyn', '', 'default.txt', '', '', 'VDM', '1.1.1', 'Copyright (C) 2015. All Rights Reserved', '2017-09-20 01:21:36', '', '/XJGJoD2dKTqyJhxXeoGE0YK5BBlyg1fUR0SpwxDH30=', 'a8a8NXtGxOCg8ASo0XdOOeR8u5RUag2ET+ikfWxULmo=', '', '0jZ65WmtQKZrZKOJcAn4blOqs1kR7ILcMpYnjcvmCT8=', '', '', '', 1, '', '', 'joomla@vdm.io', '', '', 'fb5eHOid0kP2pP2rMqTX0T2IVb548xGD/yEis81L4Tw=', '', '2dea78a6-e0be-4260-8f7d-b278e0b661a8', 'images/demo300.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Hello-World-Component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2024-03-07 13:38:50', '', 'Hello World', 'HelloWorld', 'JCB', 4, '', '', 'W0NVU1RPTUNPREU9d3JpdGVGaWxlXQ0KW0NVU1RPTUNPREU9Z2V0RmlsZUNvbnRlbnRzXQ0KW0NVU1RPTUNPREU9cmVtb3ZlRm9sZGVyXQ==', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKSkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gbmV2ZXIgbWFraW5nIG9uZSBtaXN0YWtlIG9yIHRha2luZyBhbnkgY29mZmVlIGJyZWFrLikNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KKiojIyNhY3R1YWxIb3Vyc1NwZW50IyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxEYXlzU3BlbnQjIyMgRWlnaHQgSG91ciBEYXlzKiogKHRoZSBhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNwZW50KQ0KDQo+ICh3aXRoIHRoZSBmb2xsb3dpbmcgYnJlYWsgZG93bjoNCj4gKipkZWJ1Z2dpbmcgQCMjI2RlYnVnZ2luZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA0Ow0KPiAqKnBsYW5uaW5nIEAjIyNwbGFubmluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA3Ow0KPiAqKm1hcHBpbmcgQCMjI21hcHBpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gMTA7DQo+ICoqb2ZmaWNlIEAjIyNvZmZpY2VIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNjspDQoNCioqIyMjYWN0dWFsVG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsVG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqDQooYSB0b3RhbCBvZiB0aGUgcmVhbGlzdGljIHRpbWUgZnJhbWUgZm9yIHRoaXMgcHJvamVjdCkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gd2l0aCB0aGUgbm9ybWFsIGV2ZXJ5ZGF5IHJlYWxpdGllcyBhdCB0aGUgb2ZmaWNlLCB0aGF0IGluY2x1ZGVzIHRoZSBjb21wb25lbnQgcGxhbm5pbmcsIG1hcHBpbmcgJiBkZWJ1Z2dpbmcuKQ0KDQpQcm9qZWN0IGR1cmF0aW9uOiAqKiMjI3Byb2plY3RXZWVrVGltZSMjIyB3ZWVrcyoqIG9yICoqIyMjcHJvamVjdE1vbnRoVGltZSMjIyBtb250aHMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKG1haWx0bzpqb29tbGFAdmRtLmlvKQ0KDQpbQ1VTVE9NQ09ERT1yZWFkTUVjb250cmlidXRvcnNd', '', '', 'Hello World', '', '', 'Hello World (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/Llewellynvdm/Joomla-Hello-World-Component/master/helloworld_updateserver.xml', 'https://www.vdm.io', '', '5ZLmKq90y+Rw5NhMdx4zzQIzGCQXnXPXNNKPt1VUJVo=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_site_helper\":[]}}', 1, 26, '', 1, 48), +(38, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.11', 'Copyright (C) 2015. All Rights Reserved', '2018-08-06 14:56:04', '', 'DDqhKfMaxgOxOi8Fi/LRCdMLwGehkjYNuvi7ABAiLPY=', '2lcbvIz8wbuYvgcTT0AkruIGkKk/eITskCWhJUe5iZw=', '', 'EOj0Eq9DxXxfbb1es7CtSnWWu/9MbbGia2HVegss6bc=', '', '', 'A_101', 2, '', 'Anthropometry', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_anthropometry', '+2q2ksbp2S8xrelxzlL93YeOn85WOaaH6AMXe8MRdhZErBnfo+S81DfJPMAD8ZTSjVn3LwQpzOcwo+NNJO1Kdw==', '', '12327a9d-f9c1-4ae1-bc23-5b254ce3bf5b', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2020-07-28 00:39:17', 2, 'Anthropometry', 'anthropometry', '', 4, '', '', 'W0NVU1RPTUNPREU9YW50aHJvcG9tZXRyeUhlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Anthropometry', 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9zdGF0dXNfbm9ybWANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fc3RhdHVzX25vcm1gIChgaWRgLCBgY2FsY3VsYXRpb25fdHlwZWAsIGBjYWxjdWxhdGlvbnNgLCBgc2VsZWN0aW9uYCwgYHRlbXBsYXRlc2AsIGBwdWJsaXNoZWRgLCBgY3JlYXRlZGApIFZBTFVFUw0KKDEsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMTAsIDI0LjlcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMjUsIDI5LjlcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMzAsIDQwXCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjQxLCAyMDBcIn19JywgJ2JtaScsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJkZXNpcmFibGVcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkRlc2lyYWJsZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R3JhZGUgMSBPYmVzaXR5PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdyYWRlIDMgT2Jlc2l0eVxcL01vcmJpZDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkRlc2lyYWJsZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDIgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R3JhZGUgMyBPYmVzaXR5XFwvTW9yYmlkPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8XFwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2VzcyB1ay12aXNpYmxlLXNtYWxsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+RGVzaXJhYmxlPFxcL2J1dHRvbj5cIn0sXCJ0ZW1wbGF0ZXMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJ3b3JkXCI6XCJncmFkZSAxIG9iZXNpdHlcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RGVzaXJhYmxlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R3JhZGUgMSBPYmVzaXR5PFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdyYWRlIDMgT2Jlc2l0eVxcL01vcmJpZDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5EZXNpcmFibGU8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDIgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R3JhZGUgMyBPYmVzaXR5XFwvTW9yYmlkPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8XFwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnkgdWstdmlzaWJsZS1zbWFsbFxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiZ3JhZGUgMiBvYmVzaXR5XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkRlc2lyYWJsZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R3JhZGUgMSBPYmVzaXR5PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2UyODMyN1xcXCI+PGI+R3JhZGUgMiBPYmVzaXR5PFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5HcmFkZSAzIE9iZXNpdHlcXC9Nb3JiaWQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RGVzaXJhYmxlPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R3JhZGUgMSBPYmVzaXR5PFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDMgT2Jlc2l0eVxcL01vcmJpZDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdyYWRlIDMgb2Jlc2l0eVxcL21vcmJpZFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5EZXNpcmFibGU8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdyYWRlIDEgT2Jlc2l0eTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R3JhZGUgMiBPYmVzaXR5PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+R3JhZGUgMyBPYmVzaXR5XFwvTW9yYmlkPFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkRlc2lyYWJsZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDIgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAzIE9iZXNpdHlcXC9Nb3JiaWQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAzIE9iZXNpdHlcXC9Nb3JiaWQ8XFwvYnV0dG9uPlwifX0nLCAxLCAnMjAxOC0wOS0wNyAxOTo0MTo1NScpLA0KKDIsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMC45NTksIDIwLjAwXCJ9LFwiY2FsY3VsYXRpb25zMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAuOTEsIDAuOTU4XCJ9LFwiY2FsY3VsYXRpb25zMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAuMDAwMDAxLCAwLjk1XCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAuODU5LCAyMFwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIwLjgxLCAwLjg1OFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIwLjAwLCAwLjgwXCJ9fScsICd3aHInLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwiaGlnaCByaXNrXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5IaWdoIHJpc2s8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPk1vZGVyYXRlIHJpc2s8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkxvdyByaXNrPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+SGlnaCByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+TW9kZXJhdGUgcmlzazxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+TG93IHJpc2s8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5IaWdoIHJpc2s8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcIm1vZGVyYXRlIHJpc2tcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+SGlnaCByaXNrPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+TW9kZXJhdGUgcmlzazxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+TG93IHJpc2s8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+SGlnaCByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Nb2RlcmF0ZSByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Mb3cgcmlzazxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Nb2RlcmF0ZSByaXNrPFxcL2J1dHRvbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJsb3cgcmlza1wiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5IaWdoIHJpc2s8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPk1vZGVyYXRlIHJpc2s8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5Mb3cgcmlzazxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5IaWdoIHJpc2s8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Nb2RlcmF0ZSByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkxvdyByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8XFwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2VzcyB1ay12aXNpYmxlLXNtYWxsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+TG93IHJpc2s8XFwvYnV0dG9uPlwifX0nLCAxLCAnMjAxOC0wOS0wNyAxOTo0OToxMScpLA0KKDMsIDEsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjIyLjRcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjE3LjRcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjE1LjlcIn0sXCJjYWxjdWxhdGlvbnMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjE0LjFcIn0sXCJjYWxjdWxhdGlvbnM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjkuNFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjQuMlwifSxcImNhbGN1bGF0aW9uczZcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjAuNVwifSxcImNhbGN1bGF0aW9uczdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMTlcIn0sXCJjYWxjdWxhdGlvbnM4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjE3LjVcIn0sXCJjYWxjdWxhdGlvbnM5XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjEzLjlcIn0sXCJjYWxjdWxhdGlvbnMxMFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyNi4xXCJ9LFwiY2FsY3VsYXRpb25zMTFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjIuNVwifSxcImNhbGN1bGF0aW9uczEyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIxLjFcIn0sXCJjYWxjdWxhdGlvbnMxM1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIxOS42XCJ9LFwiY2FsY3VsYXRpb25zMTRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMTYuM1wifSxcImNhbGN1bGF0aW9uczE1XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjI3LjVcIn0sXCJjYWxjdWxhdGlvbnMxNlwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyNC4xXCJ9LFwiY2FsY3VsYXRpb25zMTdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMjIuN1wifSxcImNhbGN1bGF0aW9uczE4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjIxLjNcIn0sXCJjYWxjdWxhdGlvbnMxOVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxNy45XCJ9LFwiY2FsY3VsYXRpb25zMjBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjguNVwifSxcImNhbGN1bGF0aW9uczIxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjI1XCJ9LFwiY2FsY3VsYXRpb25zMjJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjMuNVwifSxcImNhbGN1bGF0aW9uczIzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjIyXCJ9LFwiY2FsY3VsYXRpb25zMjRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMTguNFwifSxcImNhbGN1bGF0aW9uczI1XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjI3LjdcIn0sXCJjYWxjdWxhdGlvbnMyNlwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIyMy43XCJ9LFwiY2FsY3VsYXRpb25zMjdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjIuMVwifSxcImNhbGN1bGF0aW9uczI4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjIwLjZcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIxNy4xXCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjkuM1wifSxcImNhbGN1bGF0aW9uczMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjI0LjlcIn0sXCJjYWxjdWxhdGlvbnMzMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyMy4xXCJ9LFwiY2FsY3VsYXRpb25zMzNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjEuNlwifSxcImNhbGN1bGF0aW9uczM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjE4XCJ9LFwiY2FsY3VsYXRpb25zMzVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMzIuMVwifSxcImNhbGN1bGF0aW9uczM2XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjI4LjFcIn0sXCJjYWxjdWxhdGlvbnMzN1wiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyNi40XCJ9LFwiY2FsY3VsYXRpb25zMzhcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjQuOVwifSxcImNhbGN1bGF0aW9uczM5XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIxLjNcIn0sXCJjYWxjdWxhdGlvbnM0MFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIzNS42XCJ9LFwiY2FsY3VsYXRpb25zNDFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMzEuNlwifSxcImNhbGN1bGF0aW9uczQyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjMwLjFcIn0sXCJjYWxjdWxhdGlvbnM0M1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyOC41XCJ9LFwiY2FsY3VsYXRpb25zNDRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMjVcIn0sXCJjYWxjdWxhdGlvbnM0NVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzNi42XCJ9LFwiY2FsY3VsYXRpb25zNDZcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMzIuNVwifSxcImNhbGN1bGF0aW9uczQ3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjMwLjlcIn0sXCJjYWxjdWxhdGlvbnM0OFwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIyOS4zXCJ9LFwiY2FsY3VsYXRpb25zNDlcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjUuMVwifX0nLCAnZmF0X3BlcmNlbnRhZ2UnLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+UG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXIgdWstdmlzaWJsZS1zbWFsbFxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay12aXNpYmxlLXNtYWxsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+RmFpcjxcXC9idXR0b24+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiYXZlcmFnZVwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+QXZlcmFnZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5BdmU8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5BdmU8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkdvb2Q8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cIn0sXCJ0ZW1wbGF0ZXM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJ3b3JkXCI6XCJleGNlbGxlbnRcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlwifX0nLCAxLCAnMjAxOC0wOS0wNyAyMDowMToyMycpOw0KDQotLQ0KLS0gRHVtcGluZyBkYXRhIGZvciB0YWJsZSBgI19fW1tbY29tcG9uZW50XV1dX2NoYXJ0YA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX1tbW2NvbXBvbmVudF1dXV9jaGFydGAgKGBpZGAsIGBkZXRhaWxzYCwgYGphdmFzY3JpcHRfdGFibGVgLCBgbmFtZWAsIGBudW1iZXJgLCBgdGFyZ2V0YCwgYHRhcmdldF9maWVsZHNgLCBgdHlwZWAsIGBwdWJsaXNoZWRgLCBgY3JlYXRlZGApIFZBTFVFUw0KKDEsICd7XCJkYXRhVGFibGVcIjp7XCJjb2xzXCI6W3tcImxhYmVsXCI6XCJMYWJlbFwiLFwidHlwZVwiOlwic3RyaW5nXCJ9LHtcImxhYmVsXCI6XCJWYWx1ZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCJMZWFuIFdlaWdodFwifSx7XCJ2XCI6OTIuMzR9XX0se1wiY1wiOlt7XCJ2XCI6XCJGYXQgV2VpZ2h0XCJ9LHtcInZcIjoxOS42NX1dfV19LFwib3B0aW9uc1wiOntcImZvbnROYW1lXCI6XCJWZXJkYW5hXCIsXCJoQXhpc1wiOntcInVzZUZvcm1hdEZyb21EYXRhXCI6dHJ1ZSxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGx9LFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwibm9uZVwiLFwibGVnZW5kVGV4dFN0eWxlXCI6e1wiY29sb3JcIjpcIiMyMjJcIixcImZvbnRTaXplXCI6MTIsXCJib2xkXCI6dHJ1ZSxcIml0YWxpY1wiOnRydWV9LFwidGl0bGVcIjpcIkJvZHkgV2VpZ2h0XCIsXCJ0aXRsZVRleHRTdHlsZVwiOntcImNvbG9yXCI6XCIjMDAwXCIsXCJmb250U2l6ZVwiOlwiMjBcIixcImJvbGRcIjp0cnVlfSxcInZBeGVzXCI6W3tcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJsb2dTY2FsZVwiOmZhbHNlfSx7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwibG9nU2NhbGVcIjpmYWxzZX1dLFwidHlwZVwiOlwibGluZVwiLFwiYm9vbGVhblJvbGVcIjpcImNlcnRhaW50eVwiLFwic2VyaWVzXCI6W3tcInR5cGVcIjpcImJhcnNcIn0se1widHlwZVwiOlwiYmFyc1wifSx7XCJ0eXBlXCI6XCJiYXJzXCJ9LHtcInR5cGVcIjpcImJhcnNcIn0se1widHlwZVwiOlwiYmFyc1wifV0sXCJ3aWR0aFwiOjYwMCxcImhlaWdodFwiOjM3MSxcImlzM0RcIjp0cnVlLFwicGllSG9sZVwiOjAsXCJzbGljZXNcIjp7XCIwXCI6e1wiY29sb3JcIjpcIiM5M2M0N2RcIn0sXCIxXCI6e1wiY29sb3JcIjpcIiNiNGE3ZDZcIn19LFwicGllU2xpY2VUZXh0XCI6XCJsYWJlbFwiLFwidGhlbWVcIjpcIm1heGltaXplZFwifSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIlBpZUNoYXJ0XCJ9JywgJyhMYWJlbCwgVmFsdWUpXHJcbihbYW50aHJvcG9tZXRyeV9sYWJlbF9sZWFuX3dlaWdodF0sIFthbnRocm9wb21ldHJ5X2xlYW5fd2VpZ2h0XSlcclxuKFthbnRocm9wb21ldHJ5X2xhYmVsX2ZhdF93ZWlnaHRdLCBbYW50aHJvcG9tZXRyeV9mYXRfd2VpZ2h0XSknLCAnQm9keSBXZWlnaHQnLCAzLCAxLCAne1widGFyZ2V0X2ZpZWxkczBcIjp7XCJzZWxlY3Rpb25cIjpcImxlYW5fd2VpZ2h0XCJ9LFwidGFyZ2V0X2ZpZWxkczFcIjp7XCJzZWxlY3Rpb25cIjpcImZhdF93ZWlnaHRcIn19JywgJ1BpZUNoYXJ0JywgMSwgJzIwMTgtMDktMjcgMTA6Mzg6NDMnKSwNCigyLCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiRGF5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn0se1wibGFiZWxcIjpcIkJNSVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJGYXQgUGVyY2VudGFnZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzEwLzA4XCJ9LHtcInZcIjozMi43Mn0se1widlwiOjIzLjYzfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8xMC8wNFwifSx7XCJ2XCI6MzIuNzJ9LHtcInZcIjoyMy42M31dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOjMyLjcyfSx7XCJ2XCI6MTcuNTV9XX0se1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzA5LzEwXCJ9LHtcInZcIjozMi43Mn0se1widlwiOjE3LjU1fV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOVwifSx7XCJ2XCI6MzAuNTV9LHtcInZcIjoyOC4yfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOFwifSx7XCJ2XCI6MzIuNzJ9LHtcInZcIjoyNi43MX1dfV19LFwib3B0aW9uc1wiOntcImhBeGlzXCI6e1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwic2xhbnRlZFRleHRBbmdsZVwiOjMwLFwic2xhbnRlZFRleHRcIjp0cnVlLFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidmlld1dpbmRvd1wiOm51bGwsXCJ2aWV3V2luZG93TW9kZVwiOm51bGx9LFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwiaW5cIixcInRpdGxlXCI6XCJQcm9ncmVzc1wiLFwidkF4ZXNcIjpbe1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwidmlld1dpbmRvd1wiOntcIm1heFwiOm51bGwsXCJtaW5cIjpudWxsfSxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcImxvZ1NjYWxlXCI6ZmFsc2V9LHtcInVzZUZvcm1hdEZyb21EYXRhXCI6dHJ1ZSxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJsb2dTY2FsZVwiOmZhbHNlfV0sXCJpc1N0YWNrZWRcIjpmYWxzZSxcImJvb2xlYW5Sb2xlXCI6XCJjZXJ0YWludHlcIixcIndpZHRoXCI6NjAwLFwiaGVpZ2h0XCI6MzcxLFwibGluZVdpZHRoXCI6MixcImludGVycG9sYXRlTnVsbHNcIjp0cnVlLFwiZG9tYWluQXhpc1wiOntcImRpcmVjdGlvblwiOi0xfSxcImN1cnZlVHlwZVwiOlwiZnVuY3Rpb25cIixcInNlcmllc1wiOntcIjBcIjp7XCJ0YXJnZXRBeGlzSW5kZXhcIjoxLFwiZXJyb3JCYXJzXCI6e1wiZXJyb3JUeXBlXCI6XCJub25lXCJ9fSxcIjFcIjp7XCJ0YXJnZXRBeGlzSW5kZXhcIjowLFwiZXJyb3JCYXJzXCI6e1wiZXJyb3JUeXBlXCI6XCJub25lXCIsXCJtYWduaXR1ZGVcIjoxMH19fSxcInRoZW1lXCI6XCJtYXhpbWl6ZWRcIixcImZvY3VzVGFyZ2V0XCI6XCJjYXRlZ29yeVwifSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIkxpbmVDaGFydFwifScsICcoRGF5LCBbYW50aHJvcG9tZXRyeV9sYWJlbF9ibWldLCBbYW50aHJvcG9tZXRyeV9sYWJlbF9mYXRfcGVyY2VudGFnZV0pXHJcbihbMF9hbnRocm9wb21ldHJ5X2RheV0sIFswX2FudGhyb3BvbWV0cnlfYm1pXSwgWzBfYW50aHJvcG9tZXRyeV9mYXRfcGVyY2VudGFnZV0pXHJcbihbMV9hbnRocm9wb21ldHJ5X2RheV0sIFsxX2FudGhyb3BvbWV0cnlfYm1pXSwgWzFfYW50aHJvcG9tZXRyeV9mYXRfcGVyY2VudGFnZV0pXHJcbihbMl9hbnRocm9wb21ldHJ5X2RheV0sIFsyX2FudGhyb3BvbWV0cnlfYm1pXSwgWzJfYW50aHJvcG9tZXRyeV9mYXRfcGVyY2VudGFnZV0pJywgJ1Byb2dyZXNzJywgNCwgMywgJ3tcInRhcmdldF9maWVsZHMwXCI6e1wic2VsZWN0aW9uXCI6XCJkYXlcIn0sXCJ0YXJnZXRfZmllbGRzMVwiOntcInNlbGVjdGlvblwiOlwiYm1pXCJ9LFwidGFyZ2V0X2ZpZWxkczJcIjp7XCJzZWxlY3Rpb25cIjpcImZhdF9wZXJjZW50YWdlXCJ9fScsICdMaW5lQ2hhcnQnLCAxLCAnMjAxOC0wOS0yNyAxMToyODozNycpLA0KKDMsICd7XCJkYXRhVGFibGVcIjp7XCJjb2xzXCI6W3tcImxhYmVsXCI6XCJEYXlcIixcInR5cGVcIjpcInN0cmluZ1wifSx7XCJsYWJlbFwiOlwiV2VpZ2h0XCIsXCJ0eXBlXCI6XCJudW1iZXJcIn1dLFwicm93c1wiOlt7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOjExMn1dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMDkvMTBcIn0se1widlwiOjExMn1dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMDkvMDlcIn0se1widlwiOjk5fV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOFwifSx7XCJ2XCI6MTEyfV19XX0sXCJvcHRpb25zXCI6e1widGl0bGVcIjpcIldlaWdodFwiLFwidkF4ZXNcIjpbe1widGl0bGVcIjpudWxsLFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwidmlld1dpbmRvd1wiOntcIm1heFwiOm51bGwsXCJtaW5cIjpudWxsfX0se1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwidmlld1dpbmRvd1wiOntcIm1heFwiOm51bGwsXCJtaW5cIjpudWxsfSxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbH1dLFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImN1cnZlVHlwZVwiOlwiZnVuY3Rpb25cIixcImJvb2xlYW5Sb2xlXCI6XCJjZXJ0YWludHlcIixcImxpbmVXaWR0aFwiOjIsXCJoQXhpc1wiOntcInVzZUZvcm1hdEZyb21EYXRhXCI6dHJ1ZSxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dcIjpudWxsLFwidmlld1dpbmRvd01vZGVcIjpudWxsLFwic2xhbnRlZFRleHRBbmdsZVwiOjMwLFwic2xhbnRlZFRleHRcIjp0cnVlLFwidGl0bGVcIjpcIlwifSxcImxlZ2VuZFwiOlwibm9uZVwiLFwid2lkdGhcIjo2MDAsXCJoZWlnaHRcIjozNzEsXCJkb21haW5BeGlzXCI6e1wiZGlyZWN0aW9uXCI6LTF9LFwic2VyaWVzXCI6e1wiMFwiOntcImNvbG9yXCI6XCIjNzQxYjQ3XCIsXCJ0YXJnZXRBeGlzSW5kZXhcIjowLFwibGluZVdpZHRoXCI6NCxcInBvaW50U2l6ZVwiOjEwfX0sXCJ0aGVtZVwiOlwibWF4aW1pemVkXCJ9LFwic3RhdGVcIjp7fSxcInZpZXdcIjp7XCJjb2x1bW5zXCI6bnVsbCxcInJvd3NcIjpudWxsfSxcImlzRGVmYXVsdFZpc3VhbGl6YXRpb25cIjp0cnVlLFwiY2hhcnRUeXBlXCI6XCJMaW5lQ2hhcnRcIn0nLCAnKERheSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfd2VpZ2h0XSlcclxuKFswX2FudGhyb3BvbWV0cnlfZGF5XSwgWzBfYW50aHJvcG9tZXRyeV93ZWlnaHRdKVxyXG4oWzFfYW50aHJvcG9tZXRyeV9kYXldLCBbMV9hbnRocm9wb21ldHJ5X3dlaWdodF0pXHJcbihbMl9hbnRocm9wb21ldHJ5X2RheV0sIFsyX2FudGhyb3BvbWV0cnlfd2VpZ2h0XSlcclxuKFszX2FudGhyb3BvbWV0cnlfZGF5XSwgWzNfYW50aHJvcG9tZXRyeV93ZWlnaHRdKVxyXG4oWzRfYW50aHJvcG9tZXRyeV9kYXldLCBbNF9hbnRocm9wb21ldHJ5X3dlaWdodF0pJywgJ1dlaWdodCcsIDUsIDMsICd7XCJ0YXJnZXRfZmllbGRzMFwiOntcInNlbGVjdGlvblwiOlwiZGF5XCJ9LFwidGFyZ2V0X2ZpZWxkczFcIjp7XCJzZWxlY3Rpb25cIjpcIndlaWdodFwifX0nLCAnTGluZUNoYXJ0JywgMSwgJzIwMTgtMTAtMDQgMjE6Mzc6MTgnKSwNCig0LCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiRGF5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn0se1wibGFiZWxcIjpcIkNhbGZcIixcInR5cGVcIjpcIm51bWJlclwifSx7XCJsYWJlbFwiOlwiQ2hlc3RcIixcInR5cGVcIjpcIm51bWJlclwifSx7XCJsYWJlbFwiOlwiSGlwXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIk1pZGRsZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJOYXZlbFwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJOZWNrXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIlRoaWdoXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIlVwcGVyIEFybVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzEwLzA4XCJ9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6MTA2LjV9LHtcInZcIjozMn0se1widlwiOm51bGx9LHtcInZcIjpudWxsfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8xMC8wOFwifSx7XCJ2XCI6NDIuNX0se1widlwiOjExM30se1widlwiOjg1fSx7XCJ2XCI6ODB9LHtcInZcIjoxMTB9LHtcInZcIjpudWxsfSx7XCJ2XCI6MjN9LHtcInZcIjoyM31dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOjQyLjV9LHtcInZcIjoxMTkuNX0se1widlwiOjEyNS4yfSx7XCJ2XCI6MTA2LjV9LHtcInZcIjoxMDYuNX0se1widlwiOm51bGx9LHtcInZcIjo2NS41fSx7XCJ2XCI6MzYuNX1dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjo4MH0se1widlwiOjMwfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9XX0se1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzA5LzEwXCJ9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6ODB9LHtcInZcIjozMH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOVwifSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOjExMH0se1widlwiOjQ1fSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9XX0se1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzA5LzA4XCJ9LHtcInZcIjo0Mi41fSx7XCJ2XCI6MTE5LjV9LHtcInZcIjoxMTUuNX0se1widlwiOjEwNi41fSx7XCJ2XCI6MTEyfSx7XCJ2XCI6bnVsbH0se1widlwiOjY1LjV9LHtcInZcIjozNi41fV19XX0sXCJvcHRpb25zXCI6e1wibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwibm9uZVwiLFwidGl0bGVcIjpcIkNpcmN1bWZlcmVuY2VzXCIsXCJ2QXhlc1wiOlt7XCJ0aXRsZVwiOm51bGwsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfSx7XCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfV0sXCJib29sZWFuUm9sZVwiOlwiY2VydGFpbnR5XCIsXCJsaW5lV2lkdGhcIjoyLFwiaEF4aXNcIjp7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6bnVsbCxcInZpZXdXaW5kb3dNb2RlXCI6bnVsbCxcInRleHRTdHlsZVwiOntcImNvbG9yXCI6XCIjMjIyXCIsXCJmb250U2l6ZVwiOlwiMTJcIixcIml0YWxpY1wiOmZhbHNlfSxcInNsYW50ZWRUZXh0QW5nbGVcIjo2MCxcInNsYW50ZWRUZXh0XCI6dHJ1ZX0sXCJ3aWR0aFwiOjYwMCxcImhlaWdodFwiOjM3MSxcImludGVycG9sYXRlTnVsbHNcIjp0cnVlLFwiZm9jdXNUYXJnZXRcIjpcImNhdGVnb3J5XCIsXCJzZXJpZXNcIjp7XCIwXCI6e1widGFyZ2V0QXhpc0luZGV4XCI6MX0sXCIyXCI6e1widGFyZ2V0QXhpc0luZGV4XCI6MSxcImxpbmVXaWR0aFwiOjJ9LFwiM1wiOntcInRhcmdldEF4aXNJbmRleFwiOjF9fSxcImRvbWFpbkF4aXNcIjp7XCJkaXJlY3Rpb25cIjoxfSxcImN1cnZlVHlwZVwiOlwiZnVuY3Rpb25cIixcImZvbnROYW1lXCI6XCJWZXJkYW5hXCIsXCJ0aXRsZVRleHRTdHlsZVwiOntcImNvbG9yXCI6XCIjMDAwXCIsXCJmb250U2l6ZVwiOjEyLFwiYm9sZFwiOnRydWUsXCJpdGFsaWNcIjp0cnVlfX0sXCJzdGF0ZVwiOnt9LFwidmlld1wiOntcImNvbHVtbnNcIjpudWxsLFwicm93c1wiOm51bGx9LFwiaXNEZWZhdWx0VmlzdWFsaXphdGlvblwiOmZhbHNlLFwiY2hhcnRUeXBlXCI6XCJMaW5lQ2hhcnRcIn0nLCAnKERheSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfY2FsZl0sIFthbnRocm9wb21ldHJ5X2xhYmVsX2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfaGlwXSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfbWlkZGxlXSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbYW50aHJvcG9tZXRyeV9sYWJlbF9jaXJjdW1mZXJlbmNlc19uZWNrXSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfdGhpZ2hdLCBbYW50aHJvcG9tZXRyeV9sYWJlbF9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzBfYW50aHJvcG9tZXRyeV9kYXldLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzBfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFswX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzBfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzFfYW50aHJvcG9tZXRyeV9kYXldLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzFfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFsxX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzFfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzJfYW50aHJvcG9tZXRyeV9kYXldLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzJfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFsyX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzJfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzNfYW50aHJvcG9tZXRyeV9kYXldLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzNfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFszX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzNfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzRfYW50aHJvcG9tZXRyeV9kYXldLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzRfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFs0X2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzRfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4vLyBUaGUgcmVzdCBvZiB0aGUgcm93cyBhcmUgYWRkZWQgZHluYW1pY2FsbHlcclxuLy8gWW91IG5lZWQgb25seSBzZXQgdGhlIGZldyBhYm92ZScsICdDaXJjdW1mZXJlbmNlcycsIDMsIDMsICd7XCJ0YXJnZXRfZmllbGRzMFwiOntcInNlbGVjdGlvblwiOlwiZGF5XCJ9LFwidGFyZ2V0X2ZpZWxkczFcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX2NhbGZcIn0sXCJ0YXJnZXRfZmllbGRzMlwiOntcInNlbGVjdGlvblwiOlwiY2lyY3VtZmVyZW5jZXNfY2hlc3RcIn0sXCJ0YXJnZXRfZmllbGRzM1wiOntcInNlbGVjdGlvblwiOlwiY2lyY3VtZmVyZW5jZXNfaGlwXCJ9LFwidGFyZ2V0X2ZpZWxkczRcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX21pZGRsZVwifSxcInRhcmdldF9maWVsZHM1XCI6e1wic2VsZWN0aW9uXCI6XCJjaXJjdW1mZXJlbmNlc19uYXZlbFwifSxcInRhcmdldF9maWVsZHM2XCI6e1wic2VsZWN0aW9uXCI6XCJjaXJjdW1mZXJlbmNlc19uZWNrXCJ9LFwidGFyZ2V0X2ZpZWxkczdcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX3RoaWdoXCJ9LFwidGFyZ2V0X2ZpZWxkczhcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX3VwcGVyX2FybVwifX0nLCAnTGluZUNoYXJ0JywgJycsICcyMDE4LTEwLTA0IDIxOjUxOjQ4Jyk7DQo=', '', 'Anthropometry (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'AMcPvMJWBRsUNjLuEwg9tYNEFkXRrfn6TMayKbUalW8=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 151, '', 1, 47), +(39, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2018-08-10 13:06:34', '', 'WFTndiFWqEP3VQCQ0AxC8lHxV2wt5zmqZd676/YNImU=', 'IyB+NbU+o4/3Gt/VDPtD3P5YYgkui9RLCYcrmKai5jk=', '', 'ajsiq1dXN27cjOsdcFpVk82R1tItqdc0+DPn4xBmlX8=', '', '', 'A_188', 2, '', 'Medical Aid Info', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_medicalaid', 'KCDC7tfGMQPxIWoQYwWHJri/Dv+uBt4wxLYKnbb4Aw/V5Jc0teUehHc+hK5gxg5a', '', 'a918111a-c0f8-40b6-9484-14a718222cec', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2020-07-28 00:37:56', 2, 'Medical Aid', 'medicalaid', '', 4, '', '', 'W0NVU1RPTUNPREU9bWVkaWNhbGFpZEhlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Medical Aid Info', '', '', 'Medical Aid (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'wbujqapJbtxhp5KMWAoAL0nuh47xUD0cYnzAC8Lisqk=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 38, '', 1, 20), +(40, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2015. All Rights Reserved', '2018-08-21 13:15:04', '', 'wqakjzYJsqZ4J0z8Ubf+/uGndhzVE9VNr7qzCAcZxms=', '9Qfx4NouLwPCAleYwuyiyl4G3dOIJ2Z63XVDJyJyWDU=', '', 'jPr2Qo+KKztte9yW4/Lkm/3YQIaRdwZf2odiXY1EWww=', '', '', 'A_189', 2, '', 'Contact Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_contactdetails', 'Opdm097HIpeBhw8ceGrCBNLj3DH4qurxw6Cq/NIiQK9hEBr39lcEych/zvStB//ZE48LM8NjZ1k56VIxMLUr8w==', '', '4b11bb3d-fabf-4e7b-a61a-2777ac58f2d1', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2020-07-28 00:37:52', 2, 'Contact', 'contactdetails', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29udGFjdGRldGFpbHNIZWxwZXJCb3RoXQ==', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Contact Details', '', '', 'Contact Details (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'NAm0jkpCAyIQBpz1KePHBQNvgSmi3dCvevy91gyPOaM=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 40, '', 1, 46), +(41, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2015. All Rights Reserved', '2018-08-21 19:33:15', '', '9M+/Gjj00W7CZV5jgGmCKquJuUQb2thGxeT9+oVPJCQ=', 'YV5sZj5kK2MugOfwacI+zlMqpvxVUULI2jzGvKhjfb8=', '', '4aUyispvHA6idDSZH2HhZH+y+BdOTFcXoaWNjVA16xA=', '', '', 'A_190', 2, '', 'Personal Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_personaldetails', '/bw9MqxWvsKcP5ob3e+EXyxycrzNrbHH6RvL6rkYypQ0OUjncUIgCwsTxItFSYPdosA6WY+rT9RW6khunqSS9Q==', '', 'e6583709-0244-4d3a-807e-191e0f4a38f5', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2020-07-28 00:37:49', 2, 'Personal', 'personaldetails', '', 4, '', '', 'W0NVU1RPTUNPREU9cGVyc29uYWxkZXRhaWxzSGVscGVyQm90aF0=', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Personal Details', '', '', 'Personal Details (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', '9fJdT9+z3MMBT3JP/g8TBiv8yjoeWtZncrzm5Tlaa6Y=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 37, '', 1, 45), +(42, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2015. All Rights Reserved', '2018-09-12 00:41:47', '', 'tsbYVAclNERm1P8eqajX42R8Kbtmr6IUY5pnPNK7Myk=', '0GasKfzV/E7i5pzYhOyNPTbtF3G1aIIw9rTQc2TxDxw=', '', 'd5JzN7wmc7Z45uLmxvB/VaWD273BbnWGzcX/8Y48g2E=', '', '', 'A_193', 2, '', 'Doctor Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_doctordetails', 'FMIbYsaxQuRN2zWW9kKIg8E1wS2ZHpO8WwYnHxYZ8/XQaQ1IbaMprFLGolaP6dAbisgWMy+MyIMusJsLCuMp8w==', '', '7f8d6250-0847-4c9e-94f2-a763c2b92916', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2020-07-28 00:39:19', 2, 'Doctor', 'doctordetails', '', 4, '', '', 'W0NVU1RPTUNPREU9ZG9jdG9yZGV0YWlsc0hlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Doctor Details', '', '', 'Doctor Details (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', '7znurjprij+BlsXeCIs1X9qJN3hWKlIndblN0kQODKs=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 17, '', 1, 44), +(43, '', '', '', '', 1, '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.5', 'Copyright (C) 2015. All Rights Reserved', '2018-09-12 19:55:57', '', 'lVh4+h/JdcdCsM3P8kN5rga7qPxsad0Upvtg1c5tAaY=', 'TnqxzaYo3URMy9ERxS5oceROiGJ1j9bXoKvSl+89LFU=', '', 'pkfWlOLugsjdtcw61qCPc3SO5GsoYv28sla7akR47bI=', '', '', '', 1, '', 'Communicate', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_communicate', 'cm0Oae7wqQ7/T9g9jCTeZFq59QfbS3mtozQAfcyn/78AdUIytw7wJEK/PlElD1NyMb7wmx/hTI6pJ/l5+8w22g==', '', '4b980308-89af-4197-9806-74db00409630', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2020-07-28 00:37:32', 2, 'Communicate', 'communicate', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29tbXVuaWNhdGVIZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Communicate', '', '', 'Communicate (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'rrLXYfJQAdN+hwWEWgnKC3FkonVlvTuKS+atUkJvQkQ=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 55, '', 1, 43), +(44, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2015. All Rights Reserved', '2018-10-09 16:09:37', '', 'zyzQlJpk6sNhrkRgaomXxwY8XIIGpowvew7Oxv9MpfY=', '+ekjDgmY0soLJ4cWC7dlPMV4kZyIbyi4Sm5u7MD3Wds=', '', 'iWFsbz05JeFtBV83U1KslTdA+dwovh7BanK7iD9VVKY=', '', '', 'A_198', 2, '', 'Fitness Test', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_fitnesstest', 'Y7w/ZptPLhfcWIv4bKaIkmYHw07wrf9hjbF145UB0uR8lQ1CfLhQhI27vhUjSlA54KC9pFOTD3Ae2+CU/MCO9g==', '', '718b6c81-471b-49c7-b24d-d8fb526b0eff', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2020-07-28 00:37:28', 2, 'Fitness Test', 'fitnesstest', '', 4, '', '', 'W0NVU1RPTUNPREU9Zml0bmVzc3Rlc3RIZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Fitness Test', 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9zdGF0dXNfbm9ybWANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fc3RhdHVzX25vcm1gIChgaWRgLCBgY2FsY3VsYXRpb25fdHlwZWAsIGBjYWxjdWxhdGlvbnNgLCBgc2VsZWN0aW9uYCwgYHRlbXBsYXRlc2AsIGBwdWJsaXNoZWRgLCBgY3JlYXRlZGApIFZBTFVFUw0KKDEsIDEsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjUzXCJ9LFwiY2FsY3VsYXRpb25zMVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI1MFwifSxcImNhbGN1bGF0aW9uczJcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiNDRcIn0sXCJjYWxjdWxhdGlvbnMzXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjM5XCJ9LFwiY2FsY3VsYXRpb25zNFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzNVwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNThcIn0sXCJjYWxjdWxhdGlvbnM2XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjU1XCJ9LFwiY2FsY3VsYXRpb25zN1wiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczhcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiNDRcIn0sXCJjYWxjdWxhdGlvbnM5XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjM5XCJ9LFwiY2FsY3VsYXRpb25zMTBcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNjBcIn0sXCJjYWxjdWxhdGlvbnMxMVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI1NlwifSxcImNhbGN1bGF0aW9uczEyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjUxXCJ9LFwiY2FsY3VsYXRpb25zMTNcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiNDZcIn0sXCJjYWxjdWxhdGlvbnMxNFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI0MFwifSxcImNhbGN1bGF0aW9uczE1XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjYyXCJ9LFwiY2FsY3VsYXRpb25zMTZcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNTlcIn0sXCJjYWxjdWxhdGlvbnMxN1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI1NFwifSxcImNhbGN1bGF0aW9uczE4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjQ4XCJ9LFwiY2FsY3VsYXRpb25zMTlcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiNDJcIn0sXCJjYWxjdWxhdGlvbnMyMFwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCI2N1wifSxcImNhbGN1bGF0aW9uczIxXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjYzXCJ9LFwiY2FsY3VsYXRpb25zMjJcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiNTlcIn0sXCJjYWxjdWxhdGlvbnMyM1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCI1NVwifSxcImNhbGN1bGF0aW9uczI0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjUwXCJ9LFwiY2FsY3VsYXRpb25zMjVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNDdcIn0sXCJjYWxjdWxhdGlvbnMyNlwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI0MFwifSxcImNhbGN1bGF0aW9uczI3XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjM0XCJ9LFwiY2FsY3VsYXRpb25zMjhcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMzBcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIyM1wifSxcImNhbGN1bGF0aW9uczMwXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjUyXCJ9LFwiY2FsY3VsYXRpb25zMzFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNDVcIn0sXCJjYWxjdWxhdGlvbnMzMlwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI0MFwifSxcImNhbGN1bGF0aW9uczMzXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjM0XCJ9LFwiY2FsY3VsYXRpb25zMzRcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjZcIn0sXCJjYWxjdWxhdGlvbnMzNVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCI1NVwifSxcImNhbGN1bGF0aW9uczM2XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjQ3XCJ9LFwiY2FsY3VsYXRpb25zMzdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiNDJcIn0sXCJjYWxjdWxhdGlvbnMzOFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIzN1wifSxcImNhbGN1bGF0aW9uczM5XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjI4XCJ9LFwiY2FsY3VsYXRpb25zNDBcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNThcIn0sXCJjYWxjdWxhdGlvbnM0MVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczQyXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjQ0XCJ9LFwiY2FsY3VsYXRpb25zNDNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiNDBcIn0sXCJjYWxjdWxhdGlvbnM0NFwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzMVwifSxcImNhbGN1bGF0aW9uczQ1XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjY0XCJ9LFwiY2FsY3VsYXRpb25zNDZcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNTVcIn0sXCJjYWxjdWxhdGlvbnM0N1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczQ4XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjQ0XCJ9LFwiY2FsY3VsYXRpb25zNDlcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMzdcIn19JywgJ3BhcnRpYWxfY3VybF91cHMnLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+UG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZTI4MzI3XFxcIj48Yj5GYWlyPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcIndvcmRcIjpcImF2ZXJhZ2VcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiMyZDcwOTFcXFwiPjxiPkF2ZXJhZ2U8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzM1wiOntcInRhcmdldFwiOlwiM1wiLFwid29yZFwiOlwiZ29vZFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJ3b3JkXCI6XCJleGNlbGxlbnRcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9fScsIDEsICcyMDE4LTEwLTExIDE5OjU2OjU5JyksDQooMiwgMSwgJ3tcImNhbGN1bGF0aW9uczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMThcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zMlwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI4XCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCI3XCJ9LFwiY2FsY3VsYXRpb25zNFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzXCJ9LFwiY2FsY3VsYXRpb25zNVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIyMVwifSxcImNhbGN1bGF0aW9uczZcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMTZcIn0sXCJjYWxjdWxhdGlvbnM3XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjExXCJ9LFwiY2FsY3VsYXRpb25zOFwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxMFwifSxcImNhbGN1bGF0aW9uczlcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiNFwifSxcImNhbGN1bGF0aW9uczEwXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjI3XCJ9LFwiY2FsY3VsYXRpb25zMTFcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjJcIn0sXCJjYWxjdWxhdGlvbnMxMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIxNlwifSxcImNhbGN1bGF0aW9uczEzXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjE1XCJ9LFwiY2FsY3VsYXRpb25zMTRcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiOVwifSxcImNhbGN1bGF0aW9uczE1XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjM0XCJ9LFwiY2FsY3VsYXRpb25zMTZcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjhcIn0sXCJjYWxjdWxhdGlvbnMxN1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyMlwifSxcImNhbGN1bGF0aW9uczE4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjE5XCJ9LFwiY2FsY3VsYXRpb25zMTlcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMTRcIn0sXCJjYWxjdWxhdGlvbnMyMFwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIzN1wifSxcImNhbGN1bGF0aW9uczIxXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjMxXCJ9LFwiY2FsY3VsYXRpb25zMjJcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjRcIn0sXCJjYWxjdWxhdGlvbnMyM1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyMVwifSxcImNhbGN1bGF0aW9uczI0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjE1XCJ9LFwiY2FsY3VsYXRpb25zMjVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjNcIn0sXCJjYWxjdWxhdGlvbnMyNlwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIxOFwifSxcImNhbGN1bGF0aW9uczI3XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zMjhcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTBcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI3XCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjZcIn0sXCJjYWxjdWxhdGlvbnMzMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyM1wifSxcImNhbGN1bGF0aW9uczMyXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjE0XCJ9LFwiY2FsY3VsYXRpb25zMzNcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTJcIn0sXCJjYWxjdWxhdGlvbnMzNFwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI4XCJ9LFwiY2FsY3VsYXRpb25zMzVcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMzNcIn0sXCJjYWxjdWxhdGlvbnMzNlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyN1wifSxcImNhbGN1bGF0aW9uczM3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIyXCJ9LFwiY2FsY3VsYXRpb25zMzhcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTdcIn0sXCJjYWxjdWxhdGlvbnMzOVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIxNVwifSxcImNhbGN1bGF0aW9uczQwXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjQzXCJ9LFwiY2FsY3VsYXRpb25zNDFcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMzRcIn0sXCJjYWxjdWxhdGlvbnM0MlwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyOFwifSxcImNhbGN1bGF0aW9uczQzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjIzXCJ9LFwiY2FsY3VsYXRpb25zNDRcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjFcIn0sXCJjYWxjdWxhdGlvbnM0NVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczQ2XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjQwXCJ9LFwiY2FsY3VsYXRpb25zNDdcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMzJcIn0sXCJjYWxjdWxhdGlvbnM0OFwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyNlwifSxcImNhbGN1bGF0aW9uczQ5XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjIzXCJ9fScsICdwdXNoX3VwcycsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiYXZlcmFnZVwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+QXZlcmFnZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJ3b3JkXCI6XCJnb29kXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5Hb29kPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcIndvcmRcIjpcImV4Y2VsbGVudFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+RXhjZWxsZW50PFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn19JywgMSwgJzIwMTgtMTAtMTEgMTk6NTg6NDUnKSwNCigzLCAxLCAne1wiY2FsY3VsYXRpb25zMFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIyM1wifSxcImNhbGN1bGF0aW9uczFcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMThcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxMFwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiN1wifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjZcIn0sXCJjYWxjdWxhdGlvbnM2XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjIzXCJ9LFwiY2FsY3VsYXRpb25zN1wiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIxNFwifSxcImNhbGN1bGF0aW9uczhcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTJcIn0sXCJjYWxjdWxhdGlvbnM5XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjhcIn0sXCJjYWxjdWxhdGlvbnMxMFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIzM1wifSxcImNhbGN1bGF0aW9uczExXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjI3XCJ9LFwiY2FsY3VsYXRpb25zMTJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjJcIn0sXCJjYWxjdWxhdGlvbnMxM1wiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxN1wifSxcImNhbGN1bGF0aW9uczE0XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjE1XCJ9LFwiY2FsY3VsYXRpb25zMTVcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNDNcIn0sXCJjYWxjdWxhdGlvbnMxNlwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIzNFwifSxcImNhbGN1bGF0aW9uczE3XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjI4XCJ9LFwiY2FsY3VsYXRpb25zMThcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMjNcIn0sXCJjYWxjdWxhdGlvbnMxOVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIyMVwifSxcImNhbGN1bGF0aW9uczIwXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjQ5XCJ9LFwiY2FsY3VsYXRpb25zMjFcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNDBcIn0sXCJjYWxjdWxhdGlvbnMyMlwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIzMlwifSxcImNhbGN1bGF0aW9uczIzXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjI2XCJ9LFwiY2FsY3VsYXRpb25zMjRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjNcIn0sXCJjYWxjdWxhdGlvbnMyNVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIxOFwifSxcImNhbGN1bGF0aW9uczI2XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zMjdcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiOFwifSxcImNhbGN1bGF0aW9uczI4XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjdcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzXCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjFcIn0sXCJjYWxjdWxhdGlvbnMzMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIxNlwifSxcImNhbGN1bGF0aW9uczMyXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjExXCJ9LFwiY2FsY3VsYXRpb25zMzNcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTBcIn0sXCJjYWxjdWxhdGlvbnMzNFwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI0XCJ9LFwiY2FsY3VsYXRpb25zMzVcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjdcIn0sXCJjYWxjdWxhdGlvbnMzNlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyMlwifSxcImNhbGN1bGF0aW9uczM3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjE2XCJ9LFwiY2FsY3VsYXRpb25zMzhcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTVcIn0sXCJjYWxjdWxhdGlvbnMzOVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI5XCJ9LFwiY2FsY3VsYXRpb25zNDBcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMzRcIn0sXCJjYWxjdWxhdGlvbnM0MVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyOFwifSxcImNhbGN1bGF0aW9uczQyXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIyXCJ9LFwiY2FsY3VsYXRpb25zNDNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTlcIn0sXCJjYWxjdWxhdGlvbnM0NFwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIxNFwifSxcImNhbGN1bGF0aW9uczQ1XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjM3XCJ9LFwiY2FsY3VsYXRpb25zNDZcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMzFcIn0sXCJjYWxjdWxhdGlvbnM0N1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyNFwifSxcImNhbGN1bGF0aW9uczQ4XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjIxXCJ9LFwiY2FsY3VsYXRpb25zNDlcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMTVcIn19JywgJ3B1bGxfdXBzJywgJ3tcInRlbXBsYXRlczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcIndvcmRcIjpcInBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlBvb3I8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMVwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwiZmFpclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2UyODMyN1xcXCI+PGI+RmFpcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJhdmVyYWdlXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjMmQ3MDkxXFxcIj48Yj5BdmVyYWdlPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkdvb2Q8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNFwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5FeGNlbGxlbnQ8XFwvYj48XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDowODozMScpLA0KKDQsIDIsICd7XCJjYWxjdWxhdGlvbnM0OVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDIwXCJ9LFwiY2FsY3VsYXRpb25zNTBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIyMSwgNDBcIn0sXCJjYWxjdWxhdGlvbnM1MVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjQxLCA2MFwifSxcImNhbGN1bGF0aW9uczUyXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiNjEsIDgwXCJ9LFwiY2FsY3VsYXRpb25zNTNcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI4MSwgMTAwXCJ9LFwiY2FsY3VsYXRpb25zNTRcIjp7XCJ0YXJnZXRcIjpcIjVcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMDEsIDMwMFwifX0nLCAnYnJpZGdlX3NpZGVfbGVmdCcsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJ2ZXJ5IHBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlZlcnkgUG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcInBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+UG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2UyODMyN1xcXCI+PGI+RmFpcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcIndvcmRcIjpcImV4Y2VsbGVudFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5FeGNlbGxlbnQ8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNVwiOntcInRhcmdldFwiOlwiNVwiLFwid29yZFwiOlwiU3VwZXJpb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5TdXBlcmlvcjxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDoxNDo1MCcpLA0KKDUsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMCwgMjBcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMjEsIDQwXCJ9LFwiY2FsY3VsYXRpb25zMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjQxLCA2MFwifSxcImNhbGN1bGF0aW9uczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI2MSwgODBcIn0sXCJjYWxjdWxhdGlvbnM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiODEsIDEwMFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjVcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMDEsIDMwMFwifX0nLCAnYnJpZGdlX3NpZGVfcmlnaHQnLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwidmVyeSBwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5WZXJ5IFBvb3I8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJ3b3JkXCI6XCJwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlBvb3I8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJ3b3JkXCI6XCJnb29kXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiMyZDcwOTFcXFwiPjxiPkdvb2Q8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJ3b3JkXCI6XCJleGNlbGxlbnRcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+RXhjZWxsZW50PFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczVcIjp7XCJ0YXJnZXRcIjpcIjVcIixcIndvcmRcIjpcIlN1cGVyaW9yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+U3VwZXJpb3I8XFwvYj48XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn19JywgMSwgJzIwMTgtMTAtMTEgMjA6Mjk6MDcnKSwNCig2LCAyLCAne1wiY2FsY3VsYXRpb25zMFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDMwXCJ9LFwiY2FsY3VsYXRpb25zMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjMxLCA2MFwifSxcImNhbGN1bGF0aW9uczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI2MSwgOTBcIn0sXCJjYWxjdWxhdGlvbnMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiOTEsIDExOVwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMjAsIDE0OVwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjVcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxNTAsIDMwMFwifX0nLCAnZnJvbnRfYnJpZGdlJywgJ3tcInRlbXBsYXRlczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcIndvcmRcIjpcInZlcnkgcG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+VmVyeSBQb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMVwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiZmFpclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZTI4MzI3XFxcIj48Yj5GYWlyPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzM1wiOntcInRhcmdldFwiOlwiM1wiLFwid29yZFwiOlwiZ29vZFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjMmQ3MDkxXFxcIj48Yj5Hb29kPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNFwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM1XCI6e1widGFyZ2V0XCI6XCI1XCIsXCJ3b3JkXCI6XCJTdXBlcmlvclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPlN1cGVyaW9yPFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9fScsIDEsICcyMDE4LTEwLTExIDIwOjMwOjM4JyksDQooNywgMiwgJ3tcImNhbGN1bGF0aW9uczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIwLCA4M1wifSxcImNhbGN1bGF0aW9uczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI4NCwgOTRcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiOTUsIDEwMlwifSxcImNhbGN1bGF0aW9uczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMDMsIDExMlwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMTMsIDMwMFwifX0nLCAnZ3JpcF9zdHJlbmd0aF90b3RhbCcsICd7XCJ0ZW1wbGF0ZXM1XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJ2ZXJ5IHBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlZlcnkgUG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNlwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczhcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzOVwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDozMzo0MScpLA0KKDgsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMCwgOTFcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiOTEsIDEyNVwifSxcImNhbGN1bGF0aW9uczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMjYsIDE3NlwifSxcImNhbGN1bGF0aW9uczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxNzcsIDIwOFwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIyMDksIDMwMFwifX0nLCAnYmFja19zdHJlbmd0aCcsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJ2ZXJ5IHBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlZlcnkgUG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMVwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNFwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDozODo1MicpLA0KKDksIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiLTUwLCAtOFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCItNywgLTFcIn0sXCJjYWxjdWxhdGlvbnMxMFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDVcIn0sXCJjYWxjdWxhdGlvbnMxNVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjYsIDE2XCJ9LFwiY2FsY3VsYXRpb25zMjBcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxNywgMTAwXCJ9LFwiY2FsY3VsYXRpb25zMjVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCItNTAsIC03XCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCItNiwgLTFcIn0sXCJjYWxjdWxhdGlvbnMzNVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDEwXCJ9LFwiY2FsY3VsYXRpb25zNDBcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMSwgMjBcIn0sXCJjYWxjdWxhdGlvbnM0NVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjIxLCAxMDBcIn19JywgJ3NpdF9yZWFjaCcsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiYXZlcmFnZVwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+QXZlcmFnZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJ3b3JkXCI6XCJnb29kXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5Hb29kPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcIndvcmRcIjpcImV4Y2VsbGVudFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+RXhjZWxsZW50PFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn19JywgMSwgJzIwMTgtMTAtMTEgMjI6MTc6MDYnKTsNCg0KLS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9jaGFydGANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fY2hhcnRgIChgaWRgLCBgZGV0YWlsc2AsIGBqYXZhc2NyaXB0X3RhYmxlYCwgYG5hbWVgLCBgbnVtYmVyYCwgYHRhcmdldGAsIGB0YXJnZXRfZmllbGRzYCwgYHR5cGVgLCBgcHVibGlzaGVkYCwgYGNyZWF0ZWRgKSBWQUxVRVMNCigxLCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiU3RhZ2VcIixcInR5cGVcIjpcInN0cmluZ1wifSx7XCJsYWJlbFwiOlwiSGVhcnQgUmF0ZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJTeXN0b2xpYyBCbG9vZCBQcmVzc3VyZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJEaWFzdG9saWMgQmxvb2QgUHJlc3N1cmVcIixcInR5cGVcIjpcIm51bWJlclwifV0sXCJyb3dzXCI6W3tcImNcIjpbe1widlwiOlwiUmVzdFwifSx7XCJ2XCI6NzJ9LHtcInZcIjo0M30se1widlwiOjUzfV19LHtcImNcIjpbe1widlwiOlwiQCAyNSBXYXR0XCJ9LHtcInZcIjo4OX0se1widlwiOjUzfSx7XCJ2XCI6NjN9XX0se1wiY1wiOlt7XCJ2XCI6XCJAIDUwIFdhdHRcIn0se1widlwiOjkzfSx7XCJ2XCI6NjN9LHtcInZcIjo3M31dfSx7XCJjXCI6W3tcInZcIjpcIkAgNzUgV2F0dFwifSx7XCJ2XCI6OTJ9LHtcInZcIjo2M30se1widlwiOjczfV19LHtcImNcIjpbe1widlwiOlwiRmluYWwgLSAzIG1pbiByZXN0XCJ9LHtcInZcIjo3OH0se1widlwiOjU0fSx7XCJ2XCI6NTh9XX1dfSxcIm9wdGlvbnNcIjp7XCJmb2N1c1RhcmdldFwiOlwiY2F0ZWdvcnlcIixcImhBeGlzXCI6e1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidmlld1dpbmRvd1wiOm51bGwsXCJ2aWV3V2luZG93TW9kZVwiOm51bGx9LFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwiaW5cIixcInRoZW1lXCI6XCJtYXhpbWl6ZWRcIixcInRpdGxlXCI6XCJZTUNBXCIsXCJ2QXhlc1wiOlt7XCJ0aXRsZVwiOm51bGwsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfSx7XCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfV0sXCJjdXJ2ZVR5cGVcIjpcImZ1bmN0aW9uXCIsXCJib29sZWFuUm9sZVwiOlwiY2VydGFpbnR5XCIsXCJsaW5lV2lkdGhcIjoyLFwid2lkdGhcIjo2MDAsXCJoZWlnaHRcIjozNzF9LFwic3RhdGVcIjp7fSxcInZpZXdcIjp7XCJjb2x1bW5zXCI6bnVsbCxcInJvd3NcIjpudWxsfSxcImlzRGVmYXVsdFZpc3VhbGl6YXRpb25cIjpmYWxzZSxcImNoYXJ0VHlwZVwiOlwiTGluZUNoYXJ0XCJ9JywgJyhbZml0bmVzc3Rlc3RfbGFiZWxfeW1jYV9zdGFnZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF95bWNhX2hlYXJ0X3JhdGVdLCBbZml0bmVzc3Rlc3RfbGFiZWxfeW1jYV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV0pXHJcbihbZml0bmVzc3Rlc3RfdGVtcGxhdGVfeW1jYV9zdGFnZV9vbmVdLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX29uZV0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX29uZV0sIFtmaXRuZXNzdGVzdF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9vbmVdKVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90d29dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX3R3b10sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfdHdvXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdHdvXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3R3b10pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90aHJlZV0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfdGhyZWVdLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX3RocmVlXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhyZWVdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhyZWVdKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X3ltY2Ffc3RhZ2VfZm91cl0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfZm91cl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfZm91cl0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX2ZvdXJdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfZm91cl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV9maXZlXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfeW1jYV9zdGFnZV9maXZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfaGVhcnRfcmF0ZV9maXZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZml2ZV0sIFtmaXRuZXNzdGVzdF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9maXZlXSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF95bWNhX3N0YWdlX3NpeF0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2Vfc2l4XSwgW2ZpdG5lc3N0ZXN0X3ltY2FfaGVhcnRfcmF0ZV9zaXhdLCBbZml0bmVzc3Rlc3RfeW1jYV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9zaXhdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfc2l4XSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF95bWNhX3N0YWdlX3NldmVuXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfeW1jYV9zdGFnZV9zZXZlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfc2V2ZW5dLCBbZml0bmVzc3Rlc3RfeW1jYV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9zZXZlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9zZXZlbl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV9laWdodF0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfZWlnaHRdLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX2VpZ2h0XSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWlnaHRdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWlnaHRdKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X3ltY2Ffc3RhZ2VfbmluZV0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfbmluZV0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfbmluZV0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX25pbmVdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfbmluZV0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90ZW5dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX3Rlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfdGVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3Rlbl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV9lbGV2ZW5dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX2VsZXZlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfZWxldmVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWxldmVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX2VsZXZlbl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90d2VsdmVdKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX3R3ZWx2ZV0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfdHdlbHZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdHdlbHZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3R3ZWx2ZV0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90aGlydGVlbl0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfdGhpcnRlZW5dLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX3RoaXJ0ZWVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhpcnRlZW5dLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhpcnRlZW5dKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X3ltY2Ffc3RhZ2VfZm91cnRlZW5dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX2ZvdXJ0ZWVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfaGVhcnRfcmF0ZV9mb3VydGVlbl0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX2ZvdXJ0ZWVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX2ZvdXJ0ZWVuXSlbRU5ESUZdJywgJ1lNQ0EnLCAzLCAxLCAne1widGFyZ2V0X2ZpZWxkczBcIjp7XCJzZWxlY3Rpb25cIjpcInltY2Ffc3RhZ2Vfb25lXCJ9fScsICdMaW5lQ2hhcnQnLCAxLCAnMjAxOC0xMC0xMSAyMjo1MzoxOCcpLA0KKDIsICd7XCJkYXRhVGFibGVcIjp7XCJjb2xzXCI6W3tcImxhYmVsXCI6XCJTdGFnZVwiLFwidHlwZVwiOlwic3RyaW5nXCJ9LHtcImxhYmVsXCI6XCJIZWFydCBSYXRlXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIlN5c3RvbGljIEJsb29kIFByZXNzdXJlXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIkRpYXN0b2xpYyBCbG9vZCBQcmVzc3VyZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCJSZXN0XCJ9LHtcInZcIjo3Mn0se1widlwiOjY0fSx7XCJ2XCI6NTR9XX0se1wiY1wiOlt7XCJ2XCI6XCJAIDEwIFdhdHRcIn0se1widlwiOjgzfSx7XCJ2XCI6Njd9LHtcInZcIjo1N31dfSx7XCJjXCI6W3tcInZcIjpcIkAgMTIgV2F0dFwifSx7XCJ2XCI6OTB9LHtcInZcIjo2OX0se1widlwiOjU5fV19LHtcImNcIjpbe1widlwiOlwiQCAxNCBXYXR0XCJ9LHtcInZcIjo5NH0se1widlwiOjY5fSx7XCJ2XCI6NjB9XX0se1wiY1wiOlt7XCJ2XCI6XCJGaW5hbCAtIDMgbWluIHJlc3RcIn0se1widlwiOjc5fSx7XCJ2XCI6NjR9LHtcInZcIjo1N31dfV19LFwib3B0aW9uc1wiOntcImFubm90YXRpb25zXCI6e1wiZG9tYWluXCI6e319LFwiaEF4aXNcIjp7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJ2aWV3V2luZG93XCI6bnVsbCxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dNb2RlXCI6bnVsbH0sXCJsZWdhY3lTY2F0dGVyQ2hhcnRMYWJlbHNcIjp0cnVlLFwibGVnZW5kXCI6XCJpblwiLFwidGl0bGVcIjpcIkJydWNlXCIsXCJ2QXhlc1wiOlt7XCJ0aXRsZVwiOm51bGwsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfSx7XCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfV0sXCJpc1N0YWNrZWRcIjpmYWxzZSxcImJvb2xlYW5Sb2xlXCI6XCJjZXJ0YWludHlcIixcIndpZHRoXCI6NjAwLFwiaGVpZ2h0XCI6MzcxLFwidXNlRmlyc3RDb2x1bW5Bc0RvbWFpblwiOmZhbHNlLFwidGhlbWVcIjpcIm1heGltaXplZFwiLFwiZm9jdXNUYXJnZXRcIjpcImNhdGVnb3J5XCIsXCJzZXJpZXNcIjp7XCIwXCI6e1wiY29sb3JcIjpcIiNlMDY2NjZcIn0sXCIxXCI6e1wiY29sb3JcIjpcIiNlNjkxMzhcIn0sXCIyXCI6e1wiY29sb3JcIjpcIiM4NTIwMGNcIn19fSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIkNvbHVtbkNoYXJ0XCJ9JywgJyhbZml0bmVzc3Rlc3RfbGFiZWxfYnJ1Y2Vfc3RhZ2VdLCBbZml0bmVzc3Rlc3RfbGFiZWxfYnJ1Y2VfaGVhcnRfcmF0ZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVdKVxyXG4oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX2JydWNlX3N0YWdlX29uZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9oZWFydF9yYXRlX29uZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9vbmVdLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX29uZV0pXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV90d29dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV9icnVjZV9zdGFnZV90d29dLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfaGVhcnRfcmF0ZV90d29dLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdHdvXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV90d29dKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X2JydWNlX3N0YWdlX3RocmVlXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfYnJ1Y2Vfc3RhZ2VfdGhyZWVdLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfaGVhcnRfcmF0ZV90aHJlZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV90aHJlZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhyZWVdKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X2JydWNlX3N0YWdlX2ZvdXJdKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV9icnVjZV9zdGFnZV9mb3VyXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfZm91cl0sIFtmaXRuZXNzdGVzdF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9mb3VyXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9mb3VyXSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV9maXZlXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfYnJ1Y2Vfc3RhZ2VfZml2ZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9oZWFydF9yYXRlX2ZpdmVdLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZml2ZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfZml2ZV0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfYnJ1Y2Vfc3RhZ2Vfc2l4XShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfYnJ1Y2Vfc3RhZ2Vfc2l4XSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfc2l4XSwgW2ZpdG5lc3N0ZXN0X2JydWNlX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX3NpeF0sIFtmaXRuZXNzdGVzdF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfc2l4XSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV9zZXZlbl0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX2JydWNlX3N0YWdlX3NldmVuXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfc2V2ZW5dLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfc2V2ZW5dLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3NldmVuXSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV9laWdodF0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX2JydWNlX3N0YWdlX2VpZ2h0XSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfZWlnaHRdLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWlnaHRdLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX2VpZ2h0XSlbRU5ESUZdJywgJ0JydWNlJywgMywgMSwgJ3tcInRhcmdldF9maWVsZHMwXCI6e1wic2VsZWN0aW9uXCI6XCJicnVjZV9zdGFnZV9vbmVcIn19JywgJ0NvbHVtbkNoYXJ0JywgMSwgJzIwMTgtMTAtMTEgMjM6Mjg6MTcnKSwNCigzLCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiRGF5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn0se1wibGFiZWxcIjpcIlZPXFx1MjA4Mm1heFwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzEwLzEyXCJ9LHtcInZcIjoxNzAuNTY3fV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8xMC8xMVwifSx7XCJ2XCI6MTYzLjE0Nn1dfV19LFwib3B0aW9uc1wiOntcInRpdGxlXCI6XCJWbzJtYXhcIixcInZBeGVzXCI6W3tcInRpdGxlXCI6bnVsbCxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWV9LHtcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWV9XSxcImxlZ2FjeVNjYXR0ZXJDaGFydExhYmVsc1wiOnRydWUsXCJjdXJ2ZVR5cGVcIjpcImZ1bmN0aW9uXCIsXCJib29sZWFuUm9sZVwiOlwiY2VydGFpbnR5XCIsXCJsaW5lV2lkdGhcIjoyLFwiaEF4aXNcIjp7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6bnVsbCxcInZpZXdXaW5kb3dNb2RlXCI6bnVsbH0sXCJsZWdlbmRcIjpcIm5vbmVcIixcIndpZHRoXCI6NjAwLFwiaGVpZ2h0XCI6MzcxLFwiZG9tYWluQXhpc1wiOntcImRpcmVjdGlvblwiOjF9LFwidGhlbWVcIjpcIm1heGltaXplZFwiLFwiaW50ZXJwb2xhdGVOdWxsc1wiOnRydWUsXCJzZXJpZXNcIjp7XCIwXCI6e1wiY29sb3JcIjpcIiNhNjRkNzlcIn19fSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIkxpbmVDaGFydFwifScsICcoW2ZpdG5lc3N0ZXN0X2xhYmVsX2RheV0sIFtmaXRuZXNzdGVzdF9sYWJlbF92bzJtYXhdKVxyXG4oWzBfZml0bmVzc3Rlc3RfZGF5XSwgWzBfZml0bmVzc3Rlc3Rfdm8ybWF4XSlcclxuKFsxX2ZpdG5lc3N0ZXN0X2RheV0sIFsxX2ZpdG5lc3N0ZXN0X3ZvMm1heF0pXHJcbihbMl9maXRuZXNzdGVzdF9kYXldLCBbMl9maXRuZXNzdGVzdF92bzJtYXhdXSlcclxuKFszX2ZpdG5lc3N0ZXN0X2RheV0sIFszX2ZpdG5lc3N0ZXN0X3ZvMm1heF0pXHJcbihbNF9maXRuZXNzdGVzdF9kYXldLCBbNF9maXRuZXNzdGVzdF92bzJtYXhdKScsICdWbzJtYXgnLCAzLCAzLCAne1widGFyZ2V0X2ZpZWxkczBcIjp7XCJzZWxlY3Rpb25cIjpcImRheVwifSxcInRhcmdldF9maWVsZHMxXCI6e1wic2VsZWN0aW9uXCI6XCJ2bzJtYXhcIn19JywgJ0xpbmVDaGFydCcsIDEsICcyMDE4LTEwLTEyIDEzOjQ4OjEzJyk7', '', 'Fitness Test (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'oih1GS9YYhu8cGMLn9xdQT8PVllZ0camYBjEYbHqsgQ=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 52, '', 1, 50), +(45, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2018-10-15 14:33:08', '', 'jKdfyoOPNLF1n3ZHp1Cb7IW4Lu13zO36e33wI/y7Ry4=', 'r7A8hbtLv0B/VHRfBtCmH5xvRq9j7PT7gz5PI6F/FP0=', '', '2dMIdzUuuZZ4g2G2DHEU74//Y4HkGUR+QOqQx9iFeLw=', '', '', 'A_199', 2, '', 'Bankable Projects', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_bankableprojects', 'kTcbfJRadrKm5MThXCqdHwpHH91ugchmvlgPE7biwFlFyD6m7Ccne2MzU3fh39KIEXq2Yu6Avl20OtlKBi3Pyw==', '', '3ed2025c-f489-44e4-9cc1-cf033a57b061', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2020-07-28 00:37:25', 2, 'Bankable Projects', 'bankableprojects', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEFkZCBKb2luIFRhYmxlcyBiYXNlZCBvbiBmaWx0ZXINCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRxdWVyeSAgVGhlIGRhdGFiYXNlIHF1ZXJ5IG9iamVjdA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRmaWx0ZXIgIFRoZSB0YXJnZXQgYXJlYSB0aGF0IG1hZGUgdGhlIHJlcXVlc3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gam9pbkZvcm1EZXRhaWxzKCYkcXVlcnksICRmaWx0ZXIgPSAnbm9uZScsICRkYiA9IG51bGwpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBEQiBvYmplY3QNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGIpKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCX0NCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX3R5cGUgdGFibGUuDQoJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fdHlwZScsICd0JykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EudHlwZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgndC5pZCcpIC4gJyknKTsNCgl9DQoNCgkvKioNCgkgKiBBZGQgb3JkZXIgYmFzZWQgb24gZmlsdGVyDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkcXVlcnkgIFRoZSBkYXRhYmFzZSBxdWVyeSBvYmplY3QNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZmlsdGVyICBUaGUgdGFyZ2V0IGFyZWEgdGhhdCBtYWRlIHRoZSByZXF1ZXN0DQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRiICAgICBUaGUgZGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gb3JkZXJGb3JtRGV0YWlscygmJHF1ZXJ5LCAkZmlsdGVyID0gJ25vbmUnLCAkZGIgPSBudWxsKQ0KCXsNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgREIgb2JqZWN0DQoJCS8vIGlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRiKSkNCgkJLy8gew0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJLy8gCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkvLyB9DQoJCS8vIHRoZSBkZWZhdWx0IG9yZGVyIGlzIGJ5IGNyZWF0ZSBkYXRlDQoJCSRxdWVyeS0+b3JkZXIoJ2EuY3JlYXRlZCBERVNDJyk7IC8vIHRvIGluc3VyZSBsYXN0IHNob3dzIGZpcnN0DQoJfQ0KDQoJLyoqDQoJICogR2V0IHNlbGVjdGlvbiAgYmFzZWQgb24gdHlwZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgbWFpbiB0YWJsZSB0byBzZWxlY3QNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkbWV0aG9kICAgIFRoZSB0eXBlIG9mIHZhbHVlcyB0byByZXR1cm4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZmlsdGVyICAgIFRoZSBraW5kIG9mIGZpbHRlciAodG8gcmV0dXJuIG9ubHkgdmFsdWVzIHJlcXVpcmVkKQ0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRkYiAgICAgVGhlIGRhdGFiYXNlIG9iamVjdA0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oJHRhYmxlID0gJ2Zvcm0nLCAkbWV0aG9kID0gJ3BsYWNlaG9sZGVyJywgJGZpbHRlciA9ICdub25lJywgJGRiID0gbnVsbCkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gcHJlcCBmb3IgcGxhY2Vob2xkZXJzDQoJCSRmID0gJyc7DQoJCSRiID0gJyc7DQoJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHBsYWNlaG9sZGVyIHByZWZpeA0KCQkJJHByZWZpeCA9IHNlbGY6OiRwYXJhbXMtPmdldCgncGxhY2Vob2xkZXJfcHJlZml4JywgJ1tbW2NvbXBvbmVudF1dXScpOw0KCQkJJGYgPSAnWycgLiAkcHJlZml4IC4gJ18nOw0KCQkJJGIgPSAnXSc7DQoJCX0NCgkJLy8gZ2V0IHN0YXR1cyBub3JtIGZpZWxkcw0KCQlpZiAobWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRTdGF0dXNOb3JtRmllbGRzJykpDQoJCXsNCgkJCSRub3JtcyA9IHNlbGY6OmdldFN0YXR1c05vcm1GaWVsZHMoKTsNCgkJfQ0KCQkvLyBnZXQgY2hhcnRzDQoJCWlmICgnY2hhcnQnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIgJiYgbWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRBdmFpbGFibGVDaGFydHMnKSkNCgkJew0KCQkJJGNoYXJ0cyA9IHNlbGY6OmdldEF2YWlsYWJsZUNoYXJ0cygpOw0KCQl9DQoJCS8vIG9ubHkgZ2V0IHdoYXQgd2UgbmVlZA0KCQlpZiAoJ3Byb2ZpbGUnID09PSAkZmlsdGVyKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGZpZWxkcy9jb2x1bW5zDQoJCQkkY29sdW1ucyA9IGFycmF5KCdpZCcsICdjcmVhdGVkJywgJ21vZGlmaWVkJywgJ25hbWUnKTsNCgkJfQ0KCQkvLyBzZXQgdGhlIHZhbHVlcyB5b3Ugd2FudCB0byByZW1vdmUgYWZ0ZXIgbW9kZWxpbmcNCgkJZWxzZWlmICgncmVtb3ZlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gcmVtb3ZlIHBhcmFtcyBhbHdheXMNCgkJCSRyZW1vdmUgPSBhcnJheSgkZiAuICdwYXJhbXMnIC4gJGIpOw0KCQkJLy8gcmVtb3ZlIHRoZSBub3JtcyBpZiBmb3VuZA0KCQkJaWYgKGlzc2V0KCRub3JtcykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG5vcm1zKSkNCgkJCXsNCgkJCQlmb3JlYWNoICgkbm9ybXMgYXMgJG5vcm0pDQoJCQkJew0KCQkJCQkkcmVtb3ZlW10gPSAkZiAuICdzdGF0dXNfJyAuICRub3JtIC4gJGI7DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRyZW1vdmU7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBEQiBvYmplY3QNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRiKSkNCgkJCXsNCgkJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBjb2x1bW5zIG9mIHRoaXMgdGFibGUNCgkJCSRjb2x1bW5zID0gJGRiLT5nZXRUYWJsZUNvbHVtbnMoIiNfX1tbW2NvbXBvbmVudF1dXV8iIC4gJHRhYmxlLCBmYWxzZSk7DQoJCQkvLyBhbHdheXMgcmVtb3ZlIHRoZXNlDQoJCQkkcmVtb3ZlID0gYXJyYXkoJ2Fzc2V0X2lkJywgJ2NoZWNrZWRfb3V0JywgJ2NoZWNrZWRfb3V0X3RpbWUnKTsNCgkJCS8vIGlmIHBsYWNlaG9sZGVyIGFuZCBub25lIGZpbHRlciB0aGVuIHJlbW92ZSBzb21lIG1vcmUNCgkJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kICYmICgncmVwb3J0JyA9PT0gJGZpbHRlciB8fCAnZW1haWwnID09PSAkZmlsdGVyKSkNCgkJCXsNCgkJCQkkcmVtb3ZlW10gPSAnYWNjZXNzJzsNCgkJCQkkcmVtb3ZlW10gPSAnY3JlYXRlZF9ieSc7DQoJCQkJJHJlbW92ZVtdID0gJ29yZGVyaW5nJzsNCgkJCQkkcmVtb3ZlW10gPSAndmVyc2lvbic7DQoJCQkJJHJlbW92ZVtdID0gJ3BhcmFtcyc7DQoJCQkJJHJlbW92ZVtdID0gJ3B1Ymxpc2hlZCc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnbW9kaWZpZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdoaXRzJzsNCgkJCX0NCgkJCS8vIHJlbW92ZQ0KCQkJZm9yZWFjaCAoJHJlbW92ZSBhcyAka2V5KQ0KCQkJew0KCQkJCXVuc2V0KCRjb2x1bW5zWyRrZXldKTsNCgkJCX0NCgkJCS8vIHByZXAgdGhlIGNvbHVtbnMNCgkJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkY29sdW1ucyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY29sdW1ucw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbHVtbnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBjb2x1bW5zIGZvciBxdWVyeSBzZWxlY3Rpb24NCgkJCSRzZWxlY3Rpb24gPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGNvbHVtbnMgYXMgJGNvbHVtbikNCgkJCXsNCgkJCQkkc2VsZWN0aW9uWydhLicgLiAkY29sdW1uXSA9ICRmIC4gJGNvbHVtbiAuICRiOw0KCQkJCS8vIHdlIG11c3QgYWRkIHRoZSBwYXJhbXMNCgkJCQlpZiAoJ3Byb2ZpbGUnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIpDQoJCQkJew0KCQkJCQkvLyBzZXQgdGhlIGxhYmVsIGZvciB0aGVzZSBmaWVsZHMNCgkJCQkJJHNlbGVjdGlvblsnc2V0TGFiZWwtPicgLiAkY29sdW1uXSA9ICRmIC4gJ2xhYmVsXycgLiAkY29sdW1uIC4gJGI7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gYWRkIHRoZSBsaW5rZWQgdmFsdWVzDQoJCQkkc2VsZWN0aW9uWyd0Lm5hbWUnXSA9ICRmIC4gJ3R5cGVfbmFtZScgLiAkYjsNCgkJCS8vIHdlIG11c3QgYWRkIHRoZSBwYXJhbXMNCgkJCWlmICgncHJvZmlsZScgIT09ICRmaWx0ZXIpDQoJCQl7DQoJCQkJLy8gZG8gc29tZSBjb252ZXJzaW9uIGZvciBjcmVhdGVkIGRhdGUNCgkJCQlpZiAoaW5fYXJyYXkoJ2NyZWF0ZWQnLCAkY29sdW1ucykpDQoJCQkJew0KCQkJCQkkc2VsZWN0aW9uWydzZXRZZWFyTW9udGhEYXk6Y3JlYXRlZCddID0gJGYgLiAnZGF5JyAuICRiOw0KCQkJCQkkc2VsZWN0aW9uWydzZXRZZWFyTW9udGg6Y3JlYXRlZCddID0gJGYgLiAnbW9udGgnIC4gJGI7DQoJCQkJCSRzZWxlY3Rpb25bJ2ZhbmN5RGF0ZTpjcmVhdGVkJ10gPSAkZiAuICdjcmVhdGVkJyAuICRiOw0KCQkJCQkvLyBzZXQgbGFiZWwgZm9yIGRheSBhbmQgbW9udGgNCgkJCQkJJHNlbGVjdGlvblsnc2V0TGFiZWwtPmRheSddID0gJGYgLiAnbGFiZWxfZGF5JyAuICRiOw0KCQkJCQkkc2VsZWN0aW9uWydzZXRMYWJlbC0+bW9udGgnXSA9ICRmIC4gJ2xhYmVsX21vbnRoJyAuICRiOw0KCQkJCX0NCgkJCQkvLyBhZGQgdGhlIG5vcm1zIGlmIGZvdW5kDQoJCQkJaWYgKGlzc2V0KCRub3JtcykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG5vcm1zKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRub3JtcyBhcyAkbm9ybSkNCgkJCQkJew0KCQkJCQkJaWYgKCdlbWFpbCcgPT09ICRmaWx0ZXIgfHwgJ3JlcG9ydCcgPT09ICRmaWx0ZXIgfHwgJ2ZpZWxkJyA9PT0gJGZpbHRlciAgfHwgJ2NoYXJ0JyA9PT0gJGZpbHRlcikNCgkJCQkJCXsNCgkJCQkJCQkkc2VsZWN0aW9uWydnZXRWYWx1ZVN0YXR1czonIC4gJG5vcm0uICd8YWdlfGdlbmRlciddID0gJGYgLiAnc3RhdHVzXycgLiAkbm9ybSAuICRiOw0KCQkJCQkJfQ0KCQkJCQkJLy8gZG8gbm90IGxvYWQgZm9yIGZpZWxkDQoJCQkJCQlpZiAoJ2ZpZWxkJyAhPT0gJGZpbHRlciAmJiAnY2hhcnQnICE9PSAkZmlsdGVyKQ0KCQkJCQkJew0KCQkJCQkJCSRzZWxlY3Rpb25bXSA9ICRmIC4gJ3N0YXR1c18nIC4gJG5vcm0uICdfc2NhbGUnIC4gJGI7DQoJCQkJCQkJJHNlbGVjdGlvbltdID0gJGYgLiAnc3RhdHVzXycgLiAkbm9ybS4gJ193b3JkJyAuICRiOw0KCQkJCQkJCSRzZWxlY3Rpb25bXSA9ICRmIC4gJ3N0YXR1c18nIC4gJG5vcm0uICdfdGFibGUnIC4gJGI7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gYWRkIHRoZSBjaGFydCBkaXYgYW5kIEpTIGNvZGUgKG9ubHkgaWYgZmlsdGVyIGlzIG5vdCBjaGFydCkNCgkJCQlpZiAoJ2NoYXJ0JyAhPT0gJGZpbHRlciAmJiAnZmllbGQnICE9PSAkZmlsdGVyICYmIGlzc2V0KCRjaGFydHMpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjaGFydHMpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJGNoYXJ0cyBhcyAkY2hhcnQgPT4gJHZhbHVlcykNCgkJCQkJew0KCQkJCQkJLy8gbWFrZSBzdXJlIHRoZSBjaGFydCBuYW1lIGlzIHNhdmUNCgkJCQkJCSRzZWxlY3Rpb25bJ3NldENoYXJ0Q29kZS0+JyAuICRjaGFydF0gPSAkZiAuICRjaGFydCAuICRiOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRzZWxlY3Rpb247DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPWdldFBsYWNlSG9sZGVyc1JlcG9ydF0NCltDVVNUT01DT0RFPWdldFZhbHVlU3RhdHVzXQ0KW0NVU1RPTUNPREU9Z2V0U3RhdHVzTm9ybUZpZWxkc10NCltDVVNUT01DT0RFPWdldENoYXJ0Q29kZV0NCltDVVNUT01DT0RFPWdldEF2YWlsYWJsZUNoYXJ0c10NCltDVVNUT01DT0RFPWdldE11bHRpQ2hhcnREYXRhVGFibGVdDQpbQ1VTVE9NQ09ERT1nZXRIZWxwZXJDbGFzc10NCltDVVNUT01DT0RFPWdldFRlbXBsYXRlXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCltDVVNUT01DT0RFPWdldEFOWVRlbXBsYXRlK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUZvcm1EZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUNvbXBhbnlEZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9bW9kZWxBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPXBhcmFtc01vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1sYWJlbE1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT10ZW1wbGF0ZU1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1jaGFydE1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1yZW1vdmVBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPWxvYWRSZXBvcnRUYWJdDQpbQ1VTVE9NQ09ERT1nZXRSZXBvcnRdDQpbQ1VTVE9NQ09ERT10aGVCdXRsZXJdDQpbQ1VTVE9NQ09ERT1zZXRUYWJdDQpbQ1VTVE9NQ09ERT1nZXRNZW1iZXJOYW1lXQ0KW0NVU1RPTUNPREU9YmNtYXRoXQ0KW0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0NCltDVVNUT01DT0RFPWdldEJldHdlZW5dDQpbQ1VTVE9NQ09ERT1nZXRDb3JlTmFtZV0=', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Bankable Projects', '', '', 'Bankable Projects (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'hf7yYVzaVFQ2UsPUbb+lb+2Xx79x7DKbXnLblPnk4ko=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 16, '', 1, 22), +(46, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2018-11-24 01:54:02', '', 'PDKvQr1omtxg1PHpAFU3HiVLe70cToFa/9eg87wOf3w=', 'o/rDMwNXBeOLEXJ0o9JpkhHeastC8pZ5hME9gq1JriQ=', '', 'fU3WMu9a1djTuX5mAz5t1mu/amTPpqmJmchvOzS/vTQ=', '', '', 'A_201', 2, '', 'Donor Funded Projects', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_donorfundedprojects', 'eVfE2ScgVPJ8DhBaw8UfCZbXbk/Sr8BR/ln+Mj3CYKoAZ1/lNB2mFx8IVIOc/VvZMjxKHPQDbrlNUwia8N4Mkg==', '', '92181cd8-81a3-448c-b4df-adc0e93c84f9', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2020-07-28 00:37:22', 2, 'Donor Funded Projects', 'donorfundedprojects', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEFkZCBKb2luIFRhYmxlcyBiYXNlZCBvbiBmaWx0ZXINCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRxdWVyeSAgVGhlIGRhdGFiYXNlIHF1ZXJ5IG9iamVjdA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRmaWx0ZXIgIFRoZSB0YXJnZXQgYXJlYSB0aGF0IG1hZGUgdGhlIHJlcXVlc3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gam9pbkZvcm1EZXRhaWxzKCYkcXVlcnksICRmaWx0ZXIgPSAnbm9uZScsICRkYiA9IG51bGwpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBEQiBvYmplY3QNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGIpKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCX0NCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX3NlY3RvciB0YWJsZS4NCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9zZWN0b3InLCAncycpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdhLnNlY3RvcicpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgncy5pZCcpIC4gJyknKTsNCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX2RlcGFydG1lbnQgdGFibGUuDQoJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fZGVwYXJ0bWVudCcsICdkJykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuZGVwYXJ0bWVudCcpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnZC5pZCcpIC4gJyknKTsNCgl9DQoNCgkvKioNCgkgKiBBZGQgb3JkZXIgYmFzZWQgb24gZmlsdGVyDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkcXVlcnkgIFRoZSBkYXRhYmFzZSBxdWVyeSBvYmplY3QNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZmlsdGVyICBUaGUgdGFyZ2V0IGFyZWEgdGhhdCBtYWRlIHRoZSByZXF1ZXN0DQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRiICAgICBUaGUgZGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gb3JkZXJGb3JtRGV0YWlscygmJHF1ZXJ5LCAkZmlsdGVyID0gJ25vbmUnLCAkZGIgPSBudWxsKQ0KCXsNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgREIgb2JqZWN0DQoJCS8vIGlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRiKSkNCgkJLy8gew0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJLy8gCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkvLyB9DQoJCS8vIHRoZSBkZWZhdWx0IG9yZGVyIGlzIGJ5IGNyZWF0ZSBkYXRlDQoJCSRxdWVyeS0+b3JkZXIoJ2EuY3JlYXRlZCBERVNDJyk7IC8vIHRvIGluc3VyZSBsYXN0IHNob3dzIGZpcnN0DQoJfQ0KDQoJLyoqDQoJICogR2V0IHNlbGVjdGlvbiAgYmFzZWQgb24gdHlwZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgbWFpbiB0YWJsZSB0byBzZWxlY3QNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkbWV0aG9kICAgIFRoZSB0eXBlIG9mIHZhbHVlcyB0byByZXR1cm4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZmlsdGVyICAgIFRoZSBraW5kIG9mIGZpbHRlciAodG8gcmV0dXJuIG9ubHkgdmFsdWVzIHJlcXVpcmVkKQ0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRkYiAgICAgVGhlIGRhdGFiYXNlIG9iamVjdA0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oJHRhYmxlID0gJ2Zvcm0nLCAkbWV0aG9kID0gJ3BsYWNlaG9sZGVyJywgJGZpbHRlciA9ICdub25lJywgJGRiID0gbnVsbCkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gcHJlcCBmb3IgcGxhY2Vob2xkZXJzDQoJCSRmID0gJyc7DQoJCSRiID0gJyc7DQoJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHBsYWNlaG9sZGVyIHByZWZpeA0KCQkJJHByZWZpeCA9IHNlbGY6OiRwYXJhbXMtPmdldCgncGxhY2Vob2xkZXJfcHJlZml4JywgJ1tbW2NvbXBvbmVudF1dXScpOw0KCQkJJGYgPSAnWycgLiAkcHJlZml4IC4gJ18nOw0KCQkJJGIgPSAnXSc7DQoJCX0NCgkJLy8gZ2V0IHN0YXR1cyBub3JtIGZpZWxkcw0KCQlpZiAobWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRTdGF0dXNOb3JtRmllbGRzJykpDQoJCXsNCgkJCSRub3JtcyA9IHNlbGY6OmdldFN0YXR1c05vcm1GaWVsZHMoKTsNCgkJfQ0KCQkvLyBnZXQgY2hhcnRzDQoJCWlmICgnY2hhcnQnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIgJiYgbWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRBdmFpbGFibGVDaGFydHMnKSkNCgkJew0KCQkJJGNoYXJ0cyA9IHNlbGY6OmdldEF2YWlsYWJsZUNoYXJ0cygpOw0KCQl9DQoJCS8vIG9ubHkgZ2V0IHdoYXQgd2UgbmVlZA0KCQlpZiAoJ3Byb2ZpbGUnID09PSAkZmlsdGVyKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGZpZWxkcy9jb2x1bW5zDQoJCQkkY29sdW1ucyA9IGFycmF5KCdpZCcsICdjcmVhdGVkJywgJ21vZGlmaWVkJywgJ25hbWUnKTsNCgkJfQ0KCQkvLyBzZXQgdGhlIHZhbHVlcyB5b3Ugd2FudCB0byByZW1vdmUgYWZ0ZXIgbW9kZWxpbmcNCgkJZWxzZWlmICgncmVtb3ZlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gcmVtb3ZlIHBhcmFtcyBhbHdheXMNCgkJCSRyZW1vdmUgPSBhcnJheSgkZiAuICdwYXJhbXMnIC4gJGIpOw0KCQkJLy8gcmVtb3ZlIHRoZSBub3JtcyBpZiBmb3VuZA0KCQkJaWYgKGlzc2V0KCRub3JtcykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG5vcm1zKSkNCgkJCXsNCgkJCQlmb3JlYWNoICgkbm9ybXMgYXMgJG5vcm0pDQoJCQkJew0KCQkJCQkkcmVtb3ZlW10gPSAkZiAuICdzdGF0dXNfJyAuICRub3JtIC4gJGI7DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRyZW1vdmU7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBEQiBvYmplY3QNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRiKSkNCgkJCXsNCgkJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBjb2x1bW5zIG9mIHRoaXMgdGFibGUNCgkJCSRjb2x1bW5zID0gJGRiLT5nZXRUYWJsZUNvbHVtbnMoIiNfX1tbW2NvbXBvbmVudF1dXV8iIC4gJHRhYmxlLCBmYWxzZSk7DQoJCQkvLyBhbHdheXMgcmVtb3ZlIHRoZXNlDQoJCQkkcmVtb3ZlID0gYXJyYXkoJ2Fzc2V0X2lkJywgJ2NoZWNrZWRfb3V0JywgJ2NoZWNrZWRfb3V0X3RpbWUnKTsNCgkJCS8vIGlmIHBsYWNlaG9sZGVyIGFuZCBub25lIGZpbHRlciB0aGVuIHJlbW92ZSBzb21lIG1vcmUNCgkJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kICYmICgncmVwb3J0JyA9PT0gJGZpbHRlciB8fCAnZW1haWwnID09PSAkZmlsdGVyKSkNCgkJCXsNCgkJCQkkcmVtb3ZlW10gPSAnYWNjZXNzJzsNCgkJCQkkcmVtb3ZlW10gPSAnY3JlYXRlZF9ieSc7DQoJCQkJJHJlbW92ZVtdID0gJ29yZGVyaW5nJzsNCgkJCQkkcmVtb3ZlW10gPSAndmVyc2lvbic7DQoJCQkJJHJlbW92ZVtdID0gJ3BhcmFtcyc7DQoJCQkJJHJlbW92ZVtdID0gJ3B1Ymxpc2hlZCc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnbW9kaWZpZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdoaXRzJzsNCgkJCX0NCgkJCS8vIHJlbW92ZQ0KCQkJZm9yZWFjaCAoJHJlbW92ZSBhcyAka2V5KQ0KCQkJew0KCQkJCXVuc2V0KCRjb2x1bW5zWyRrZXldKTsNCgkJCX0NCgkJCS8vIHByZXAgdGhlIGNvbHVtbnMNCgkJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkY29sdW1ucyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY29sdW1ucw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbHVtbnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBjb2x1bW5zIGZvciBxdWVyeSBzZWxlY3Rpb24NCgkJCSRzZWxlY3Rpb24gPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGNvbHVtbnMgYXMgJGNvbHVtbikNCgkJCXsNCgkJCQkkc2VsZWN0aW9uWydhLicgLiAkY29sdW1uXSA9ICRmIC4gJGNvbHVtbiAuICRiOw0KCQkJCS8vIHdlIG11c3QgYWRkIHRoZSBwYXJhbXMNCgkJCQlpZiAoJ3Byb2ZpbGUnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIpDQoJCQkJew0KCQkJCQkvLyBzZXQgdGhlIGxhYmVsIGZvciB0aGVzZSBmaWVsZHMNCgkJCQkJJHNlbGVjdGlvblsnc2V0TGFiZWwtPicgLiAkY29sdW1uXSA9ICRmIC4gJ2xhYmVsXycgLiAkY29sdW1uIC4gJGI7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gYWRkIHRoZSBsaW5rZWQgdmFsdWVzDQoJCQkkc2VsZWN0aW9uWydzLm5hbWUnXSA9ICRmIC4gJ3NlY3Rvcl9uYW1lJyAuICRiOw0KCQkJJHNlbGVjdGlvblsnZC5uYW1lJ10gPSAkZiAuICdkZXBhcnRtZW50X25hbWUnIC4gJGI7DQoJCQkvLyBzZXQgZGF0ZSBkZXRhaWxzDQoJCQkkc2VsZWN0aW9uWydzZXRZZWFyTW9udGhEYXk6c3RhcnRfZGF0ZSddID0gJGYgLiAnc3RhcnRfZGF0ZScgLiAkYjsNCgkJCSRzZWxlY3Rpb25bJ2ZhbmN5RGF0ZTpzdGFydF9kYXRlJ10gPSAkZiAuICdzdGFydF9kYXRlX2ZhbmN5JyAuICRiOw0KCQkJJHNlbGVjdGlvblsnc2V0WWVhck1vbnRoRGF5OmVuZF9kYXRlJ10gPSAkZiAuICdlbmRfZGF0ZScgLiAkYjsNCgkJCSRzZWxlY3Rpb25bJ2ZhbmN5RGF0ZTplbmRfZGF0ZSddID0gJGYgLiAnZW5kX2RhdGVfZmFuY3knIC4gJGI7DQoJCQkvLyB3ZSBtdXN0IGFkZCB0aGUgcGFyYW1zDQoJCQlpZiAoJ3Byb2ZpbGUnICE9PSAkZmlsdGVyKQ0KCQkJew0KCQkJCS8vIGRvIHNvbWUgY29udmVyc2lvbiBmb3IgY3JlYXRlZCBkYXRlDQoJCQkJaWYgKGluX2FycmF5KCdjcmVhdGVkJywgJGNvbHVtbnMpKQ0KCQkJCXsNCgkJCQkJJHNlbGVjdGlvblsnc2V0WWVhck1vbnRoRGF5OmNyZWF0ZWQnXSA9ICRmIC4gJ2RheScgLiAkYjsNCgkJCQkJJHNlbGVjdGlvblsnc2V0WWVhck1vbnRoOmNyZWF0ZWQnXSA9ICRmIC4gJ21vbnRoJyAuICRiOw0KCQkJCQkkc2VsZWN0aW9uWydmYW5jeURhdGU6Y3JlYXRlZCddID0gJGYgLiAnY3JlYXRlZCcgLiAkYjsNCgkJCQkJLy8gc2V0IGxhYmVsIGZvciBkYXkgYW5kIG1vbnRoDQoJCQkJCSRzZWxlY3Rpb25bJ3NldExhYmVsLT5kYXknXSA9ICRmIC4gJ2xhYmVsX2RheScgLiAkYjsNCgkJCQkJJHNlbGVjdGlvblsnc2V0TGFiZWwtPm1vbnRoJ10gPSAkZiAuICdsYWJlbF9tb250aCcgLiAkYjsNCgkJCQl9DQoJCQkJLy8gYWRkIHRoZSBub3JtcyBpZiBmb3VuZA0KCQkJCWlmIChpc3NldCgkbm9ybXMpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRub3JtcykpDQoJCQkJew0KCQkJCQlmb3JlYWNoICgkbm9ybXMgYXMgJG5vcm0pDQoJCQkJCXsNCgkJCQkJCWlmICgnZW1haWwnID09PSAkZmlsdGVyIHx8ICdyZXBvcnQnID09PSAkZmlsdGVyIHx8ICdmaWVsZCcgPT09ICRmaWx0ZXIgIHx8ICdjaGFydCcgPT09ICRmaWx0ZXIpDQoJCQkJCQl7DQoJCQkJCQkJJHNlbGVjdGlvblsnZ2V0VmFsdWVTdGF0dXM6JyAuICRub3JtLiAnfGFnZXxnZW5kZXInXSA9ICRmIC4gJ3N0YXR1c18nIC4gJG5vcm0gLiAkYjsNCgkJCQkJCX0NCgkJCQkJCS8vIGRvIG5vdCBsb2FkIGZvciBmaWVsZA0KCQkJCQkJaWYgKCdmaWVsZCcgIT09ICRmaWx0ZXIgJiYgJ2NoYXJ0JyAhPT0gJGZpbHRlcikNCgkJCQkJCXsNCgkJCQkJCQkkc2VsZWN0aW9uW10gPSAkZiAuICdzdGF0dXNfJyAuICRub3JtLiAnX3NjYWxlJyAuICRiOw0KCQkJCQkJCSRzZWxlY3Rpb25bXSA9ICRmIC4gJ3N0YXR1c18nIC4gJG5vcm0uICdfd29yZCcgLiAkYjsNCgkJCQkJCQkkc2VsZWN0aW9uW10gPSAkZiAuICdzdGF0dXNfJyAuICRub3JtLiAnX3RhYmxlJyAuICRiOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIGFkZCB0aGUgY2hhcnQgZGl2IGFuZCBKUyBjb2RlIChvbmx5IGlmIGZpbHRlciBpcyBub3QgY2hhcnQpDQoJCQkJaWYgKCdjaGFydCcgIT09ICRmaWx0ZXIgJiYgJ2ZpZWxkJyAhPT0gJGZpbHRlciAmJiBpc3NldCgkY2hhcnRzKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY2hhcnRzKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRjaGFydHMgYXMgJGNoYXJ0ID0+ICR2YWx1ZXMpDQoJCQkJCXsNCgkJCQkJCS8vIG1ha2Ugc3VyZSB0aGUgY2hhcnQgbmFtZSBpcyBzYXZlDQoJCQkJCQkkc2VsZWN0aW9uWydzZXRDaGFydENvZGUtPicgLiAkY2hhcnRdID0gJGYgLiAkY2hhcnQgLiAkYjsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkc2VsZWN0aW9uOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQpbQ1VTVE9NQ09ERT1nZXRQbGFjZUhvbGRlcnNSZXBvcnRdDQpbQ1VTVE9NQ09ERT1nZXRWYWx1ZVN0YXR1c10NCltDVVNUT01DT0RFPWdldFN0YXR1c05vcm1GaWVsZHNdDQpbQ1VTVE9NQ09ERT1nZXRDaGFydENvZGVdDQpbQ1VTVE9NQ09ERT1nZXRBdmFpbGFibGVDaGFydHNdDQpbQ1VTVE9NQ09ERT1nZXRNdWx0aUNoYXJ0RGF0YVRhYmxlXQ0KW0NVU1RPTUNPREU9Z2V0SGVscGVyQ2xhc3NdDQpbQ1VTVE9NQ09ERT1nZXRUZW1wbGF0ZV0NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQpbQ1VTVE9NQ09ERT1nZXRBTllUZW1wbGF0ZStBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllGb3JtRGV0YWlscytBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllDb21wYW55RGV0YWlscytBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPW1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1wYXJhbXNNb2RlbEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9bGFiZWxNb2RlbEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9dGVtcGxhdGVNb2RlbEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9Y2hhcnRNb2RlbEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9cmVtb3ZlQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1sb2FkUmVwb3J0VGFiXQ0KW0NVU1RPTUNPREU9Z2V0UmVwb3J0XQ0KW0NVU1RPTUNPREU9dGhlQnV0bGVyXQ0KW0NVU1RPTUNPREU9c2V0VGFiXQ0KW0NVU1RPTUNPREU9Z2V0TWVtYmVyTmFtZV0NCltDVVNUT01DT0RFPWJjbWF0aF0NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQpbQ1VTVE9NQ09ERT1nZXRCZXR3ZWVuXQ0KW0NVU1RPTUNPREU9Z2V0Q29yZU5hbWVd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Donor Funded Projects', '', '', 'Donor Funded Projects (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', 'UHkXmtEshVPYiMOPHun5etxQVJbdE7TwsUOniDLGDxc=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 17, '', 1, 27), +(47, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.7', 'Copyright (C) 2015. All Rights Reserved', '2018-12-17 13:44:13', '', '8KogkX0DGBXFLjRn89PBVw2v6bCMxl5JIcLRfxHqT3Y=', 'xHj9/R0B7h0jJc5mEbKXDwLLkPl7x81sIgNH637pf1E=', '', 'doZjfO8o56YZAFsCxzC9M5qGBHw/VyEqchNxp95a0WQ=', '', '', 'A_202', 2, '', 'Orthopedic', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_orthopedic', '3YAVq4fIs4AGim5iRlAS0IjrkUkh3kXpVSkwMUaIMnm2tTtK0Hz5q54IWoKBgZKM', '', 'fd4ac451-6e52-4381-9f0a-f4b30681a38d', 'images/membermanager300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2021-03-08 03:21:21', 2, 'Orthopedic', 'orthopedic', '', 4, '', '', 'W0NVU1RPTUNPREU9b3J0aG9wZWRpY0hlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Orthopedic', 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlYA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlYCAoYGlkYCwgYGFsaWFzYCwgYGRlc2NyaXB0aW9uYCwgYG5hbWVgLCBgcHVibGlzaGVkYCwgYGNyZWF0ZWRgKSBWQUxVRVMNCigxLCAnYWN0aXZlLXJhbmdlLW9mLW1vdGlvbicsICcnLCAnQWN0aXZlIFJhbmdlIG9mIE1vdGlvbicsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooMiwgJ2Z1bmN0aW9uYWwtbW92ZW1lbnRzJywgJycsICdGdW5jdGlvbmFsIE1vdmVtZW50cycsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooMywgJ21hbnVhbC1tdXNjbGUtdGVzdCcsICcnLCAnTWFudWFsIE11c2NsZSBUZXN0JywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCig0LCAnbXVzY2xlLWxlbmd0aCcsICcnLCAnTXVzY2xlIExlbmd0aCcsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooNSwgJ211c2NsZS1zdHJlbmd0aC10ZXN0JywgJycsICdNdXNjbGUgU3RyZW5ndGggVGVzdCcsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooNiwgJ211c2NsZS10ZXN0JywgJycsICdNdXNjbGUgVGVzdCcsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooNywgJ25ldXJvbG9naWNhbC1leGFtJywgJycsICdOZXVyb2xvZ2ljYWwgRXhhbScsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooOCwgJ3BhbHBhdGlvbicsICcnLCAnUGFscGF0aW9uJywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCig5LCAncGFzc2l2ZS1yYW5nZS1vZi1tb3Rpb24nLCAnJywgJ1Bhc3NpdmUgUmFuZ2Ugb2YgTW90aW9uJywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCigxMCwgJ3NwZWNpYWwtdGVzdCcsICcnLCAnU3BlY2lhbCBUZXN0JywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCigxMSwgJ3N0cmVuZ3RoLXRlc3QnLCAnJywgJ1N0cmVuZ3RoIFRlc3QnLCAxLCAnMjAxOC0xMi0xOCAyMzoyMDo0MycpOw==', '', 'Orthopedic (public)', '.git', '', '', 1, 'https://raw.githubusercontent.com/vdm-io/Joomla-Members-Manager/master/membersmanager_server.xml', 'http://www.vdm.io', '', '79hK57LOaEERbWSvsJ2uCUgeC2v7Y9XGr7uYTA9yCZw=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 38, '', 1, 26), +(48, 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, 1, '{}', 3, '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2019-02-04 21:30:52', 1, 'cNJiur6BS8xT5BJp6M0QouQXp9BIhMdOKI0f98GwqKM=', 'daG3mVWavTJSf9unuChgSHkKoxbbPYXKS3yT17wHVEA=', '', '3xiTEv9mFVpLvXpCi9vYbSxw0wIVHilpdD12oPdQn7E=', '', 'LmZpZWxkLWNhbGVuZGFyIGlucHV0IHsNCglmb250OmNhcHRpb24gIWltcG9ydGFudDsNCn0=', 'A_177', 2, '', 'Coral is a system of integration that allows many diverse concepts to co exist.', 'joomla@vdm.io', '', '', 'HqMQciOxsDF38VTMdkXa3SAfmSBbWgwwI2wOQzgUnehKN8RNjPlgKBfU5gjhnkm6oiYo8EPLiIXwktqPHmtJxGKzUOdckz3fXAkdO2Om9Fs=', '', '3ff9d8f6-11a0-4f2c-9353-1895cf5810fc', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '★', '2021-12-19 22:22:11', 2, 'Coral', 'coral', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9bWVtYmVybWFuYWdlckhlbHBlckJvdGhdDQpbQ1VTVE9NQ09ERT1jYW5BY2Nlc3NNZW1iZXJd', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'The Beauty of Integration', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGAgKA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTsNCg0KQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbl9tYXBgICgNCglgcmVsYXRpb25gIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTs=', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGA7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3JlbGF0aW9uX21hcGA7', 'Coral', '.git', '', 3, 1, 'https://io.vdm.dev/update/coral_update_server.xml', 'https://www.vdm.io/', '', 'lR119LmUKB2wvDxdXvkP8+HxiLXH6bUZvhgRgQ8mNh8=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"0\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"}}', 1, 15, '', 1, 25), +(49, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'joomla_basic.txt', '', '', 'Vast Development Method', '1.0.0', 'Copyright (C) 2020. All Rights Reserved', '2019-02-06 20:27:41', '', 'qi7pclcRmViYcJ3HlGS8Z4EO7WvLPMXdFbpOXaO0HKo=', 'UKpPHjDizbeiqz9bOeJZnawh0fBaqWzX2+KIu2eF0us=', '', '1YrQH07qqwW4vfxK3+/kjkA3y7NtHVjkFMBQzbX0Q2U=', '', '', 'A_86', 2, '', 'Company Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_companies', 'IvHgukl+ExbWtxnsb4w/CqY1HGvjhOPvKkJxIY/+9WcfamkxSaK3Vkbq4QudMA4K', '', 'e906966f-c8c8-412e-8e3f-5817b1fe756b', 'images/vdm/INTER500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '⊛', '2021-03-08 03:17:57', 2, 'Company', 'tradeshow_company', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEdldCBzZWxlY3Rpb24gIGJhc2VkIG9uIHR5cGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIG1haW4gdGFibGUgdG8gc2VsZWN0DQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZCAgICBUaGUgdHlwZSBvZiB2YWx1ZXMgdG8gcmV0dXJuDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGZpbHRlciAgICBUaGUga2luZCBvZiBmaWx0ZXIgKHRvIHJldHVybiBvbmx5IHZhbHVlcyByZXF1aXJlZCkNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkZGIgICAgIFRoZSBkYXRhYmFzZSBvYmplY3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0YWJsZSA9ICdmb3JtJywgJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicsICRmaWx0ZXIgPSAnbm9uZScsICRkYiA9IG51bGwpDQoJew0KCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCS8vIHByZXAgZm9yIHBsYWNlaG9sZGVycw0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCkNCgkJew0KCQkJLy8gZ2V0IHRoZSBwbGFjZWhvbGRlciBwcmVmaXgNCgkJCSRwcmVmaXggPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3BsYWNlaG9sZGVyX3ByZWZpeCcsICdbW1tjb21wb25lbnRdXV0nKTsNCgkJCSRmID0gJ1snIC4gJHByZWZpeCAuICdfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIG9ubHkgZ2V0IHdoYXQgd2UgbmVlZA0KCQlpZiAoJ3Byb2ZpbGUnID09PSAkZmlsdGVyKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGZpZWxkcy9jb2x1bW5zDQoJCQlpZiAoKCRmaWVsZHMgPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3Byb2ZpbGVfZmllbGRzJywgZmFsc2UpKSAhPT0gZmFsc2UgJiYgU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGZpZWxkcykpDQoJCQl7DQoJCQkJJGNvbHVtbnMgPSBhcnJheSgnaWQnKTsgLy8gbmVlZGVkIGZvciBwZXJtaXNzaW9uIGNoZWNrDQoJCQkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpDQoJCQkJew0KCQkJCQkkY29sdW1uc1tdID0gJGZpZWxkLT5maWVsZDsNCgkJCQl9DQoJCQkJLy8gYWRkIGRhdGVzIGZvciBkaXNwbGF5DQoJCQkJJGNvbHVtbnNbXSA9ICdjcmVhdGVkJzsNCgkJCQkkY29sdW1uc1tdID0gJ21vZGlmaWVkJzsNCgkJCX0NCgkJfQ0KCQkvLyBzZXQgdGhlIHZhbHVlcyB5b3Ugd2FudCB0byByZW1vdmUgYWZ0ZXIgbW9kZWxpbmcNCgkJZWxzZWlmICgncmVtb3ZlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gbm90aW5nIHRvIHJlbW92ZQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgREIgb2JqZWN0DQoJCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRkYikpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZGF0YWJhc2UgY29sdW1ucyBvZiB0aGlzIHRhYmxlDQoJCQkkY29sdW1ucyA9ICRkYi0+Z2V0VGFibGVDb2x1bW5zKCIjX19bW1tjb21wb25lbnRdXV1fIiAuICR0YWJsZSwgZmFsc2UpOw0KCQkJLy8gYWx3YXlzIHJlbW92ZSB0aGVzZQ0KCQkJJHJlbW92ZSA9IGFycmF5KCdhc3NldF9pZCcsICdjaGVja2VkX291dCcsICdjaGVja2VkX291dF90aW1lJyk7DQoJCQkvLyBpZiBwbGFjZWhvbGRlciBhbmQgbm9uZSBmaWx0ZXIgdGhlbiByZW1vdmUgc29tZSBtb3JlDQoJCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCAmJiAoJ3JlcG9ydCcgPT09ICRmaWx0ZXIgfHwgJ2VtYWlsJyA9PT0gJGZpbHRlcikpDQoJCQl7DQoJCQkJJHJlbW92ZVtdID0gJ3BhcmFtcyc7DQoJCQkJJHJlbW92ZVtdID0gJ2FjY2Vzcyc7DQoJCQkJJHJlbW92ZVtdID0gJ2NyZWF0ZWRfYnknOw0KCQkJCSRyZW1vdmVbXSA9ICdpZCc7DQoJCQkJJHJlbW92ZVtdID0gJ29yZGVyaW5nJzsNCgkJCQkkcmVtb3ZlW10gPSAndmVyc2lvbic7DQoJCQkJJHJlbW92ZVtdID0gJ3B1Ymxpc2hlZCc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnbW9kaWZpZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdoaXRzJzsNCgkJCX0NCgkJCS8vIHJlbW92ZQ0KCQkJZm9yZWFjaCAoJHJlbW92ZSBhcyAka2V5KQ0KCQkJew0KCQkJCXVuc2V0KCRjb2x1bW5zWyRrZXldKTsNCgkJCX0NCgkJCS8vIHByZXAgdGhlIGNvbHVtbnMNCgkJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkY29sdW1ucyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY29sdW1ucw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbHVtbnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBjb2x1bW5zIGZvciBxdWVyeSBzZWxlY3Rpb24NCgkJCSRzZWxlY3Rpb24gPSBhcnJheSgpOw0KCQkJLy8gbG9hZCB0aGUgY29sdW1ucyB0byBzZWxlY3Rpb24NCgkJCWZvcmVhY2ggKCRjb2x1bW5zIGFzICRjb2x1bW4pDQoJCQl7DQoJCQkJJHNlbGVjdGlvblsnYS4nIC4gJGNvbHVtbl0gPSAkZiAuICRjb2x1bW4gLiAkYjsNCgkJCQkvLyB3ZSBtdXN0IGFkZCB0aGUgbGFiZWxzDQoJCQkJaWYgKCdwcm9maWxlJyAhPT0gJGZpbHRlciAmJiAnZmllbGQnICE9PSAkZmlsdGVyKQ0KCQkJCXsNCgkJCQkJLy8gc2V0IHRoZSBsYWJlbCBmb3IgdGhlc2UgZmllbGRzDQoJCQkJCSRzZWxlY3Rpb25bJ3NldExhYmVsLT4nIC4gJGNvbHVtbl0gPSAkZiAuICdsYWJlbF8nIC4gJGNvbHVtbiAuICRiOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkc2VsZWN0aW9uOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQpbQ1VTVE9NQ09ERT1nZXRGb2xkZXJQYXRoXQ0KW0NVU1RPTUNPREU9dGhlQnV0bGVyXQ0KW0NVU1RPTUNPREU9Z2V0UGxhY2VIb2xkZXJzUmVwb3J0XQ0KW0NVU1RPTUNPREU9Z2V0QU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1tb2RlbEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9bGFiZWxNb2RlbEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9cmVtb3ZlQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1nZXRNZW1iZXJOYW1lXQ0KW0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0NCltDVVNUT01DT0RFPWdldENvcmVOYW1lXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'Company Details', '', '', 'Company (tradeshow)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_companydetails_server.xml', 'http://www.vdm.io', '', 'P1gnb8JQEfs7tcSvkg6Swf2UhDZeDksNNBaerj9gWek=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 21, '', 1, 24), +(50, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.11', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 20:06:53', '', '4diAWcihanuttZ0jDXOo1UZosKniJAFHtkSlzOdB1Gc=', 'ZTymcvrTiJzWQyyRUh5xR0o4fs1N1oVU2s7OdYGytlo=', '', '8oZJl/ju/2LPdpwdoTW3YQOA3Obo7mdPx8BFs8M+MEw=', '', '', 'A_101', 2, '', 'Anthropometry', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_anthropometry', 'ECWXtQIFbWanedMA0C1fow6UxJdw41EEoNxrrOAwclDi/Q16K9ttdJvcG+ij0kOJkOiknEZPlGPn7ZOG9x1BUw==', '', '25a25b20-e7b7-465b-a398-4a6cb1448a13', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2021-12-19 22:28:04', 2, 'Anthropometry', 'coral_anthropometry', '', 4, '', '', 'W0NVU1RPTUNPREU9YW50aHJvcG9tZXRyeUhlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Anthropometry', 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9zdGF0dXNfbm9ybWANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fc3RhdHVzX25vcm1gIChgaWRgLCBgY2FsY3VsYXRpb25fdHlwZWAsIGBjYWxjdWxhdGlvbnNgLCBgc2VsZWN0aW9uYCwgYHRlbXBsYXRlc2AsIGBwdWJsaXNoZWRgLCBgY3JlYXRlZGApIFZBTFVFUw0KKDEsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMTAsIDI0LjlcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMjUsIDI5LjlcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMzAsIDQwXCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjQxLCAyMDBcIn19JywgJ2JtaScsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJkZXNpcmFibGVcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkRlc2lyYWJsZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R3JhZGUgMSBPYmVzaXR5PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdyYWRlIDMgT2Jlc2l0eVxcL01vcmJpZDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkRlc2lyYWJsZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDIgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R3JhZGUgMyBPYmVzaXR5XFwvTW9yYmlkPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8XFwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2VzcyB1ay12aXNpYmxlLXNtYWxsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+RGVzaXJhYmxlPFxcL2J1dHRvbj5cIn0sXCJ0ZW1wbGF0ZXMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJ3b3JkXCI6XCJncmFkZSAxIG9iZXNpdHlcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RGVzaXJhYmxlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R3JhZGUgMSBPYmVzaXR5PFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdyYWRlIDMgT2Jlc2l0eVxcL01vcmJpZDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5EZXNpcmFibGU8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDIgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R3JhZGUgMyBPYmVzaXR5XFwvTW9yYmlkPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8XFwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnkgdWstdmlzaWJsZS1zbWFsbFxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiZ3JhZGUgMiBvYmVzaXR5XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkRlc2lyYWJsZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R3JhZGUgMSBPYmVzaXR5PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2UyODMyN1xcXCI+PGI+R3JhZGUgMiBPYmVzaXR5PFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5HcmFkZSAzIE9iZXNpdHlcXC9Nb3JiaWQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RGVzaXJhYmxlPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R3JhZGUgMSBPYmVzaXR5PFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDMgT2Jlc2l0eVxcL01vcmJpZDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAyIE9iZXNpdHk8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdyYWRlIDMgb2Jlc2l0eVxcL21vcmJpZFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5EZXNpcmFibGU8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdyYWRlIDEgT2Jlc2l0eTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R3JhZGUgMiBPYmVzaXR5PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+R3JhZGUgMyBPYmVzaXR5XFwvTW9yYmlkPFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkRlc2lyYWJsZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDEgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdyYWRlIDIgT2Jlc2l0eTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAzIE9iZXNpdHlcXC9Nb3JiaWQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5HcmFkZSAzIE9iZXNpdHlcXC9Nb3JiaWQ8XFwvYnV0dG9uPlwifX0nLCAxLCAnMjAxOC0wOS0wNyAxOTo0MTo1NScpLA0KKDIsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMC45NTksIDIwLjAwXCJ9LFwiY2FsY3VsYXRpb25zMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAuOTEsIDAuOTU4XCJ9LFwiY2FsY3VsYXRpb25zMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAuMDAwMDAxLCAwLjk1XCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAuODU5LCAyMFwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIwLjgxLCAwLjg1OFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIwLjAwLCAwLjgwXCJ9fScsICd3aHInLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwiaGlnaCByaXNrXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5IaWdoIHJpc2s8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPk1vZGVyYXRlIHJpc2s8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkxvdyByaXNrPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+SGlnaCByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+TW9kZXJhdGUgcmlzazxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+TG93IHJpc2s8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5IaWdoIHJpc2s8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcIm1vZGVyYXRlIHJpc2tcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+SGlnaCByaXNrPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+TW9kZXJhdGUgcmlzazxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+TG93IHJpc2s8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+SGlnaCByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Nb2RlcmF0ZSByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Mb3cgcmlzazxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Nb2RlcmF0ZSByaXNrPFxcL2J1dHRvbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJsb3cgcmlza1wiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5IaWdoIHJpc2s8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPk1vZGVyYXRlIHJpc2s8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5Mb3cgcmlzazxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5IaWdoIHJpc2s8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Nb2RlcmF0ZSByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPkxvdyByaXNrPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8XFwvc3Bhbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2VzcyB1ay12aXNpYmxlLXNtYWxsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+TG93IHJpc2s8XFwvYnV0dG9uPlwifX0nLCAxLCAnMjAxOC0wOS0wNyAxOTo0OToxMScpLA0KKDMsIDEsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjIyLjRcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjE3LjRcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjE1LjlcIn0sXCJjYWxjdWxhdGlvbnMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjE0LjFcIn0sXCJjYWxjdWxhdGlvbnM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjkuNFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjQuMlwifSxcImNhbGN1bGF0aW9uczZcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjAuNVwifSxcImNhbGN1bGF0aW9uczdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMTlcIn0sXCJjYWxjdWxhdGlvbnM4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjE3LjVcIn0sXCJjYWxjdWxhdGlvbnM5XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjEzLjlcIn0sXCJjYWxjdWxhdGlvbnMxMFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyNi4xXCJ9LFwiY2FsY3VsYXRpb25zMTFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjIuNVwifSxcImNhbGN1bGF0aW9uczEyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIxLjFcIn0sXCJjYWxjdWxhdGlvbnMxM1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIxOS42XCJ9LFwiY2FsY3VsYXRpb25zMTRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMTYuM1wifSxcImNhbGN1bGF0aW9uczE1XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjI3LjVcIn0sXCJjYWxjdWxhdGlvbnMxNlwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyNC4xXCJ9LFwiY2FsY3VsYXRpb25zMTdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMjIuN1wifSxcImNhbGN1bGF0aW9uczE4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjIxLjNcIn0sXCJjYWxjdWxhdGlvbnMxOVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxNy45XCJ9LFwiY2FsY3VsYXRpb25zMjBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjguNVwifSxcImNhbGN1bGF0aW9uczIxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjI1XCJ9LFwiY2FsY3VsYXRpb25zMjJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjMuNVwifSxcImNhbGN1bGF0aW9uczIzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjIyXCJ9LFwiY2FsY3VsYXRpb25zMjRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMTguNFwifSxcImNhbGN1bGF0aW9uczI1XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjI3LjdcIn0sXCJjYWxjdWxhdGlvbnMyNlwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIyMy43XCJ9LFwiY2FsY3VsYXRpb25zMjdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjIuMVwifSxcImNhbGN1bGF0aW9uczI4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjIwLjZcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIxNy4xXCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjkuM1wifSxcImNhbGN1bGF0aW9uczMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjI0LjlcIn0sXCJjYWxjdWxhdGlvbnMzMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyMy4xXCJ9LFwiY2FsY3VsYXRpb25zMzNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjEuNlwifSxcImNhbGN1bGF0aW9uczM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjE4XCJ9LFwiY2FsY3VsYXRpb25zMzVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMzIuMVwifSxcImNhbGN1bGF0aW9uczM2XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjI4LjFcIn0sXCJjYWxjdWxhdGlvbnMzN1wiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyNi40XCJ9LFwiY2FsY3VsYXRpb25zMzhcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjQuOVwifSxcImNhbGN1bGF0aW9uczM5XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIxLjNcIn0sXCJjYWxjdWxhdGlvbnM0MFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIzNS42XCJ9LFwiY2FsY3VsYXRpb25zNDFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMzEuNlwifSxcImNhbGN1bGF0aW9uczQyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjMwLjFcIn0sXCJjYWxjdWxhdGlvbnM0M1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyOC41XCJ9LFwiY2FsY3VsYXRpb25zNDRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMjVcIn0sXCJjYWxjdWxhdGlvbnM0NVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzNi42XCJ9LFwiY2FsY3VsYXRpb25zNDZcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMzIuNVwifSxcImNhbGN1bGF0aW9uczQ3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjMwLjlcIn0sXCJjYWxjdWxhdGlvbnM0OFwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIyOS4zXCJ9LFwiY2FsY3VsYXRpb25zNDlcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjUuMVwifX0nLCAnZmF0X3BlcmNlbnRhZ2UnLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+UG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXIgdWstdmlzaWJsZS1zbWFsbFxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay12aXNpYmxlLXNtYWxsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XCcjdmRtLXN0YXR1cy1kZWZhdWx0c1wnfVxcXCI+RmFpcjxcXC9idXR0b24+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiYXZlcmFnZVwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+QXZlcmFnZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5BdmU8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PFxcL3NwYW4+XFxyXFxuXFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5BdmU8XFwvYnV0dG9uPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkdvb2Q8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cIn0sXCJ0ZW1wbGF0ZXM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJ3b3JkXCI6XCJleGNlbGxlbnRcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdFxcdFxcdFxcdFxcdDxcXC9zcGFuPlxcclxcblxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzIHVrLXZpc2libGUtc21hbGxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlwifX0nLCAxLCAnMjAxOC0wOS0wNyAyMDowMToyMycpOw0KDQotLQ0KLS0gRHVtcGluZyBkYXRhIGZvciB0YWJsZSBgI19fW1tbY29tcG9uZW50XV1dX2NoYXJ0YA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX1tbW2NvbXBvbmVudF1dXV9jaGFydGAgKGBpZGAsIGBkZXRhaWxzYCwgYGphdmFzY3JpcHRfdGFibGVgLCBgbmFtZWAsIGBudW1iZXJgLCBgdGFyZ2V0YCwgYHRhcmdldF9maWVsZHNgLCBgdHlwZWAsIGBwdWJsaXNoZWRgLCBgY3JlYXRlZGApIFZBTFVFUw0KKDEsICd7XCJkYXRhVGFibGVcIjp7XCJjb2xzXCI6W3tcImxhYmVsXCI6XCJMYWJlbFwiLFwidHlwZVwiOlwic3RyaW5nXCJ9LHtcImxhYmVsXCI6XCJWYWx1ZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCJMZWFuIFdlaWdodFwifSx7XCJ2XCI6OTIuMzR9XX0se1wiY1wiOlt7XCJ2XCI6XCJGYXQgV2VpZ2h0XCJ9LHtcInZcIjoxOS42NX1dfV19LFwib3B0aW9uc1wiOntcImZvbnROYW1lXCI6XCJWZXJkYW5hXCIsXCJoQXhpc1wiOntcInVzZUZvcm1hdEZyb21EYXRhXCI6dHJ1ZSxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGx9LFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwibm9uZVwiLFwibGVnZW5kVGV4dFN0eWxlXCI6e1wiY29sb3JcIjpcIiMyMjJcIixcImZvbnRTaXplXCI6MTIsXCJib2xkXCI6dHJ1ZSxcIml0YWxpY1wiOnRydWV9LFwidGl0bGVcIjpcIkJvZHkgV2VpZ2h0XCIsXCJ0aXRsZVRleHRTdHlsZVwiOntcImNvbG9yXCI6XCIjMDAwXCIsXCJmb250U2l6ZVwiOlwiMjBcIixcImJvbGRcIjp0cnVlfSxcInZBeGVzXCI6W3tcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJsb2dTY2FsZVwiOmZhbHNlfSx7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwibG9nU2NhbGVcIjpmYWxzZX1dLFwidHlwZVwiOlwibGluZVwiLFwiYm9vbGVhblJvbGVcIjpcImNlcnRhaW50eVwiLFwic2VyaWVzXCI6W3tcInR5cGVcIjpcImJhcnNcIn0se1widHlwZVwiOlwiYmFyc1wifSx7XCJ0eXBlXCI6XCJiYXJzXCJ9LHtcInR5cGVcIjpcImJhcnNcIn0se1widHlwZVwiOlwiYmFyc1wifV0sXCJ3aWR0aFwiOjYwMCxcImhlaWdodFwiOjM3MSxcImlzM0RcIjp0cnVlLFwicGllSG9sZVwiOjAsXCJzbGljZXNcIjp7XCIwXCI6e1wiY29sb3JcIjpcIiM5M2M0N2RcIn0sXCIxXCI6e1wiY29sb3JcIjpcIiNiNGE3ZDZcIn19LFwicGllU2xpY2VUZXh0XCI6XCJsYWJlbFwiLFwidGhlbWVcIjpcIm1heGltaXplZFwifSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIlBpZUNoYXJ0XCJ9JywgJyhMYWJlbCwgVmFsdWUpXHJcbihbYW50aHJvcG9tZXRyeV9sYWJlbF9sZWFuX3dlaWdodF0sIFthbnRocm9wb21ldHJ5X2xlYW5fd2VpZ2h0XSlcclxuKFthbnRocm9wb21ldHJ5X2xhYmVsX2ZhdF93ZWlnaHRdLCBbYW50aHJvcG9tZXRyeV9mYXRfd2VpZ2h0XSknLCAnQm9keSBXZWlnaHQnLCAzLCAxLCAne1widGFyZ2V0X2ZpZWxkczBcIjp7XCJzZWxlY3Rpb25cIjpcImxlYW5fd2VpZ2h0XCJ9LFwidGFyZ2V0X2ZpZWxkczFcIjp7XCJzZWxlY3Rpb25cIjpcImZhdF93ZWlnaHRcIn19JywgJ1BpZUNoYXJ0JywgMSwgJzIwMTgtMDktMjcgMTA6Mzg6NDMnKSwNCigyLCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiRGF5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn0se1wibGFiZWxcIjpcIkJNSVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJGYXQgUGVyY2VudGFnZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzEwLzA4XCJ9LHtcInZcIjozMi43Mn0se1widlwiOjIzLjYzfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8xMC8wNFwifSx7XCJ2XCI6MzIuNzJ9LHtcInZcIjoyMy42M31dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOjMyLjcyfSx7XCJ2XCI6MTcuNTV9XX0se1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzA5LzEwXCJ9LHtcInZcIjozMi43Mn0se1widlwiOjE3LjU1fV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOVwifSx7XCJ2XCI6MzAuNTV9LHtcInZcIjoyOC4yfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOFwifSx7XCJ2XCI6MzIuNzJ9LHtcInZcIjoyNi43MX1dfV19LFwib3B0aW9uc1wiOntcImhBeGlzXCI6e1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwic2xhbnRlZFRleHRBbmdsZVwiOjMwLFwic2xhbnRlZFRleHRcIjp0cnVlLFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidmlld1dpbmRvd1wiOm51bGwsXCJ2aWV3V2luZG93TW9kZVwiOm51bGx9LFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwiaW5cIixcInRpdGxlXCI6XCJQcm9ncmVzc1wiLFwidkF4ZXNcIjpbe1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwidmlld1dpbmRvd1wiOntcIm1heFwiOm51bGwsXCJtaW5cIjpudWxsfSxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcImxvZ1NjYWxlXCI6ZmFsc2V9LHtcInVzZUZvcm1hdEZyb21EYXRhXCI6dHJ1ZSxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJsb2dTY2FsZVwiOmZhbHNlfV0sXCJpc1N0YWNrZWRcIjpmYWxzZSxcImJvb2xlYW5Sb2xlXCI6XCJjZXJ0YWludHlcIixcIndpZHRoXCI6NjAwLFwiaGVpZ2h0XCI6MzcxLFwibGluZVdpZHRoXCI6MixcImludGVycG9sYXRlTnVsbHNcIjp0cnVlLFwiZG9tYWluQXhpc1wiOntcImRpcmVjdGlvblwiOi0xfSxcImN1cnZlVHlwZVwiOlwiZnVuY3Rpb25cIixcInNlcmllc1wiOntcIjBcIjp7XCJ0YXJnZXRBeGlzSW5kZXhcIjoxLFwiZXJyb3JCYXJzXCI6e1wiZXJyb3JUeXBlXCI6XCJub25lXCJ9fSxcIjFcIjp7XCJ0YXJnZXRBeGlzSW5kZXhcIjowLFwiZXJyb3JCYXJzXCI6e1wiZXJyb3JUeXBlXCI6XCJub25lXCIsXCJtYWduaXR1ZGVcIjoxMH19fSxcInRoZW1lXCI6XCJtYXhpbWl6ZWRcIixcImZvY3VzVGFyZ2V0XCI6XCJjYXRlZ29yeVwifSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIkxpbmVDaGFydFwifScsICcoRGF5LCBbYW50aHJvcG9tZXRyeV9sYWJlbF9ibWldLCBbYW50aHJvcG9tZXRyeV9sYWJlbF9mYXRfcGVyY2VudGFnZV0pXHJcbihbMF9hbnRocm9wb21ldHJ5X2RheV0sIFswX2FudGhyb3BvbWV0cnlfYm1pXSwgWzBfYW50aHJvcG9tZXRyeV9mYXRfcGVyY2VudGFnZV0pXHJcbihbMV9hbnRocm9wb21ldHJ5X2RheV0sIFsxX2FudGhyb3BvbWV0cnlfYm1pXSwgWzFfYW50aHJvcG9tZXRyeV9mYXRfcGVyY2VudGFnZV0pXHJcbihbMl9hbnRocm9wb21ldHJ5X2RheV0sIFsyX2FudGhyb3BvbWV0cnlfYm1pXSwgWzJfYW50aHJvcG9tZXRyeV9mYXRfcGVyY2VudGFnZV0pJywgJ1Byb2dyZXNzJywgNCwgMywgJ3tcInRhcmdldF9maWVsZHMwXCI6e1wic2VsZWN0aW9uXCI6XCJkYXlcIn0sXCJ0YXJnZXRfZmllbGRzMVwiOntcInNlbGVjdGlvblwiOlwiYm1pXCJ9LFwidGFyZ2V0X2ZpZWxkczJcIjp7XCJzZWxlY3Rpb25cIjpcImZhdF9wZXJjZW50YWdlXCJ9fScsICdMaW5lQ2hhcnQnLCAxLCAnMjAxOC0wOS0yNyAxMToyODozNycpLA0KKDMsICd7XCJkYXRhVGFibGVcIjp7XCJjb2xzXCI6W3tcImxhYmVsXCI6XCJEYXlcIixcInR5cGVcIjpcInN0cmluZ1wifSx7XCJsYWJlbFwiOlwiV2VpZ2h0XCIsXCJ0eXBlXCI6XCJudW1iZXJcIn1dLFwicm93c1wiOlt7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOjExMn1dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMDkvMTBcIn0se1widlwiOjExMn1dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMDkvMDlcIn0se1widlwiOjk5fV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOFwifSx7XCJ2XCI6MTEyfV19XX0sXCJvcHRpb25zXCI6e1widGl0bGVcIjpcIldlaWdodFwiLFwidkF4ZXNcIjpbe1widGl0bGVcIjpudWxsLFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwidmlld1dpbmRvd1wiOntcIm1heFwiOm51bGwsXCJtaW5cIjpudWxsfX0se1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwidmlld1dpbmRvd1wiOntcIm1heFwiOm51bGwsXCJtaW5cIjpudWxsfSxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbH1dLFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImN1cnZlVHlwZVwiOlwiZnVuY3Rpb25cIixcImJvb2xlYW5Sb2xlXCI6XCJjZXJ0YWludHlcIixcImxpbmVXaWR0aFwiOjIsXCJoQXhpc1wiOntcInVzZUZvcm1hdEZyb21EYXRhXCI6dHJ1ZSxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dcIjpudWxsLFwidmlld1dpbmRvd01vZGVcIjpudWxsLFwic2xhbnRlZFRleHRBbmdsZVwiOjMwLFwic2xhbnRlZFRleHRcIjp0cnVlLFwidGl0bGVcIjpcIlwifSxcImxlZ2VuZFwiOlwibm9uZVwiLFwid2lkdGhcIjo2MDAsXCJoZWlnaHRcIjozNzEsXCJkb21haW5BeGlzXCI6e1wiZGlyZWN0aW9uXCI6LTF9LFwic2VyaWVzXCI6e1wiMFwiOntcImNvbG9yXCI6XCIjNzQxYjQ3XCIsXCJ0YXJnZXRBeGlzSW5kZXhcIjowLFwibGluZVdpZHRoXCI6NCxcInBvaW50U2l6ZVwiOjEwfX0sXCJ0aGVtZVwiOlwibWF4aW1pemVkXCJ9LFwic3RhdGVcIjp7fSxcInZpZXdcIjp7XCJjb2x1bW5zXCI6bnVsbCxcInJvd3NcIjpudWxsfSxcImlzRGVmYXVsdFZpc3VhbGl6YXRpb25cIjp0cnVlLFwiY2hhcnRUeXBlXCI6XCJMaW5lQ2hhcnRcIn0nLCAnKERheSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfd2VpZ2h0XSlcclxuKFswX2FudGhyb3BvbWV0cnlfZGF5XSwgWzBfYW50aHJvcG9tZXRyeV93ZWlnaHRdKVxyXG4oWzFfYW50aHJvcG9tZXRyeV9kYXldLCBbMV9hbnRocm9wb21ldHJ5X3dlaWdodF0pXHJcbihbMl9hbnRocm9wb21ldHJ5X2RheV0sIFsyX2FudGhyb3BvbWV0cnlfd2VpZ2h0XSlcclxuKFszX2FudGhyb3BvbWV0cnlfZGF5XSwgWzNfYW50aHJvcG9tZXRyeV93ZWlnaHRdKVxyXG4oWzRfYW50aHJvcG9tZXRyeV9kYXldLCBbNF9hbnRocm9wb21ldHJ5X3dlaWdodF0pJywgJ1dlaWdodCcsIDUsIDMsICd7XCJ0YXJnZXRfZmllbGRzMFwiOntcInNlbGVjdGlvblwiOlwiZGF5XCJ9LFwidGFyZ2V0X2ZpZWxkczFcIjp7XCJzZWxlY3Rpb25cIjpcIndlaWdodFwifX0nLCAnTGluZUNoYXJ0JywgMSwgJzIwMTgtMTAtMDQgMjE6Mzc6MTgnKSwNCig0LCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiRGF5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn0se1wibGFiZWxcIjpcIkNhbGZcIixcInR5cGVcIjpcIm51bWJlclwifSx7XCJsYWJlbFwiOlwiQ2hlc3RcIixcInR5cGVcIjpcIm51bWJlclwifSx7XCJsYWJlbFwiOlwiSGlwXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIk1pZGRsZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJOYXZlbFwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJOZWNrXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIlRoaWdoXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIlVwcGVyIEFybVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzEwLzA4XCJ9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6MTA2LjV9LHtcInZcIjozMn0se1widlwiOm51bGx9LHtcInZcIjpudWxsfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8xMC8wOFwifSx7XCJ2XCI6NDIuNX0se1widlwiOjExM30se1widlwiOjg1fSx7XCJ2XCI6ODB9LHtcInZcIjoxMTB9LHtcInZcIjpudWxsfSx7XCJ2XCI6MjN9LHtcInZcIjoyM31dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOjQyLjV9LHtcInZcIjoxMTkuNX0se1widlwiOjEyNS4yfSx7XCJ2XCI6MTA2LjV9LHtcInZcIjoxMDYuNX0se1widlwiOm51bGx9LHtcInZcIjo2NS41fSx7XCJ2XCI6MzYuNX1dfSx7XCJjXCI6W3tcInZcIjpcIjIwMTgvMTAvMDRcIn0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjo4MH0se1widlwiOjMwfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9XX0se1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzA5LzEwXCJ9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6ODB9LHtcInZcIjozMH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8wOS8wOVwifSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9LHtcInZcIjpudWxsfSx7XCJ2XCI6bnVsbH0se1widlwiOjExMH0se1widlwiOjQ1fSx7XCJ2XCI6bnVsbH0se1widlwiOm51bGx9XX0se1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzA5LzA4XCJ9LHtcInZcIjo0Mi41fSx7XCJ2XCI6MTE5LjV9LHtcInZcIjoxMTUuNX0se1widlwiOjEwNi41fSx7XCJ2XCI6MTEyfSx7XCJ2XCI6bnVsbH0se1widlwiOjY1LjV9LHtcInZcIjozNi41fV19XX0sXCJvcHRpb25zXCI6e1wibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwibm9uZVwiLFwidGl0bGVcIjpcIkNpcmN1bWZlcmVuY2VzXCIsXCJ2QXhlc1wiOlt7XCJ0aXRsZVwiOm51bGwsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfSx7XCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfV0sXCJib29sZWFuUm9sZVwiOlwiY2VydGFpbnR5XCIsXCJsaW5lV2lkdGhcIjoyLFwiaEF4aXNcIjp7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6bnVsbCxcInZpZXdXaW5kb3dNb2RlXCI6bnVsbCxcInRleHRTdHlsZVwiOntcImNvbG9yXCI6XCIjMjIyXCIsXCJmb250U2l6ZVwiOlwiMTJcIixcIml0YWxpY1wiOmZhbHNlfSxcInNsYW50ZWRUZXh0QW5nbGVcIjo2MCxcInNsYW50ZWRUZXh0XCI6dHJ1ZX0sXCJ3aWR0aFwiOjYwMCxcImhlaWdodFwiOjM3MSxcImludGVycG9sYXRlTnVsbHNcIjp0cnVlLFwiZm9jdXNUYXJnZXRcIjpcImNhdGVnb3J5XCIsXCJzZXJpZXNcIjp7XCIwXCI6e1widGFyZ2V0QXhpc0luZGV4XCI6MX0sXCIyXCI6e1widGFyZ2V0QXhpc0luZGV4XCI6MSxcImxpbmVXaWR0aFwiOjJ9LFwiM1wiOntcInRhcmdldEF4aXNJbmRleFwiOjF9fSxcImRvbWFpbkF4aXNcIjp7XCJkaXJlY3Rpb25cIjoxfSxcImN1cnZlVHlwZVwiOlwiZnVuY3Rpb25cIixcImZvbnROYW1lXCI6XCJWZXJkYW5hXCIsXCJ0aXRsZVRleHRTdHlsZVwiOntcImNvbG9yXCI6XCIjMDAwXCIsXCJmb250U2l6ZVwiOjEyLFwiYm9sZFwiOnRydWUsXCJpdGFsaWNcIjp0cnVlfX0sXCJzdGF0ZVwiOnt9LFwidmlld1wiOntcImNvbHVtbnNcIjpudWxsLFwicm93c1wiOm51bGx9LFwiaXNEZWZhdWx0VmlzdWFsaXphdGlvblwiOmZhbHNlLFwiY2hhcnRUeXBlXCI6XCJMaW5lQ2hhcnRcIn0nLCAnKERheSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfY2FsZl0sIFthbnRocm9wb21ldHJ5X2xhYmVsX2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfaGlwXSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfbWlkZGxlXSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbYW50aHJvcG9tZXRyeV9sYWJlbF9jaXJjdW1mZXJlbmNlc19uZWNrXSwgW2FudGhyb3BvbWV0cnlfbGFiZWxfY2lyY3VtZmVyZW5jZXNfdGhpZ2hdLCBbYW50aHJvcG9tZXRyeV9sYWJlbF9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzBfYW50aHJvcG9tZXRyeV9kYXldLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzBfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFswX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbMF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzBfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzFfYW50aHJvcG9tZXRyeV9kYXldLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzFfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFsxX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbMV9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzFfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzJfYW50aHJvcG9tZXRyeV9kYXldLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzJfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFsyX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbMl9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzJfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzNfYW50aHJvcG9tZXRyeV9kYXldLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzNfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFszX2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbM19hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzNfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4oWzRfYW50aHJvcG9tZXRyeV9kYXldLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NhbGZdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX2NoZXN0XSwgWzRfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc19oaXBdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX21pZGRsZV0sIFs0X2FudGhyb3BvbWV0cnlfY2lyY3VtZmVyZW5jZXNfbmF2ZWxdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX25lY2tdLCBbNF9hbnRocm9wb21ldHJ5X2NpcmN1bWZlcmVuY2VzX3RoaWdoXSwgWzRfYW50aHJvcG9tZXRyeV9jaXJjdW1mZXJlbmNlc191cHBlcl9hcm1dKVxyXG4vLyBUaGUgcmVzdCBvZiB0aGUgcm93cyBhcmUgYWRkZWQgZHluYW1pY2FsbHlcclxuLy8gWW91IG5lZWQgb25seSBzZXQgdGhlIGZldyBhYm92ZScsICdDaXJjdW1mZXJlbmNlcycsIDMsIDMsICd7XCJ0YXJnZXRfZmllbGRzMFwiOntcInNlbGVjdGlvblwiOlwiZGF5XCJ9LFwidGFyZ2V0X2ZpZWxkczFcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX2NhbGZcIn0sXCJ0YXJnZXRfZmllbGRzMlwiOntcInNlbGVjdGlvblwiOlwiY2lyY3VtZmVyZW5jZXNfY2hlc3RcIn0sXCJ0YXJnZXRfZmllbGRzM1wiOntcInNlbGVjdGlvblwiOlwiY2lyY3VtZmVyZW5jZXNfaGlwXCJ9LFwidGFyZ2V0X2ZpZWxkczRcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX21pZGRsZVwifSxcInRhcmdldF9maWVsZHM1XCI6e1wic2VsZWN0aW9uXCI6XCJjaXJjdW1mZXJlbmNlc19uYXZlbFwifSxcInRhcmdldF9maWVsZHM2XCI6e1wic2VsZWN0aW9uXCI6XCJjaXJjdW1mZXJlbmNlc19uZWNrXCJ9LFwidGFyZ2V0X2ZpZWxkczdcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX3RoaWdoXCJ9LFwidGFyZ2V0X2ZpZWxkczhcIjp7XCJzZWxlY3Rpb25cIjpcImNpcmN1bWZlcmVuY2VzX3VwcGVyX2FybVwifX0nLCAnTGluZUNoYXJ0JywgJycsICcyMDE4LTEwLTA0IDIxOjUxOjQ4Jyk7DQo=', '', 'Anthropometry (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_anthropometry_server.xml', 'http://www.vdm.io', '', 'rfe7CO7xK6KBxobI8+M/YRQ0mg1zbOmv8pmsmWynCGg=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 11, '', 1, 23), +(51, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:03:52', '', '8NFbjPIRqtyFYjXf9cgXCa2Yw0ZLkjZ3vfsK1HODusg=', 't9QihU1+uDb6nkvICLy4Me4Kw3J4f+Tsw33K5oOdI7g=', '', 'xBQEhdioWj0xBhbZMEgkCo7PSwylsaadj5bvgOY6TIs=', '', '', 'A_188', 2, '', 'Medical Aid Info', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_medicalaid', 'cGCACZt85oxM20ztOyRarIDDgGMpqwxwypOIfljEh4w5jrd/Pux9+0RZyJax0UrY', '', '705be6e4-9cc0-405e-b772-6f9e54f07838', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2021-12-19 22:27:39', 2, 'Medical Aid', 'coral_medicalaid', '', 4, '', '', 'W0NVU1RPTUNPREU9bWVkaWNhbGFpZEhlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Medical Aid Info', '', '', 'Medical Aid (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_medicalaid_server.xml', 'http://www.vdm.io', '', 'Mq1QTg8AIvgd7JBiNDJI6rYhRb0plOs2qigJDc+6GHU=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 8, '', 1, 21), +(52, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.3', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:05:31', '', 'QwZI1BiaWmTS0anBpVvqtZEd2AsaMqHf+cQ61QijkNs=', '53XWHWscjYet9/2uOseE/YDP6vx6YXau/rRAGuJ5mhU=', '', '1tLvEhB5ag4ldY9ZSrZ9jQZ0k4/GQfY3U9P6KYzep20=', '', '', 'A_189', 2, '', 'Contact Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_contactdetails', '1PWzKLwhU2ENa8+yjDwwVgLP5mrAbFKQiHhbLnN3U2Z2ZdDVvB2j4lmhOasGRFFGOa5MZJiP9oEr8552E8vvUg==', '', 'e0228373-f560-4d61-8f2f-553d3674f245', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2021-12-19 22:28:14', 2, 'Contact', 'coral_contactdetails', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29udGFjdGRldGFpbHNIZWxwZXJCb3RoXQ==', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Contact Details', '', '', 'Contact Details (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_contactdetails_server.xml', 'http://www.vdm.io', '', 'oCK4MOKNKUHMkQ4HZuNY4C8OtpJw9l0HlOk39ZQAtlE=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 9, '', 1, 17), +(53, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:07:27', '', 'LE2CU3KIhuQ21TtiwtUlq46LG3MQq9AgCl8hDYjnuRE=', 'uA0toPlC2azBt7J+no6aB3v1r+UWExfqQhir8Wuk6wE=', '', 'yjGktgp/Mzqf9b3rcq/5sSay2p2r7KNeo84mkvkUv9c=', '', '', 'A_190', 2, '', 'Personal Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_personaldetails', 'cfl6/KQMzcbh+A0rQNy58iAMWa6Atm9obsfEIXdOqCyNE1d6l+p4419ftiJHXRpmYC+gFo/qpJlhopYj68MuTw==', '', '01db3a87-9e36-4959-a490-64582cc369db', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2021-12-19 22:27:49', 2, 'Personal', 'coral_personaldetails', '', 4, '', '', 'W0NVU1RPTUNPREU9cGVyc29uYWxkZXRhaWxzSGVscGVyQm90aF0=', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Personal Details', '', '', 'Personal Details (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_personaldetails_server.xml', 'http://www.vdm.io', '', 'gF3D+fLBYY4rK78k5Ty5rs3URFXZ7BXVKPhP+03knnU=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 13, '', 1, 19), +(54, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:08:53', '', 'mg467KYDaGLTXPeHtCf3G7ORrPHETnpqWAPAlL+ctp4=', 'kvUBCp6T568wVm1g+/9xVLPoJ3DgtPYIl0x3cEjKQkk=', '', '9Mtl4Gk+GgvwaHtOd8VXvsSOTgZ9qdAtI+YJoILNRO4=', '', '', 'A_193', 2, '', 'Doctor Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_doctordetails', 'UH3vD3UEpRgXVAsj95yFAjUMzBF4aoCVz/R6oMyxcON/32X2aCPW88suyBzRifapMEzKdthPFuC8IMLPqtaPkg==', '', '4e3321d6-0fad-4916-bd92-cd36d81fc695', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2021-12-19 22:27:33', 2, 'Doctor', 'coral_doctordetails', '', 4, '', '', 'W0NVU1RPTUNPREU9ZG9jdG9yZGV0YWlsc0hlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkK2NvcmFsXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Doctor Details', '', '', 'Doctor Details (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_doctordetails_server.xml', 'http://www.vdm.io', '', 'H0IcbqK10IAQdO5c8JSLzyhEot27+p+N/fmARYoCPC0=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 6, '', 1, 18), +(55, '', '', '', '', 1, '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.5', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:09:55', '', '1VWz93/qjNiFwZXP/wlBrYe4qI/oYn/hpYpSKbYJTss=', '3GX+XZCGa4PkBOFVnXeqOtcktbCrmsfY5lLr2OJyC+0=', '', 'n/xQ+LZhbxhSSzG7Wyd3dr1CtV4UJRraYmAGCvBeM2M=', '', '', '', 1, '', 'Communicate', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_communicate', 'umYy+mxep7WIgRkS4teMHfx7O8+f/SFg1kiDcJBXueDsEnrLjADFnHGs8fhq9fBdO4BLxi84O0iJs6S0CxwBUw==', '', 'a3809036-adb7-455e-b2f7-634aed05e33c', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2021-12-19 22:27:59', 2, 'Communicate', 'coral_communicate', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29tbXVuaWNhdGVIZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Communicate', '', '', 'Communicate (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_communicate_server.xml', 'http://www.vdm.io', '', 'xNLlKoDw7Ztj7nP3JHX08h/Pzz/514R2vkr04xFPJAw=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 8, '', 1, 28), +(56, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.5', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:10:55', '', 'FWA/RJgvHyHW80DpylnqtxdFCH0gYMx11Alf1TlY5NM=', '2ktBxO5XfGGgIDcjxYVMZYU6JxYYK6VL0lyr2Q52R2c=', '', 'oyAKzpNqvq19QlcEeQj43KTvJc+YwPakUSEHo2bgFYQ=', '', '', 'A_198', 2, '', 'Fitness Test', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_fitnesstest', '7Oofno/gye7Bh8McOZ0REABjxSVETqzyc7et70rLIlBoTFeUE0cnp8ZvA+L/IPifYPHbwQuIwMCDds/QVDgUqQ==', '', '5dc356a3-62fa-4c43-89f8-b942050645b1', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2021-12-19 22:27:54', 2, 'Fitness Test', 'coral_fitnesstest', '', 4, '', '', 'W0NVU1RPTUNPREU9Zml0bmVzc3Rlc3RIZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Fitness Test', 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9zdGF0dXNfbm9ybWANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fc3RhdHVzX25vcm1gIChgaWRgLCBgY2FsY3VsYXRpb25fdHlwZWAsIGBjYWxjdWxhdGlvbnNgLCBgc2VsZWN0aW9uYCwgYHRlbXBsYXRlc2AsIGBwdWJsaXNoZWRgLCBgY3JlYXRlZGApIFZBTFVFUw0KKDEsIDEsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjUzXCJ9LFwiY2FsY3VsYXRpb25zMVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI1MFwifSxcImNhbGN1bGF0aW9uczJcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiNDRcIn0sXCJjYWxjdWxhdGlvbnMzXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjM5XCJ9LFwiY2FsY3VsYXRpb25zNFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzNVwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNThcIn0sXCJjYWxjdWxhdGlvbnM2XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjU1XCJ9LFwiY2FsY3VsYXRpb25zN1wiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczhcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiNDRcIn0sXCJjYWxjdWxhdGlvbnM5XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjM5XCJ9LFwiY2FsY3VsYXRpb25zMTBcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNjBcIn0sXCJjYWxjdWxhdGlvbnMxMVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI1NlwifSxcImNhbGN1bGF0aW9uczEyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjUxXCJ9LFwiY2FsY3VsYXRpb25zMTNcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiNDZcIn0sXCJjYWxjdWxhdGlvbnMxNFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI0MFwifSxcImNhbGN1bGF0aW9uczE1XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjYyXCJ9LFwiY2FsY3VsYXRpb25zMTZcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNTlcIn0sXCJjYWxjdWxhdGlvbnMxN1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI1NFwifSxcImNhbGN1bGF0aW9uczE4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjQ4XCJ9LFwiY2FsY3VsYXRpb25zMTlcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiNDJcIn0sXCJjYWxjdWxhdGlvbnMyMFwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCI2N1wifSxcImNhbGN1bGF0aW9uczIxXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjYzXCJ9LFwiY2FsY3VsYXRpb25zMjJcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiNTlcIn0sXCJjYWxjdWxhdGlvbnMyM1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCI1NVwifSxcImNhbGN1bGF0aW9uczI0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjUwXCJ9LFwiY2FsY3VsYXRpb25zMjVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNDdcIn0sXCJjYWxjdWxhdGlvbnMyNlwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI0MFwifSxcImNhbGN1bGF0aW9uczI3XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjM0XCJ9LFwiY2FsY3VsYXRpb25zMjhcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMzBcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIyM1wifSxcImNhbGN1bGF0aW9uczMwXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjUyXCJ9LFwiY2FsY3VsYXRpb25zMzFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNDVcIn0sXCJjYWxjdWxhdGlvbnMzMlwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI0MFwifSxcImNhbGN1bGF0aW9uczMzXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjM0XCJ9LFwiY2FsY3VsYXRpb25zMzRcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjZcIn0sXCJjYWxjdWxhdGlvbnMzNVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCI1NVwifSxcImNhbGN1bGF0aW9uczM2XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjQ3XCJ9LFwiY2FsY3VsYXRpb25zMzdcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiNDJcIn0sXCJjYWxjdWxhdGlvbnMzOFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIzN1wifSxcImNhbGN1bGF0aW9uczM5XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjI4XCJ9LFwiY2FsY3VsYXRpb25zNDBcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNThcIn0sXCJjYWxjdWxhdGlvbnM0MVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczQyXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjQ0XCJ9LFwiY2FsY3VsYXRpb25zNDNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiNDBcIn0sXCJjYWxjdWxhdGlvbnM0NFwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzMVwifSxcImNhbGN1bGF0aW9uczQ1XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjY0XCJ9LFwiY2FsY3VsYXRpb25zNDZcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNTVcIn0sXCJjYWxjdWxhdGlvbnM0N1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczQ4XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjQ0XCJ9LFwiY2FsY3VsYXRpb25zNDlcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMzdcIn19JywgJ3BhcnRpYWxfY3VybF91cHMnLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+UG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZTI4MzI3XFxcIj48Yj5GYWlyPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcIndvcmRcIjpcImF2ZXJhZ2VcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiMyZDcwOTFcXFwiPjxiPkF2ZXJhZ2U8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzM1wiOntcInRhcmdldFwiOlwiM1wiLFwid29yZFwiOlwiZ29vZFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJ3b3JkXCI6XCJleGNlbGxlbnRcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9fScsIDEsICcyMDE4LTEwLTExIDE5OjU2OjU5JyksDQooMiwgMSwgJ3tcImNhbGN1bGF0aW9uczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMThcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zMlwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCI4XCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCI3XCJ9LFwiY2FsY3VsYXRpb25zNFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzXCJ9LFwiY2FsY3VsYXRpb25zNVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIyMVwifSxcImNhbGN1bGF0aW9uczZcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMTZcIn0sXCJjYWxjdWxhdGlvbnM3XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjExXCJ9LFwiY2FsY3VsYXRpb25zOFwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxMFwifSxcImNhbGN1bGF0aW9uczlcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiNFwifSxcImNhbGN1bGF0aW9uczEwXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjI3XCJ9LFwiY2FsY3VsYXRpb25zMTFcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjJcIn0sXCJjYWxjdWxhdGlvbnMxMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIxNlwifSxcImNhbGN1bGF0aW9uczEzXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjE1XCJ9LFwiY2FsY3VsYXRpb25zMTRcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiOVwifSxcImNhbGN1bGF0aW9uczE1XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjM0XCJ9LFwiY2FsY3VsYXRpb25zMTZcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMjhcIn0sXCJjYWxjdWxhdGlvbnMxN1wiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyMlwifSxcImNhbGN1bGF0aW9uczE4XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjE5XCJ9LFwiY2FsY3VsYXRpb25zMTlcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMTRcIn0sXCJjYWxjdWxhdGlvbnMyMFwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIzN1wifSxcImNhbGN1bGF0aW9uczIxXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjMxXCJ9LFwiY2FsY3VsYXRpb25zMjJcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjRcIn0sXCJjYWxjdWxhdGlvbnMyM1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyMVwifSxcImNhbGN1bGF0aW9uczI0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjE1XCJ9LFwiY2FsY3VsYXRpb25zMjVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjNcIn0sXCJjYWxjdWxhdGlvbnMyNlwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIxOFwifSxcImNhbGN1bGF0aW9uczI3XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zMjhcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTBcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI3XCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjZcIn0sXCJjYWxjdWxhdGlvbnMzMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyM1wifSxcImNhbGN1bGF0aW9uczMyXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjE0XCJ9LFwiY2FsY3VsYXRpb25zMzNcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTJcIn0sXCJjYWxjdWxhdGlvbnMzNFwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI4XCJ9LFwiY2FsY3VsYXRpb25zMzVcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMzNcIn0sXCJjYWxjdWxhdGlvbnMzNlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyN1wifSxcImNhbGN1bGF0aW9uczM3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIyXCJ9LFwiY2FsY3VsYXRpb25zMzhcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTdcIn0sXCJjYWxjdWxhdGlvbnMzOVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIxNVwifSxcImNhbGN1bGF0aW9uczQwXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjQzXCJ9LFwiY2FsY3VsYXRpb25zNDFcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMzRcIn0sXCJjYWxjdWxhdGlvbnM0MlwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyOFwifSxcImNhbGN1bGF0aW9uczQzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjIzXCJ9LFwiY2FsY3VsYXRpb25zNDRcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjFcIn0sXCJjYWxjdWxhdGlvbnM0NVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCI0OVwifSxcImNhbGN1bGF0aW9uczQ2XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjQwXCJ9LFwiY2FsY3VsYXRpb25zNDdcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMzJcIn0sXCJjYWxjdWxhdGlvbnM0OFwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIyNlwifSxcImNhbGN1bGF0aW9uczQ5XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjIzXCJ9fScsICdwdXNoX3VwcycsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiYXZlcmFnZVwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+QXZlcmFnZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJ3b3JkXCI6XCJnb29kXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5Hb29kPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcIndvcmRcIjpcImV4Y2VsbGVudFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+RXhjZWxsZW50PFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn19JywgMSwgJzIwMTgtMTAtMTEgMTk6NTg6NDUnKSwNCigzLCAxLCAne1wiY2FsY3VsYXRpb25zMFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIyM1wifSxcImNhbGN1bGF0aW9uczFcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMThcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zM1wiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxMFwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiN1wifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjZcIn0sXCJjYWxjdWxhdGlvbnM2XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjIzXCJ9LFwiY2FsY3VsYXRpb25zN1wiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIxNFwifSxcImNhbGN1bGF0aW9uczhcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTJcIn0sXCJjYWxjdWxhdGlvbnM5XCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjhcIn0sXCJjYWxjdWxhdGlvbnMxMFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIzM1wifSxcImNhbGN1bGF0aW9uczExXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjI3XCJ9LFwiY2FsY3VsYXRpb25zMTJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiMjJcIn0sXCJjYWxjdWxhdGlvbnMxM1wiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiM1wiLFwibnVtYmVyXCI6XCIxN1wifSxcImNhbGN1bGF0aW9uczE0XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCI0XCIsXCJudW1iZXJcIjpcIjE1XCJ9LFwiY2FsY3VsYXRpb25zMTVcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiNDNcIn0sXCJjYWxjdWxhdGlvbnMxNlwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIzNFwifSxcImNhbGN1bGF0aW9uczE3XCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjI4XCJ9LFwiY2FsY3VsYXRpb25zMThcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMjNcIn0sXCJjYWxjdWxhdGlvbnMxOVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIyMVwifSxcImNhbGN1bGF0aW9uczIwXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjQ5XCJ9LFwiY2FsY3VsYXRpb25zMjFcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiNDBcIn0sXCJjYWxjdWxhdGlvbnMyMlwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIzMlwifSxcImNhbGN1bGF0aW9uczIzXCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjI2XCJ9LFwiY2FsY3VsYXRpb25zMjRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMjNcIn0sXCJjYWxjdWxhdGlvbnMyNVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMFwiLFwibnVtYmVyXCI6XCIxOFwifSxcImNhbGN1bGF0aW9uczI2XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIxXCIsXCJudW1iZXJcIjpcIjEyXCJ9LFwiY2FsY3VsYXRpb25zMjdcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjJcIixcIm51bWJlclwiOlwiOFwifSxcImNhbGN1bGF0aW9uczI4XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjdcIn0sXCJjYWxjdWxhdGlvbnMyOVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIzXCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjFcIn0sXCJjYWxjdWxhdGlvbnMzMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIxNlwifSxcImNhbGN1bGF0aW9uczMyXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjExXCJ9LFwiY2FsY3VsYXRpb25zMzNcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTBcIn0sXCJjYWxjdWxhdGlvbnMzNFwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI0XCJ9LFwiY2FsY3VsYXRpb25zMzVcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMjdcIn0sXCJjYWxjdWxhdGlvbnMzNlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyMlwifSxcImNhbGN1bGF0aW9uczM3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjE2XCJ9LFwiY2FsY3VsYXRpb25zMzhcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTVcIn0sXCJjYWxjdWxhdGlvbnMzOVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCI5XCJ9LFwiY2FsY3VsYXRpb25zNDBcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjBcIixcIm51bWJlclwiOlwiMzRcIn0sXCJjYWxjdWxhdGlvbnM0MVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMVwiLFwibnVtYmVyXCI6XCIyOFwifSxcImNhbGN1bGF0aW9uczQyXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIyXCIsXCJudW1iZXJcIjpcIjIyXCJ9LFwiY2FsY3VsYXRpb25zNDNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjNcIixcIm51bWJlclwiOlwiMTlcIn0sXCJjYWxjdWxhdGlvbnM0NFwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiNFwiLFwibnVtYmVyXCI6XCIxNFwifSxcImNhbGN1bGF0aW9uczQ1XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIwXCIsXCJudW1iZXJcIjpcIjM3XCJ9LFwiY2FsY3VsYXRpb25zNDZcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjFcIixcIm51bWJlclwiOlwiMzFcIn0sXCJjYWxjdWxhdGlvbnM0N1wiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiMlwiLFwibnVtYmVyXCI6XCIyNFwifSxcImNhbGN1bGF0aW9uczQ4XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjJcIixcImFnZV9ub3JtXCI6XCIzXCIsXCJudW1iZXJcIjpcIjIxXCJ9LFwiY2FsY3VsYXRpb25zNDlcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIjRcIixcIm51bWJlclwiOlwiMTVcIn19JywgJ3B1bGxfdXBzJywgJ3tcInRlbXBsYXRlczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcIndvcmRcIjpcInBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlBvb3I8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMVwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwiZmFpclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2UyODMyN1xcXCI+PGI+RmFpcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJhdmVyYWdlXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjMmQ3MDkxXFxcIj48Yj5BdmVyYWdlPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+QXZlcmFnZTxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkdvb2Q8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNFwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5FeGNlbGxlbnQ8XFwvYj48XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDowODozMScpLA0KKDQsIDIsICd7XCJjYWxjdWxhdGlvbnM0OVwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDIwXCJ9LFwiY2FsY3VsYXRpb25zNTBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIyMSwgNDBcIn0sXCJjYWxjdWxhdGlvbnM1MVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjQxLCA2MFwifSxcImNhbGN1bGF0aW9uczUyXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiNjEsIDgwXCJ9LFwiY2FsY3VsYXRpb25zNTNcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI4MSwgMTAwXCJ9LFwiY2FsY3VsYXRpb25zNTRcIjp7XCJ0YXJnZXRcIjpcIjVcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMDEsIDMwMFwifX0nLCAnYnJpZGdlX3NpZGVfbGVmdCcsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJ2ZXJ5IHBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlZlcnkgUG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcInBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+UG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2UyODMyN1xcXCI+PGI+RmFpcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcIndvcmRcIjpcImV4Y2VsbGVudFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5FeGNlbGxlbnQ8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNVwiOntcInRhcmdldFwiOlwiNVwiLFwid29yZFwiOlwiU3VwZXJpb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5TdXBlcmlvcjxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDoxNDo1MCcpLA0KKDUsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMCwgMjBcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMjEsIDQwXCJ9LFwiY2FsY3VsYXRpb25zMlwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjQxLCA2MFwifSxcImNhbGN1bGF0aW9uczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI2MSwgODBcIn0sXCJjYWxjdWxhdGlvbnM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiODEsIDEwMFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjVcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMDEsIDMwMFwifX0nLCAnYnJpZGdlX3NpZGVfcmlnaHQnLCAne1widGVtcGxhdGVzMFwiOntcInRhcmdldFwiOlwiMFwiLFwid29yZFwiOlwidmVyeSBwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5WZXJ5IFBvb3I8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJ3b3JkXCI6XCJwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlBvb3I8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJ3b3JkXCI6XCJnb29kXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiMyZDcwOTFcXFwiPjxiPkdvb2Q8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM0XCI6e1widGFyZ2V0XCI6XCI0XCIsXCJ3b3JkXCI6XCJleGNlbGxlbnRcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+RXhjZWxsZW50PFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5TdXBlcmlvcjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczVcIjp7XCJ0YXJnZXRcIjpcIjVcIixcIndvcmRcIjpcIlN1cGVyaW9yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+U3VwZXJpb3I8XFwvYj48XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn19JywgMSwgJzIwMTgtMTAtMTEgMjA6Mjk6MDcnKSwNCig2LCAyLCAne1wiY2FsY3VsYXRpb25zMFwiOntcInRhcmdldFwiOlwiMFwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDMwXCJ9LFwiY2FsY3VsYXRpb25zMVwiOntcInRhcmdldFwiOlwiMVwiLFwiZ2VuZGVyXCI6XCIwXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjMxLCA2MFwifSxcImNhbGN1bGF0aW9uczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI2MSwgOTBcIn0sXCJjYWxjdWxhdGlvbnMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiOTEsIDExOVwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMjAsIDE0OVwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjVcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxNTAsIDMwMFwifX0nLCAnZnJvbnRfYnJpZGdlJywgJ3tcInRlbXBsYXRlczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcIndvcmRcIjpcInZlcnkgcG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI2Q4NTAzMFxcXCI+PGI+VmVyeSBQb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMVwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiZmFpclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZTI4MzI3XFxcIj48Yj5GYWlyPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzM1wiOntcInRhcmdldFwiOlwiM1wiLFwid29yZFwiOlwiZ29vZFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjMmQ3MDkxXFxcIj48Yj5Hb29kPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlN1cGVyaW9yPFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNFwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+U3VwZXJpb3I8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM1XCI6e1widGFyZ2V0XCI6XCI1XCIsXCJ3b3JkXCI6XCJTdXBlcmlvclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPlN1cGVyaW9yPFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9fScsIDEsICcyMDE4LTEwLTExIDIwOjMwOjM4JyksDQooNywgMiwgJ3tcImNhbGN1bGF0aW9uczBcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIwLCA4M1wifSxcImNhbGN1bGF0aW9uczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCI4NCwgOTRcIn0sXCJjYWxjdWxhdGlvbnMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiOTUsIDEwMlwifSxcImNhbGN1bGF0aW9uczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMDMsIDExMlwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMTMsIDMwMFwifX0nLCAnZ3JpcF9zdHJlbmd0aF90b3RhbCcsICd7XCJ0ZW1wbGF0ZXM1XCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJ2ZXJ5IHBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlZlcnkgUG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNlwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXM3XCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczhcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzOVwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDozMzo0MScpLA0KKDgsIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiMCwgOTFcIn0sXCJjYWxjdWxhdGlvbnMxXCI6e1widGFyZ2V0XCI6XCIxXCIsXCJnZW5kZXJcIjpcIjBcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiOTEsIDEyNVwifSxcImNhbGN1bGF0aW9uczJcIjp7XCJ0YXJnZXRcIjpcIjJcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMjYsIDE3NlwifSxcImNhbGN1bGF0aW9uczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxNzcsIDIwOFwifSxcImNhbGN1bGF0aW9uczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMFwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIyMDksIDMwMFwifX0nLCAnYmFja19zdHJlbmd0aCcsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJ2ZXJ5IHBvb3JcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNkODUwMzBcXFwiPjxiPlZlcnkgUG9vcjxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMVwiOntcInRhcmdldFwiOlwiMVwiLFwid29yZFwiOlwicG9vclwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5WZXJ5IFBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+VmVyeSBQb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlN1cGVyaW9yPFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMyXCI6e1widGFyZ2V0XCI6XCIyXCIsXCJ3b3JkXCI6XCJmYWlyXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RmFpcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1wcmltYXJ5XFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczNcIjp7XCJ0YXJnZXRcIjpcIjNcIixcIndvcmRcIjpcImdvb2RcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+VmVyeSBQb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+R29vZDxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlZlcnkgUG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5TdXBlcmlvcjxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzNFwiOntcInRhcmdldFwiOlwiNFwiLFwid29yZFwiOlwiZXhjZWxsZW50XCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlZlcnkgUG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RmFpcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiM2NTlmMTNcXFwiPjxiPkV4Y2VsbGVudDxcXC9iPjxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5WZXJ5IFBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+U3VwZXJpb3I8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifX0nLCAxLCAnMjAxOC0xMC0xMSAyMDozODo1MicpLA0KKDksIDIsICd7XCJjYWxjdWxhdGlvbnMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJnZW5kZXJcIjpcIjFcIixcImFnZV9ub3JtXCI6XCJcIixcIm51bWJlclwiOlwiLTUwLCAtOFwifSxcImNhbGN1bGF0aW9uczVcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCItNywgLTFcIn0sXCJjYWxjdWxhdGlvbnMxMFwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDVcIn0sXCJjYWxjdWxhdGlvbnMxNVwiOntcInRhcmdldFwiOlwiM1wiLFwiZ2VuZGVyXCI6XCIxXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjYsIDE2XCJ9LFwiY2FsY3VsYXRpb25zMjBcIjp7XCJ0YXJnZXRcIjpcIjRcIixcImdlbmRlclwiOlwiMVwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxNywgMTAwXCJ9LFwiY2FsY3VsYXRpb25zMjVcIjp7XCJ0YXJnZXRcIjpcIjBcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCItNTAsIC03XCJ9LFwiY2FsY3VsYXRpb25zMzBcIjp7XCJ0YXJnZXRcIjpcIjFcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCItNiwgLTFcIn0sXCJjYWxjdWxhdGlvbnMzNVwiOntcInRhcmdldFwiOlwiMlwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjAsIDEwXCJ9LFwiY2FsY3VsYXRpb25zNDBcIjp7XCJ0YXJnZXRcIjpcIjNcIixcImdlbmRlclwiOlwiMlwiLFwiYWdlX25vcm1cIjpcIlwiLFwibnVtYmVyXCI6XCIxMSwgMjBcIn0sXCJjYWxjdWxhdGlvbnM0NVwiOntcInRhcmdldFwiOlwiNFwiLFwiZ2VuZGVyXCI6XCIyXCIsXCJhZ2Vfbm9ybVwiOlwiXCIsXCJudW1iZXJcIjpcIjIxLCAxMDBcIn19JywgJ3NpdF9yZWFjaCcsICd7XCJ0ZW1wbGF0ZXMwXCI6e1widGFyZ2V0XCI6XCIwXCIsXCJ3b3JkXCI6XCJwb29yXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjZDg1MDMwXFxcIj48Yj5Qb29yPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczFcIjp7XCJ0YXJnZXRcIjpcIjFcIixcIndvcmRcIjpcImZhaXJcIixcInRhYmxlXCI6XCI8dGFibGUgc3R5bGU9XFxcImJvcmRlcjoxcHggc29saWQgIzlDMEYxMztcXFwiIGNlbGxwYWRkaW5nPVxcXCI1XFxcIiBjZWxsc3BhY2luZz1cXFwiMVxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiIGJnY29sb3I9XFxcIiNGRkZGRkZcXFwiPjx0cj5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+UG9vcjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNlMjgzMjdcXFwiPjxiPkZhaXI8XFwvYj48XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkdvb2Q8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkV4Y2VsbGVudDxcXC90ZD48XFwvdHI+PFxcL3RhYmxlPlwiLFwic2NhbGVcIjpcIjxzcGFuIGNsYXNzPVxcXCJ1ay1idXR0b24tZ3JvdXAgdWstaGlkZGVuLXNtYWxsXFxcIj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLWRhbmdlclxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Qb29yPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkdvb2Q8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkV4Y2VsbGVudDxcXC9idXR0b24+XFxyXFxuPFxcL3NwYW4+XCJ9LFwidGVtcGxhdGVzMlwiOntcInRhcmdldFwiOlwiMlwiLFwid29yZFwiOlwiYXZlcmFnZVwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzJkNzA5MVxcXCI+PGI+QXZlcmFnZTxcXC9iPjxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+R29vZDxcXC90ZD5cXHJcXG48dGQgYWxpZ249XFxcImNlbnRlclxcXCIgdmFsaWduPVxcXCJtaWRkbGVcXFwiIGJnY29sb3I9XFxcIiNFREVERURcXFwiIHN0eWxlPVxcXCJjb2xvcjojQzZDNkM2O1xcXCI+RXhjZWxsZW50PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS11ay1tb2RhbD1cXFwie3RhcmdldDpcXFxcXCcjdmRtLXN0YXR1cy1kZWZhdWx0c1xcXFxcJ31cXFwiPkF2ZTxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+R29vZDxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJhZGdlLXN1Y2Nlc3NcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn0sXCJ0ZW1wbGF0ZXMzXCI6e1widGFyZ2V0XCI6XCIzXCIsXCJ3b3JkXCI6XCJnb29kXCIsXCJ0YWJsZVwiOlwiPHRhYmxlIHN0eWxlPVxcXCJib3JkZXI6MXB4IHNvbGlkICM5QzBGMTM7XFxcIiBjZWxscGFkZGluZz1cXFwiNVxcXCIgY2VsbHNwYWNpbmc9XFxcIjFcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBiZ2NvbG9yPVxcXCIjRkZGRkZGXFxcIj48dHI+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPlBvb3I8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkZhaXI8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjRURFREVEXFxcIiBzdHlsZT1cXFwiY29sb3I6I0M2QzZDNjtcXFwiPkF2ZXJhZ2U8XFwvdGQ+XFxyXFxuPHRkIGFsaWduPVxcXCJjZW50ZXJcXFwiIHZhbGlnbj1cXFwibWlkZGxlXFxcIiBiZ2NvbG9yPVxcXCIjNjU5ZjEzXFxcIj48Yj5Hb29kPFxcL2I+PFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5FeGNlbGxlbnQ8XFwvdGQ+PFxcL3RyPjxcXC90YWJsZT5cIixcInNjYWxlXCI6XCI8c3BhbiBjbGFzcz1cXFwidWstYnV0dG9uLWdyb3VwIHVrLWhpZGRlbi1zbWFsbFxcXCI+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pIHVrLWJ1dHRvbi1kYW5nZXJcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+UG9vcjxcXC9idXR0b24+XFxyXFxuXFx0PGJ1dHRvbiBjbGFzcz1cXFwidWstYnV0dG9uIHVrLWJ1dHRvbi1taW5pXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPkZhaXI8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tcHJpbWFyeVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5BdmU8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1iYWRnZS1zdWNjZXNzXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtdWstbW9kYWw9XFxcInt0YXJnZXQ6XFxcXFwnI3ZkbS1zdGF0dXMtZGVmYXVsdHNcXFxcXCd9XFxcIj5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5FeGNlbGxlbnQ8XFwvYnV0dG9uPlxcclxcbjxcXC9zcGFuPlwifSxcInRlbXBsYXRlczRcIjp7XCJ0YXJnZXRcIjpcIjRcIixcIndvcmRcIjpcImV4Y2VsbGVudFwiLFwidGFibGVcIjpcIjx0YWJsZSBzdHlsZT1cXFwiYm9yZGVyOjFweCBzb2xpZCAjOUMwRjEzO1xcXCIgY2VsbHBhZGRpbmc9XFxcIjVcXFwiIGNlbGxzcGFjaW5nPVxcXCIxXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgYmdjb2xvcj1cXFwiI0ZGRkZGRlxcXCI+PHRyPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Qb29yPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5GYWlyPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5BdmVyYWdlPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiI0VERURFRFxcXCIgc3R5bGU9XFxcImNvbG9yOiNDNkM2QzY7XFxcIj5Hb29kPFxcL3RkPlxcclxcbjx0ZCBhbGlnbj1cXFwiY2VudGVyXFxcIiB2YWxpZ249XFxcIm1pZGRsZVxcXCIgYmdjb2xvcj1cXFwiIzY1OWYxM1xcXCI+PGI+RXhjZWxsZW50PFxcL2I+PFxcL3RkPjxcXC90cj48XFwvdGFibGU+XCIsXCJzY2FsZVwiOlwiPHNwYW4gY2xhc3M9XFxcInVrLWJ1dHRvbi1ncm91cCB1ay1oaWRkZW4tc21hbGxcXFwiPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaSB1ay1idXR0b24tZGFuZ2VyXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIGRpc2FibGVkPlBvb3I8XFwvYnV0dG9uPlxcclxcblxcdDxidXR0b24gY2xhc3M9XFxcInVrLWJ1dHRvbiB1ay1idXR0b24tbWluaVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5GYWlyPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYnV0dG9uLXByaW1hcnlcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgZGlzYWJsZWQ+QXZlPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkaXNhYmxlZD5Hb29kPFxcL2J1dHRvbj5cXHJcXG5cXHQ8YnV0dG9uIGNsYXNzPVxcXCJ1ay1idXR0b24gdWstYnV0dG9uLW1pbmkgdWstYmFkZ2Utc3VjY2Vzc1xcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXVrLW1vZGFsPVxcXCJ7dGFyZ2V0OlxcXFxcJyN2ZG0tc3RhdHVzLWRlZmF1bHRzXFxcXFwnfVxcXCI+RXhjZWxsZW50PFxcL2J1dHRvbj5cXHJcXG48XFwvc3Bhbj5cIn19JywgMSwgJzIwMTgtMTAtMTEgMjI6MTc6MDYnKTsNCg0KLS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9jaGFydGANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fY2hhcnRgIChgaWRgLCBgZGV0YWlsc2AsIGBqYXZhc2NyaXB0X3RhYmxlYCwgYG5hbWVgLCBgbnVtYmVyYCwgYHRhcmdldGAsIGB0YXJnZXRfZmllbGRzYCwgYHR5cGVgLCBgcHVibGlzaGVkYCwgYGNyZWF0ZWRgKSBWQUxVRVMNCigxLCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiU3RhZ2VcIixcInR5cGVcIjpcInN0cmluZ1wifSx7XCJsYWJlbFwiOlwiSGVhcnQgUmF0ZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJTeXN0b2xpYyBCbG9vZCBQcmVzc3VyZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9LHtcImxhYmVsXCI6XCJEaWFzdG9saWMgQmxvb2QgUHJlc3N1cmVcIixcInR5cGVcIjpcIm51bWJlclwifV0sXCJyb3dzXCI6W3tcImNcIjpbe1widlwiOlwiUmVzdFwifSx7XCJ2XCI6NzJ9LHtcInZcIjo0M30se1widlwiOjUzfV19LHtcImNcIjpbe1widlwiOlwiQCAyNSBXYXR0XCJ9LHtcInZcIjo4OX0se1widlwiOjUzfSx7XCJ2XCI6NjN9XX0se1wiY1wiOlt7XCJ2XCI6XCJAIDUwIFdhdHRcIn0se1widlwiOjkzfSx7XCJ2XCI6NjN9LHtcInZcIjo3M31dfSx7XCJjXCI6W3tcInZcIjpcIkAgNzUgV2F0dFwifSx7XCJ2XCI6OTJ9LHtcInZcIjo2M30se1widlwiOjczfV19LHtcImNcIjpbe1widlwiOlwiRmluYWwgLSAzIG1pbiByZXN0XCJ9LHtcInZcIjo3OH0se1widlwiOjU0fSx7XCJ2XCI6NTh9XX1dfSxcIm9wdGlvbnNcIjp7XCJmb2N1c1RhcmdldFwiOlwiY2F0ZWdvcnlcIixcImhBeGlzXCI6e1widXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlLFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidmlld1dpbmRvd1wiOm51bGwsXCJ2aWV3V2luZG93TW9kZVwiOm51bGx9LFwibGVnYWN5U2NhdHRlckNoYXJ0TGFiZWxzXCI6dHJ1ZSxcImxlZ2VuZFwiOlwiaW5cIixcInRoZW1lXCI6XCJtYXhpbWl6ZWRcIixcInRpdGxlXCI6XCJZTUNBXCIsXCJ2QXhlc1wiOlt7XCJ0aXRsZVwiOm51bGwsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfSx7XCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfV0sXCJjdXJ2ZVR5cGVcIjpcImZ1bmN0aW9uXCIsXCJib29sZWFuUm9sZVwiOlwiY2VydGFpbnR5XCIsXCJsaW5lV2lkdGhcIjoyLFwid2lkdGhcIjo2MDAsXCJoZWlnaHRcIjozNzF9LFwic3RhdGVcIjp7fSxcInZpZXdcIjp7XCJjb2x1bW5zXCI6bnVsbCxcInJvd3NcIjpudWxsfSxcImlzRGVmYXVsdFZpc3VhbGl6YXRpb25cIjpmYWxzZSxcImNoYXJ0VHlwZVwiOlwiTGluZUNoYXJ0XCJ9JywgJyhbZml0bmVzc3Rlc3RfbGFiZWxfeW1jYV9zdGFnZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF95bWNhX2hlYXJ0X3JhdGVdLCBbZml0bmVzc3Rlc3RfbGFiZWxfeW1jYV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV0pXHJcbihbZml0bmVzc3Rlc3RfdGVtcGxhdGVfeW1jYV9zdGFnZV9vbmVdLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX29uZV0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX29uZV0sIFtmaXRuZXNzdGVzdF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9vbmVdKVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90d29dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX3R3b10sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfdHdvXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdHdvXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3R3b10pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90aHJlZV0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfdGhyZWVdLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX3RocmVlXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhyZWVdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhyZWVdKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X3ltY2Ffc3RhZ2VfZm91cl0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfZm91cl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfZm91cl0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX2ZvdXJdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfZm91cl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV9maXZlXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfeW1jYV9zdGFnZV9maXZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfaGVhcnRfcmF0ZV9maXZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZml2ZV0sIFtmaXRuZXNzdGVzdF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9maXZlXSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF95bWNhX3N0YWdlX3NpeF0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2Vfc2l4XSwgW2ZpdG5lc3N0ZXN0X3ltY2FfaGVhcnRfcmF0ZV9zaXhdLCBbZml0bmVzc3Rlc3RfeW1jYV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9zaXhdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfc2l4XSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF95bWNhX3N0YWdlX3NldmVuXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfeW1jYV9zdGFnZV9zZXZlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfc2V2ZW5dLCBbZml0bmVzc3Rlc3RfeW1jYV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9zZXZlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9zZXZlbl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV9laWdodF0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfZWlnaHRdLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX2VpZ2h0XSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWlnaHRdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWlnaHRdKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X3ltY2Ffc3RhZ2VfbmluZV0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfbmluZV0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfbmluZV0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX25pbmVdLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfbmluZV0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90ZW5dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX3Rlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfdGVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3Rlbl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV9lbGV2ZW5dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX2VsZXZlbl0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfZWxldmVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWxldmVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX2VsZXZlbl0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90d2VsdmVdKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX3R3ZWx2ZV0sIFtmaXRuZXNzdGVzdF95bWNhX2hlYXJ0X3JhdGVfdHdlbHZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdHdlbHZlXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3R3ZWx2ZV0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfeW1jYV9zdGFnZV90aGlydGVlbl0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX3ltY2Ffc3RhZ2VfdGhpcnRlZW5dLCBbZml0bmVzc3Rlc3RfeW1jYV9oZWFydF9yYXRlX3RoaXJ0ZWVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2Ffc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhpcnRlZW5dLCBbZml0bmVzc3Rlc3RfeW1jYV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhpcnRlZW5dKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X3ltY2Ffc3RhZ2VfZm91cnRlZW5dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV95bWNhX3N0YWdlX2ZvdXJ0ZWVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfaGVhcnRfcmF0ZV9mb3VydGVlbl0sIFtmaXRuZXNzdGVzdF95bWNhX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX2ZvdXJ0ZWVuXSwgW2ZpdG5lc3N0ZXN0X3ltY2FfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX2ZvdXJ0ZWVuXSlbRU5ESUZdJywgJ1lNQ0EnLCAzLCAxLCAne1widGFyZ2V0X2ZpZWxkczBcIjp7XCJzZWxlY3Rpb25cIjpcInltY2Ffc3RhZ2Vfb25lXCJ9fScsICdMaW5lQ2hhcnQnLCAxLCAnMjAxOC0xMC0xMSAyMjo1MzoxOCcpLA0KKDIsICd7XCJkYXRhVGFibGVcIjp7XCJjb2xzXCI6W3tcImxhYmVsXCI6XCJTdGFnZVwiLFwidHlwZVwiOlwic3RyaW5nXCJ9LHtcImxhYmVsXCI6XCJIZWFydCBSYXRlXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIlN5c3RvbGljIEJsb29kIFByZXNzdXJlXCIsXCJ0eXBlXCI6XCJudW1iZXJcIn0se1wibGFiZWxcIjpcIkRpYXN0b2xpYyBCbG9vZCBQcmVzc3VyZVwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCJSZXN0XCJ9LHtcInZcIjo3Mn0se1widlwiOjY0fSx7XCJ2XCI6NTR9XX0se1wiY1wiOlt7XCJ2XCI6XCJAIDEwIFdhdHRcIn0se1widlwiOjgzfSx7XCJ2XCI6Njd9LHtcInZcIjo1N31dfSx7XCJjXCI6W3tcInZcIjpcIkAgMTIgV2F0dFwifSx7XCJ2XCI6OTB9LHtcInZcIjo2OX0se1widlwiOjU5fV19LHtcImNcIjpbe1widlwiOlwiQCAxNCBXYXR0XCJ9LHtcInZcIjo5NH0se1widlwiOjY5fSx7XCJ2XCI6NjB9XX0se1wiY1wiOlt7XCJ2XCI6XCJGaW5hbCAtIDMgbWluIHJlc3RcIn0se1widlwiOjc5fSx7XCJ2XCI6NjR9LHtcInZcIjo1N31dfV19LFwib3B0aW9uc1wiOntcImFubm90YXRpb25zXCI6e1wiZG9tYWluXCI6e319LFwiaEF4aXNcIjp7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJ2aWV3V2luZG93XCI6bnVsbCxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dNb2RlXCI6bnVsbH0sXCJsZWdhY3lTY2F0dGVyQ2hhcnRMYWJlbHNcIjp0cnVlLFwibGVnZW5kXCI6XCJpblwiLFwidGl0bGVcIjpcIkJydWNlXCIsXCJ2QXhlc1wiOlt7XCJ0aXRsZVwiOm51bGwsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfSx7XCJ2aWV3V2luZG93XCI6e1wibWF4XCI6bnVsbCxcIm1pblwiOm51bGx9LFwibWluVmFsdWVcIjpudWxsLFwibWF4VmFsdWVcIjpudWxsLFwidXNlRm9ybWF0RnJvbURhdGFcIjp0cnVlfV0sXCJpc1N0YWNrZWRcIjpmYWxzZSxcImJvb2xlYW5Sb2xlXCI6XCJjZXJ0YWludHlcIixcIndpZHRoXCI6NjAwLFwiaGVpZ2h0XCI6MzcxLFwidXNlRmlyc3RDb2x1bW5Bc0RvbWFpblwiOmZhbHNlLFwidGhlbWVcIjpcIm1heGltaXplZFwiLFwiZm9jdXNUYXJnZXRcIjpcImNhdGVnb3J5XCIsXCJzZXJpZXNcIjp7XCIwXCI6e1wiY29sb3JcIjpcIiNlMDY2NjZcIn0sXCIxXCI6e1wiY29sb3JcIjpcIiNlNjkxMzhcIn0sXCIyXCI6e1wiY29sb3JcIjpcIiM4NTIwMGNcIn19fSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIkNvbHVtbkNoYXJ0XCJ9JywgJyhbZml0bmVzc3Rlc3RfbGFiZWxfYnJ1Y2Vfc3RhZ2VdLCBbZml0bmVzc3Rlc3RfbGFiZWxfYnJ1Y2VfaGVhcnRfcmF0ZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV0sIFtmaXRuZXNzdGVzdF9sYWJlbF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVdKVxyXG4oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX2JydWNlX3N0YWdlX29uZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9oZWFydF9yYXRlX29uZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9vbmVdLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX29uZV0pXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV90d29dKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV9icnVjZV9zdGFnZV90d29dLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfaGVhcnRfcmF0ZV90d29dLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfdHdvXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV90d29dKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X2JydWNlX3N0YWdlX3RocmVlXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfYnJ1Y2Vfc3RhZ2VfdGhyZWVdLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfaGVhcnRfcmF0ZV90aHJlZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV90aHJlZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfdGhyZWVdKVtFTkRJRl1cclxuW0lGIGZpdG5lc3N0ZXN0X2JydWNlX3N0YWdlX2ZvdXJdKFtmaXRuZXNzdGVzdF90ZW1wbGF0ZV9icnVjZV9zdGFnZV9mb3VyXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfZm91cl0sIFtmaXRuZXNzdGVzdF9icnVjZV9zeXN0b2xpY19ibG9vZF9wcmVzc3VyZV9mb3VyXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2RpYXN0b2xpY19ibG9vZF9wcmVzc3VyZV9mb3VyXSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV9maXZlXShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfYnJ1Y2Vfc3RhZ2VfZml2ZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9oZWFydF9yYXRlX2ZpdmVdLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZml2ZV0sIFtmaXRuZXNzdGVzdF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfZml2ZV0pW0VORElGXVxyXG5bSUYgZml0bmVzc3Rlc3RfYnJ1Y2Vfc3RhZ2Vfc2l4XShbZml0bmVzc3Rlc3RfdGVtcGxhdGVfYnJ1Y2Vfc3RhZ2Vfc2l4XSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfc2l4XSwgW2ZpdG5lc3N0ZXN0X2JydWNlX3N5c3RvbGljX2Jsb29kX3ByZXNzdXJlX3NpeF0sIFtmaXRuZXNzdGVzdF9icnVjZV9kaWFzdG9saWNfYmxvb2RfcHJlc3N1cmVfc2l4XSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV9zZXZlbl0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX2JydWNlX3N0YWdlX3NldmVuXSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfc2V2ZW5dLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfc2V2ZW5dLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX3NldmVuXSlbRU5ESUZdXHJcbltJRiBmaXRuZXNzdGVzdF9icnVjZV9zdGFnZV9laWdodF0oW2ZpdG5lc3N0ZXN0X3RlbXBsYXRlX2JydWNlX3N0YWdlX2VpZ2h0XSwgW2ZpdG5lc3N0ZXN0X2JydWNlX2hlYXJ0X3JhdGVfZWlnaHRdLCBbZml0bmVzc3Rlc3RfYnJ1Y2Vfc3lzdG9saWNfYmxvb2RfcHJlc3N1cmVfZWlnaHRdLCBbZml0bmVzc3Rlc3RfYnJ1Y2VfZGlhc3RvbGljX2Jsb29kX3ByZXNzdXJlX2VpZ2h0XSlbRU5ESUZdJywgJ0JydWNlJywgMywgMSwgJ3tcInRhcmdldF9maWVsZHMwXCI6e1wic2VsZWN0aW9uXCI6XCJicnVjZV9zdGFnZV9vbmVcIn19JywgJ0NvbHVtbkNoYXJ0JywgMSwgJzIwMTgtMTAtMTEgMjM6Mjg6MTcnKSwNCigzLCAne1wiZGF0YVRhYmxlXCI6e1wiY29sc1wiOlt7XCJsYWJlbFwiOlwiRGF5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn0se1wibGFiZWxcIjpcIlZPXFx1MjA4Mm1heFwiLFwidHlwZVwiOlwibnVtYmVyXCJ9XSxcInJvd3NcIjpbe1wiY1wiOlt7XCJ2XCI6XCIyMDE4LzEwLzEyXCJ9LHtcInZcIjoxNzAuNTY3fV19LHtcImNcIjpbe1widlwiOlwiMjAxOC8xMC8xMVwifSx7XCJ2XCI6MTYzLjE0Nn1dfV19LFwib3B0aW9uc1wiOntcInRpdGxlXCI6XCJWbzJtYXhcIixcInZBeGVzXCI6W3tcInRpdGxlXCI6bnVsbCxcIm1pblZhbHVlXCI6bnVsbCxcIm1heFZhbHVlXCI6bnVsbCxcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWV9LHtcInZpZXdXaW5kb3dcIjp7XCJtYXhcIjpudWxsLFwibWluXCI6bnVsbH0sXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWV9XSxcImxlZ2FjeVNjYXR0ZXJDaGFydExhYmVsc1wiOnRydWUsXCJjdXJ2ZVR5cGVcIjpcImZ1bmN0aW9uXCIsXCJib29sZWFuUm9sZVwiOlwiY2VydGFpbnR5XCIsXCJsaW5lV2lkdGhcIjoyLFwiaEF4aXNcIjp7XCJ1c2VGb3JtYXRGcm9tRGF0YVwiOnRydWUsXCJtaW5WYWx1ZVwiOm51bGwsXCJtYXhWYWx1ZVwiOm51bGwsXCJ2aWV3V2luZG93XCI6bnVsbCxcInZpZXdXaW5kb3dNb2RlXCI6bnVsbH0sXCJsZWdlbmRcIjpcIm5vbmVcIixcIndpZHRoXCI6NjAwLFwiaGVpZ2h0XCI6MzcxLFwiZG9tYWluQXhpc1wiOntcImRpcmVjdGlvblwiOjF9LFwidGhlbWVcIjpcIm1heGltaXplZFwiLFwiaW50ZXJwb2xhdGVOdWxsc1wiOnRydWUsXCJzZXJpZXNcIjp7XCIwXCI6e1wiY29sb3JcIjpcIiNhNjRkNzlcIn19fSxcInN0YXRlXCI6e30sXCJ2aWV3XCI6e1wiY29sdW1uc1wiOm51bGwsXCJyb3dzXCI6bnVsbH0sXCJpc0RlZmF1bHRWaXN1YWxpemF0aW9uXCI6ZmFsc2UsXCJjaGFydFR5cGVcIjpcIkxpbmVDaGFydFwifScsICcoW2ZpdG5lc3N0ZXN0X2xhYmVsX2RheV0sIFtmaXRuZXNzdGVzdF9sYWJlbF92bzJtYXhdKVxyXG4oWzBfZml0bmVzc3Rlc3RfZGF5XSwgWzBfZml0bmVzc3Rlc3Rfdm8ybWF4XSlcclxuKFsxX2ZpdG5lc3N0ZXN0X2RheV0sIFsxX2ZpdG5lc3N0ZXN0X3ZvMm1heF0pXHJcbihbMl9maXRuZXNzdGVzdF9kYXldLCBbMl9maXRuZXNzdGVzdF92bzJtYXhdXSlcclxuKFszX2ZpdG5lc3N0ZXN0X2RheV0sIFszX2ZpdG5lc3N0ZXN0X3ZvMm1heF0pXHJcbihbNF9maXRuZXNzdGVzdF9kYXldLCBbNF9maXRuZXNzdGVzdF92bzJtYXhdKScsICdWbzJtYXgnLCAzLCAzLCAne1widGFyZ2V0X2ZpZWxkczBcIjp7XCJzZWxlY3Rpb25cIjpcImRheVwifSxcInRhcmdldF9maWVsZHMxXCI6e1wic2VsZWN0aW9uXCI6XCJ2bzJtYXhcIn19JywgJ0xpbmVDaGFydCcsIDEsICcyMDE4LTEwLTEyIDEzOjQ4OjEzJyk7', '', 'Fitness Test (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_fitnesstest_server.xml', 'http://www.vdm.io', '', 'MnxgjFaDrp3YgcpTRakS6MFgbPoXauxaYLh1uCupYtU=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 12, '', 1, 29), +(57, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:12:05', '', 'SJStMAudP7ng/sBm0iK0RPflolrulfOskLA32B2CQKU=', '45cYuqhCH35FFnDgYff1nWXE4iIRJFBLFn4xPNJIt40=', '', 'Ebil+Lx31hLp5Voef/f383O3nZcr3CigMYmvDEkTNz8=', '', '', 'A_240', 2, '', 'Health Logs', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_bankableprojects', 'ZtzPx0ECWxoMKqtVwka+aKUV3rVuAtgTXIrc0jKXE3X+Bwclk7BT84b62z8bHq3YRxrJf27roj/5HO149AHOQg==', '', 'b9391695-15ea-43cc-8f89-a9de41ed5d0f', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2021-12-19 22:28:09', 2, 'Health Log', 'coral_healthlog', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEFkZCBKb2luIFRhYmxlcyBiYXNlZCBvbiBmaWx0ZXINCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRxdWVyeSAgVGhlIGRhdGFiYXNlIHF1ZXJ5IG9iamVjdA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRmaWx0ZXIgIFRoZSB0YXJnZXQgYXJlYSB0aGF0IG1hZGUgdGhlIHJlcXVlc3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gam9pbkZvcm1EZXRhaWxzKCYkcXVlcnksICRmaWx0ZXIgPSAnbm9uZScsICRkYiA9IG51bGwpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBEQiBvYmplY3QNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGIpKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCX0NCgkJLy8gRnJvbSB0aGUgW1tbY29tcG9uZW50XV1dX3R5cGUgdGFibGUuDQoJCSRxdWVyeS0+am9pbignTEVGVCcsICRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fdHlwZScsICd0JykgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EudHlwZScpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgndC5pZCcpIC4gJyknKTsNCgl9DQoNCgkvKioNCgkgKiBBZGQgb3JkZXIgYmFzZWQgb24gZmlsdGVyDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkcXVlcnkgIFRoZSBkYXRhYmFzZSBxdWVyeSBvYmplY3QNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZmlsdGVyICBUaGUgdGFyZ2V0IGFyZWEgdGhhdCBtYWRlIHRoZSByZXF1ZXN0DQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRiICAgICBUaGUgZGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gb3JkZXJGb3JtRGV0YWlscygmJHF1ZXJ5LCAkZmlsdGVyID0gJ25vbmUnLCAkZGIgPSBudWxsKQ0KCXsNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgREIgb2JqZWN0DQoJCS8vIGlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRiKSkNCgkJLy8gew0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJLy8gCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkvLyB9DQoJCS8vIHRoZSBkZWZhdWx0IG9yZGVyIGlzIGJ5IGNyZWF0ZSBkYXRlDQoJCSRxdWVyeS0+b3JkZXIoJ2EuY3JlYXRlZCBERVNDJyk7IC8vIHRvIGluc3VyZSBsYXN0IHNob3dzIGZpcnN0DQoJfQ0KDQoJLyoqDQoJICogR2V0IHNlbGVjdGlvbiAgYmFzZWQgb24gdHlwZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgbWFpbiB0YWJsZSB0byBzZWxlY3QNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkbWV0aG9kICAgIFRoZSB0eXBlIG9mIHZhbHVlcyB0byByZXR1cm4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkZmlsdGVyICAgIFRoZSBraW5kIG9mIGZpbHRlciAodG8gcmV0dXJuIG9ubHkgdmFsdWVzIHJlcXVpcmVkKQ0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICRkYiAgICAgVGhlIGRhdGFiYXNlIG9iamVjdA0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oJHRhYmxlID0gJ2Zvcm0nLCAkbWV0aG9kID0gJ3BsYWNlaG9sZGVyJywgJGZpbHRlciA9ICdub25lJywgJGRiID0gbnVsbCkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gcHJlcCBmb3IgcGxhY2Vob2xkZXJzDQoJCSRmID0gJyc7DQoJCSRiID0gJyc7DQoJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHBsYWNlaG9sZGVyIHByZWZpeA0KCQkJJHByZWZpeCA9IHNlbGY6OiRwYXJhbXMtPmdldCgncGxhY2Vob2xkZXJfcHJlZml4JywgJ1tbW2NvbXBvbmVudF1dXScpOw0KCQkJJGYgPSAnWycgLiAkcHJlZml4IC4gJ18nOw0KCQkJJGIgPSAnXSc7DQoJCX0NCgkJLy8gZ2V0IHN0YXR1cyBub3JtIGZpZWxkcw0KCQlpZiAobWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRTdGF0dXNOb3JtRmllbGRzJykpDQoJCXsNCgkJCSRub3JtcyA9IHNlbGY6OmdldFN0YXR1c05vcm1GaWVsZHMoKTsNCgkJfQ0KCQkvLyBnZXQgY2hhcnRzDQoJCWlmICgnY2hhcnQnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIgJiYgbWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRBdmFpbGFibGVDaGFydHMnKSkNCgkJew0KCQkJJGNoYXJ0cyA9IHNlbGY6OmdldEF2YWlsYWJsZUNoYXJ0cygpOw0KCQl9DQoJCS8vIG9ubHkgZ2V0IHdoYXQgd2UgbmVlZA0KCQlpZiAoJ3Byb2ZpbGUnID09PSAkZmlsdGVyKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGZpZWxkcy9jb2x1bW5zDQoJCQkkY29sdW1ucyA9IGFycmF5KCdpZCcsICdjcmVhdGVkJywgJ21vZGlmaWVkJywgJ25hbWUnKTsNCgkJfQ0KCQkvLyBzZXQgdGhlIHZhbHVlcyB5b3Ugd2FudCB0byByZW1vdmUgYWZ0ZXIgbW9kZWxpbmcNCgkJZWxzZWlmICgncmVtb3ZlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gcmVtb3ZlIHBhcmFtcyBhbHdheXMNCgkJCSRyZW1vdmUgPSBhcnJheSgkZiAuICdwYXJhbXMnIC4gJGIpOw0KCQkJLy8gcmVtb3ZlIHRoZSBub3JtcyBpZiBmb3VuZA0KCQkJaWYgKGlzc2V0KCRub3JtcykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG5vcm1zKSkNCgkJCXsNCgkJCQlmb3JlYWNoICgkbm9ybXMgYXMgJG5vcm0pDQoJCQkJew0KCQkJCQkkcmVtb3ZlW10gPSAkZiAuICdzdGF0dXNfJyAuICRub3JtIC4gJGI7DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRyZW1vdmU7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBEQiBvYmplY3QNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGRiKSkNCgkJCXsNCgkJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBjb2x1bW5zIG9mIHRoaXMgdGFibGUNCgkJCSRjb2x1bW5zID0gJGRiLT5nZXRUYWJsZUNvbHVtbnMoIiNfX1tbW2NvbXBvbmVudF1dXV8iIC4gJHRhYmxlLCBmYWxzZSk7DQoJCQkvLyBhbHdheXMgcmVtb3ZlIHRoZXNlDQoJCQkkcmVtb3ZlID0gYXJyYXkoJ2Fzc2V0X2lkJywgJ2NoZWNrZWRfb3V0JywgJ2NoZWNrZWRfb3V0X3RpbWUnKTsNCgkJCS8vIGlmIHBsYWNlaG9sZGVyIGFuZCBub25lIGZpbHRlciB0aGVuIHJlbW92ZSBzb21lIG1vcmUNCgkJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kICYmICgncmVwb3J0JyA9PT0gJGZpbHRlciB8fCAnZW1haWwnID09PSAkZmlsdGVyKSkNCgkJCXsNCgkJCQkkcmVtb3ZlW10gPSAnYWNjZXNzJzsNCgkJCQkkcmVtb3ZlW10gPSAnY3JlYXRlZF9ieSc7DQoJCQkJJHJlbW92ZVtdID0gJ29yZGVyaW5nJzsNCgkJCQkkcmVtb3ZlW10gPSAndmVyc2lvbic7DQoJCQkJJHJlbW92ZVtdID0gJ3BhcmFtcyc7DQoJCQkJJHJlbW92ZVtdID0gJ3B1Ymxpc2hlZCc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnbW9kaWZpZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdoaXRzJzsNCgkJCX0NCgkJCS8vIHJlbW92ZQ0KCQkJZm9yZWFjaCAoJHJlbW92ZSBhcyAka2V5KQ0KCQkJew0KCQkJCXVuc2V0KCRjb2x1bW5zWyRrZXldKTsNCgkJCX0NCgkJCS8vIHByZXAgdGhlIGNvbHVtbnMNCgkJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkY29sdW1ucyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY29sdW1ucw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbHVtbnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBjb2x1bW5zIGZvciBxdWVyeSBzZWxlY3Rpb24NCgkJCSRzZWxlY3Rpb24gPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGNvbHVtbnMgYXMgJGNvbHVtbikNCgkJCXsNCgkJCQkkc2VsZWN0aW9uWydhLicgLiAkY29sdW1uXSA9ICRmIC4gJGNvbHVtbiAuICRiOw0KCQkJCS8vIHdlIG11c3QgYWRkIHRoZSBwYXJhbXMNCgkJCQlpZiAoJ3Byb2ZpbGUnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIpDQoJCQkJew0KCQkJCQkvLyBzZXQgdGhlIGxhYmVsIGZvciB0aGVzZSBmaWVsZHMNCgkJCQkJJHNlbGVjdGlvblsnc2V0TGFiZWwtPicgLiAkY29sdW1uXSA9ICRmIC4gJ2xhYmVsXycgLiAkY29sdW1uIC4gJGI7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gYWRkIHRoZSBsaW5rZWQgdmFsdWVzDQoJCQkkc2VsZWN0aW9uWyd0Lm5hbWUnXSA9ICRmIC4gJ3R5cGVfbmFtZScgLiAkYjsNCgkJCS8vIHdlIG11c3QgYWRkIHRoZSBwYXJhbXMNCgkJCWlmICgncHJvZmlsZScgIT09ICRmaWx0ZXIpDQoJCQl7DQoJCQkJLy8gZG8gc29tZSBjb252ZXJzaW9uIGZvciBjcmVhdGVkIGRhdGUNCgkJCQlpZiAoaW5fYXJyYXkoJ2NyZWF0ZWQnLCAkY29sdW1ucykpDQoJCQkJew0KCQkJCQkkc2VsZWN0aW9uWydzZXRZZWFyTW9udGhEYXk6Y3JlYXRlZCddID0gJGYgLiAnZGF5JyAuICRiOw0KCQkJCQkkc2VsZWN0aW9uWydzZXRZZWFyTW9udGg6Y3JlYXRlZCddID0gJGYgLiAnbW9udGgnIC4gJGI7DQoJCQkJCSRzZWxlY3Rpb25bJ2ZhbmN5RGF0ZTpjcmVhdGVkJ10gPSAkZiAuICdjcmVhdGVkJyAuICRiOw0KCQkJCQkvLyBzZXQgbGFiZWwgZm9yIGRheSBhbmQgbW9udGgNCgkJCQkJJHNlbGVjdGlvblsnc2V0TGFiZWwtPmRheSddID0gJGYgLiAnbGFiZWxfZGF5JyAuICRiOw0KCQkJCQkkc2VsZWN0aW9uWydzZXRMYWJlbC0+bW9udGgnXSA9ICRmIC4gJ2xhYmVsX21vbnRoJyAuICRiOw0KCQkJCX0NCgkJCQkvLyBhZGQgdGhlIG5vcm1zIGlmIGZvdW5kDQoJCQkJaWYgKGlzc2V0KCRub3JtcykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJG5vcm1zKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2ggKCRub3JtcyBhcyAkbm9ybSkNCgkJCQkJew0KCQkJCQkJaWYgKCdlbWFpbCcgPT09ICRmaWx0ZXIgfHwgJ3JlcG9ydCcgPT09ICRmaWx0ZXIgfHwgJ2ZpZWxkJyA9PT0gJGZpbHRlciAgfHwgJ2NoYXJ0JyA9PT0gJGZpbHRlcikNCgkJCQkJCXsNCgkJCQkJCQkkc2VsZWN0aW9uWydnZXRWYWx1ZVN0YXR1czonIC4gJG5vcm0uICd8YWdlfGdlbmRlciddID0gJGYgLiAnc3RhdHVzXycgLiAkbm9ybSAuICRiOw0KCQkJCQkJfQ0KCQkJCQkJLy8gZG8gbm90IGxvYWQgZm9yIGZpZWxkDQoJCQkJCQlpZiAoJ2ZpZWxkJyAhPT0gJGZpbHRlciAmJiAnY2hhcnQnICE9PSAkZmlsdGVyKQ0KCQkJCQkJew0KCQkJCQkJCSRzZWxlY3Rpb25bXSA9ICRmIC4gJ3N0YXR1c18nIC4gJG5vcm0uICdfc2NhbGUnIC4gJGI7DQoJCQkJCQkJJHNlbGVjdGlvbltdID0gJGYgLiAnc3RhdHVzXycgLiAkbm9ybS4gJ193b3JkJyAuICRiOw0KCQkJCQkJCSRzZWxlY3Rpb25bXSA9ICRmIC4gJ3N0YXR1c18nIC4gJG5vcm0uICdfdGFibGUnIC4gJGI7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJLy8gYWRkIHRoZSBjaGFydCBkaXYgYW5kIEpTIGNvZGUgKG9ubHkgaWYgZmlsdGVyIGlzIG5vdCBjaGFydCkNCgkJCQlpZiAoJ2NoYXJ0JyAhPT0gJGZpbHRlciAmJiAnZmllbGQnICE9PSAkZmlsdGVyICYmIGlzc2V0KCRjaGFydHMpICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjaGFydHMpKQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJGNoYXJ0cyBhcyAkY2hhcnQgPT4gJHZhbHVlcykNCgkJCQkJew0KCQkJCQkJLy8gbWFrZSBzdXJlIHRoZSBjaGFydCBuYW1lIGlzIHNhdmUNCgkJCQkJCSRzZWxlY3Rpb25bJ3NldENoYXJ0Q29kZS0+JyAuICRjaGFydF0gPSAkZiAuICRjaGFydCAuICRiOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRzZWxlY3Rpb247DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCltDVVNUT01DT0RFPWdldFBsYWNlSG9sZGVyc1JlcG9ydF0NCltDVVNUT01DT0RFPWdldFZhbHVlU3RhdHVzXQ0KW0NVU1RPTUNPREU9Z2V0U3RhdHVzTm9ybUZpZWxkc10NCltDVVNUT01DT0RFPWdldENoYXJ0Q29kZV0NCltDVVNUT01DT0RFPWdldEF2YWlsYWJsZUNoYXJ0c10NCltDVVNUT01DT0RFPWdldE11bHRpQ2hhcnREYXRhVGFibGVdDQpbQ1VTVE9NQ09ERT1nZXRIZWxwZXJDbGFzc10NCltDVVNUT01DT0RFPWdldFRlbXBsYXRlXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCltDVVNUT01DT0RFPWdldEFOWVRlbXBsYXRlK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUZvcm1EZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUNvbXBhbnlEZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9bW9kZWxBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPXBhcmFtc01vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1sYWJlbE1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT10ZW1wbGF0ZU1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1jaGFydE1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1yZW1vdmVBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPWxvYWRSZXBvcnRUYWJdDQpbQ1VTVE9NQ09ERT1nZXRSZXBvcnRdDQpbQ1VTVE9NQ09ERT10aGVCdXRsZXJdDQpbQ1VTVE9NQ09ERT1zZXRUYWJdDQpbQ1VTVE9NQ09ERT1nZXRNZW1iZXJOYW1lXQ0KW0NVU1RPTUNPREU9YmNtYXRoXQ0KW0NVU1RPTUNPREU9bmljZUZhbmN5RGF0ZV0NCltDVVNUT01DT0RFPWdldEJldHdlZW5dDQpbQ1VTVE9NQ09ERT1nZXRDb3JlTmFtZV0=', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Health Logs', '', '', 'Health Log (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_bankableprojects_server.xml', 'http://www.vdm.io', '', 'krtqJQxW6xiHCLIHWBWvAWWGnNVRNM9fUviM2YkG7LA=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"}}', 1, 12, '', 1, 30), +(58, '', '', '', '', 1, '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, 1, '', '', '', 1, 3, 3, 'Llewellyn van der Merwe', '', 'george-media.txt', '', '', 'Vast Development Method', '1.0.20', 'Copyright (C) 2020. All Rights Reserved', '2019-02-12 21:13:15', '', 'rGg3D1+RxX1sMWck2P3t+KXdTBvPNzxL7jWorxm1v68=', 'OPMNRw3HOt7aql6sBmvzZMmvfA7CPVXkKX8DtaRLKbw=', '', 'K+niBg8TTYxQS2WekpOCXGv8xytOU/k8g5BeYYI5hd0=', '', '', 'A_247', 2, '', 'The MyMakita Products', 'joomla@vdm.io', '', '', 'cGUV2m2W7Lmf2fuwmxGcB5BEGfExdUArJ9cZo9zh899e52jZj1zbIoJ1fxx0Ax24ScJGtjichRWVNvuqHvFVoQ==', '', '4b059a57-6845-419c-bdec-505a537eda95', 'images/vdm/Makita500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '⇝', '2020-07-08 01:07:33', 2, 'Products', 'mymakita_products', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEpVU1QgU09NRSBMQU5HIEZJWCBGT1IgTk9XDQoJICogVGV4dDo6XygnUmVnaXN0ZXIgUHJvZHVjdHMnKTsNCgkgKiBUZXh0OjpfKCdFZGl0IFJlZ2lzdGVyZWQgUHJvZHVjdHMnKTsNCgkgKiovDQoNCgkvKioNCgkgKiBHZXQgc2VsZWN0aW9uICBiYXNlZCBvbiB0eXBlDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgIFRoZSBtYWluIHRhYmxlIHRvIHNlbGVjdA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRtZXRob2QgICAgVGhlIHR5cGUgb2YgdmFsdWVzIHRvIHJldHVybg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRmaWx0ZXIgICAgVGhlIGtpbmQgb2YgZmlsdGVyICh0byByZXR1cm4gb25seSB2YWx1ZXMgcmVxdWlyZWQpDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRiICAgICBUaGUgZGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAcmV0dXJuIGFycmF5DQoJICoNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGVjdGlvbigkdGFibGUgPSAnZm9ybScsICRtZXRob2QgPSAncGxhY2Vob2xkZXInLCAkZmlsdGVyID0gJ25vbmUnLCAkZGIgPSBudWxsKQ0KCXsNCgkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGFyYW1zKSkNCgkJew0KCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJfQ0KCQkvLyBwcmVwIGZvciBwbGFjZWhvbGRlcnMNCgkJJGYgPSAnJzsNCgkJJGIgPSAnJzsNCgkJaWYgKCdwbGFjZWhvbGRlcicgPT09ICRtZXRob2QpDQoJCXsNCgkJCS8vIGdldCB0aGUgcGxhY2Vob2xkZXIgcHJlZml4DQoJCQkkcHJlZml4ID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCdwbGFjZWhvbGRlcl9wcmVmaXgnLCAnW1tbY29tcG9uZW50XV1dJyk7DQoJCQkkZiA9ICdbJyAuICRwcmVmaXggLiAnXyc7DQoJCQkkYiA9ICddJzsNCgkJfQ0KCQkvLyBvbmx5IGdldCB3aGF0IHdlIG5lZWQNCgkJaWYgKCdwcm9maWxlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gZ2V0IHRoZSBmaWVsZHMvY29sdW1ucw0KCQkJaWYgKCgkZmllbGRzID0gc2VsZjo6JHBhcmFtcy0+Z2V0KCdwcm9maWxlX2ZpZWxkcycsIGZhbHNlKSkgIT09IGZhbHNlICYmIFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRmaWVsZHMpKQ0KCQkJew0KCQkJCSRjb2x1bW5zID0gYXJyYXkoJ2lkJyk7IC8vIG5lZWRlZCBmb3IgcGVybWlzc2lvbiBjaGVjaw0KCQkJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJGZpZWxkKQ0KCQkJCXsNCgkJCQkJJGNvbHVtbnNbXSA9ICRmaWVsZC0+ZmllbGQ7DQoJCQkJfQ0KCQkJCS8vIGFkZCBkYXRlcyBmb3IgZGlzcGxheQ0KCQkJCSRjb2x1bW5zW10gPSAnY3JlYXRlZCc7DQoJCQkJJGNvbHVtbnNbXSA9ICdtb2RpZmllZCc7DQoJCQl9DQoJCX0NCgkJLy8gc2V0IHRoZSB2YWx1ZXMgeW91IHdhbnQgdG8gcmVtb3ZlIGFmdGVyIG1vZGVsaW5nDQoJCWVsc2VpZiAoJ3JlbW92ZScgPT09ICRmaWx0ZXIpDQoJCXsNCgkJCS8vIHJlbW92ZSBwYXJhbXMgYWx3YXlzDQoJCQkkcmVtb3ZlID0gYXJyYXkoJGYgLiAncGFyYW1zJyAuICRiKTsNCgkJCXJldHVybiAkcmVtb3ZlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgREIgb2JqZWN0DQoJCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRkYikpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZGF0YWJhc2UgY29sdW1ucyBvZiB0aGlzIHRhYmxlDQoJCQkkY29sdW1ucyA9ICRkYi0+Z2V0VGFibGVDb2x1bW5zKCIjX19bW1tjb21wb25lbnRdXV1fIiAuICR0YWJsZSwgZmFsc2UpOw0KCQkJLy8gYWx3YXlzIHJlbW92ZSB0aGVzZQ0KCQkJJHJlbW92ZSA9IGFycmF5KCdhc3NldF9pZCcsICdjaGVja2VkX291dCcsICdjaGVja2VkX291dF90aW1lJyk7DQoJCQkvLyBpZiBwbGFjZWhvbGRlciBhbmQgbm9uZSBmaWx0ZXIgdGhlbiByZW1vdmUgc29tZSBtb3JlDQoJCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCAmJiAoJ3JlcG9ydCcgPT09ICRmaWx0ZXIgfHwgJ2VtYWlsJyA9PT0gJGZpbHRlcikpDQoJCQl7DQoJCQkJJHJlbW92ZVtdID0gJ3BhcmFtcyc7DQoJCQkJJHJlbW92ZVtdID0gJ2FjY2Vzcyc7DQoJCQkJJHJlbW92ZVtdID0gJ2NyZWF0ZWRfYnknOw0KCQkJCSRyZW1vdmVbXSA9ICdpZCc7DQoJCQkJJHJlbW92ZVtdID0gJ29yZGVyaW5nJzsNCgkJCQkkcmVtb3ZlW10gPSAndmVyc2lvbic7DQoJCQkJJHJlbW92ZVtdID0gJ3B1Ymxpc2hlZCc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnbW9kaWZpZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdoaXRzJzsNCgkJCX0NCgkJCS8vIHJlbW92ZQ0KCQkJZm9yZWFjaCAoJHJlbW92ZSBhcyAka2V5KQ0KCQkJew0KCQkJCXVuc2V0KCRjb2x1bW5zWyRrZXldKTsNCgkJCX0NCgkJCS8vIHByZXAgdGhlIGNvbHVtbnMNCgkJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkY29sdW1ucyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY29sdW1ucw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbHVtbnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBjb2x1bW5zIGZvciBxdWVyeSBzZWxlY3Rpb24NCgkJCSRzZWxlY3Rpb24gPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGNvbHVtbnMgYXMgJGNvbHVtbikNCgkJCXsNCgkJCQkkc2VsZWN0aW9uWydhLicgLiAkY29sdW1uXSA9ICRmIC4gJGNvbHVtbiAuICRiOw0KCQkJCS8vIHdlIG11c3QgYWRkIHRoZSBsYWJlbA0KCQkJCWlmICgncHJvZmlsZScgIT09ICRmaWx0ZXIgJiYgJ2ZpZWxkJyAhPT0gJGZpbHRlcikNCgkJCQl7DQoJCQkJCS8vIHNldCB0aGUgbGFiZWwgZm9yIHRoZXNlIGZpZWxkcw0KCQkJCQkkc2VsZWN0aW9uWydzZXRMYWJlbC0+JyAuICRjb2x1bW5dID0gJGYgLiAnbGFiZWxfJyAuICRjb2x1bW4gLiAkYjsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gJHNlbGVjdGlvbjsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBwcm9kdWN0cyBmcm9tIHJlZ2lzdHJ5DQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJvZHVjdCgkaWQsICRndWlkKQ0KCXsNCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgYW4gaW50IGFuZCBpdCBpcyBncmF0ZXIgdGhlbiAwDQoJCWlmICghaXNfbnVtZXJpYygkaWQpICYmICRpZCA8IDEpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQkvLyBnZXQgdGhlIHByb2R1Y3RzIGZyb20gdGhlIHJlZ2lzdHJ5DQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KDQoJCS8vIEdldCBmcm9tICNfX1tbW2NvbXBvbmVudF1dXV9wcm9kdWN0X3JlZ2lzdHJhdGlvbiBhcyBwDQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJYXJyYXkoJ3Auc2VyaWFsJywncC5kZWFsZXJfbmFtZScsJ3AuaW52b2ljZV9udW1iZXInLCdwLmludm9pY2VfZGF0ZScsJ3AuYnJhbmQnLCdwLmNyZWF0ZWQnLCdndWlkJyksDQoJCQlhcnJheSgnc2VyaWFsJywnZGVhbGVyX25hbWUnLCdpbnZvaWNlX251bWJlcicsJ2ludm9pY2VfZGF0ZScsJ2JyYW5kJywnY3JlYXRlZCcsJ3dhcnJhbnR5X251bWJlcicpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3Byb2R1Y3RfcmVnaXN0cmF0aW9uJywgJ3AnKSk7DQoNCgkJLy8gR2V0IGZyb20gI19fW1tbY29tcG9uZW50XV1dX3Byb2R1Y3QgYXMgcHANCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ3BwLmNvZGUnLCdwcC53YXJyYW50eScsJ3BwLmV4dGVuZGVkJywncHAubmFtZScsJ3BwLnR5cGUnKSwgYXJyYXkoJ3Byb2R1Y3RfY29kZScsJ3dhcnJhbnR5JywnZXh0ZW5kZWQnLCdwcm9kdWN0X25hbWUnLCd0eXBlJykpKTsNCgkJJHF1ZXJ5LT5qb2luKCdMRUZUJywgKCRkYi0+cXVvdGVOYW1lKCcjX19teW1ha2l0YV9wcm9kdWN0c19wcm9kdWN0JywgJ3BwJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdwLnByb2R1Y3QnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3BwLmNvZGUnKSAuICcpJyk7DQoNCgkJLy8gR2V0IGZyb20gI19fW1tbY29yZV1dXV9tZW1iZXIgYXMgbQ0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnbS5zdXJuYW1lJyksYXJyYXkoJ3N1cm5hbWUnKSkpOw0KCQkkcXVlcnktPmpvaW4oJ0xFRlQnLCAoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvcmVdXV1fbWVtYmVyJywgJ20nKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ20uaWQnKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ3AubWVtYmVyJykgLiAnKScpOw0KDQoJCS8vIEdldCBmcm9tICNfX3VzZXJzIGFzIHUNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ3UubmFtZScsJ3UuZW1haWwnKSwgYXJyYXkoJ25hbWUnLCdlbWFpbCcpKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fdXNlcnMnLCAndScpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnbS51c2VyJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCd1LmlkJykgLiAnKScpOw0KDQoJCS8vIEdldCBmcm9tICNfX1tbW2NvcmVdXV1fY29udGFjdGRldGFpbHNfZm9ybSBhcyBjYw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnY2Mub2NjdXBhdGlvbl9vdGhlcicsJ2NjLnBob25lJywnY2MucG9zdGFsJywnY2MucG9zdGFsY29kZScsJ2NjLnN1YnVyYicpLCBhcnJheSgnb2NjdXBhdGlvbl9vdGhlcicsJ3Bob25lJywncG9zdGFsJywncG9zdGFsY29kZScsJ3N1YnVyYicpKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29yZV1dXV9jb250YWN0ZGV0YWlsc19mb3JtJywgJ2NjJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdwLm1lbWJlcicpIC4gJyA9ICcgLiAkZGItPnF1b3RlTmFtZSgnY2MubWVtYmVyJykgLiAnKScpOw0KDQoJCS8vIEdldCBmcm9tICNfX1tbW2NvcmVdXV1fY29udGFjdGRldGFpbHNfb2NjdXBhdGlvbiBhcyBvbw0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnb28ubmFtZScpLCBhcnJheSgnb2NjdXBhdGlvbicpKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29yZV1dXV9jb250YWN0ZGV0YWlsc19vY2N1cGF0aW9uJywgJ29vJykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdjYy5vY2N1cGF0aW9uJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdvby5pZCcpIC4gJyknKTsNCg0KCQkvLyBHZXQgZnJvbSAjX19bW1tjb3JlXV1dX2NvbnRhY3RkZXRhaWxzX3JlZ2lvbiBhcyByDQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdyLm5hbWUnKSwgYXJyYXkoJ3JlZ2lvbicpKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29yZV1dXV9jb250YWN0ZGV0YWlsc19yZWdpb24nLCAncicpKSAuICcgT04gKCcgLiAkZGItPnF1b3RlTmFtZSgnY2MucmVnaW9uJykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCdyLmlkJykgLiAnKScpOw0KDQoJCS8vIEdldCBmcm9tICNfX1tbW2NvcmVdXV1fY29udGFjdGRldGFpbHNfY291bnRyeSBhcyB0dA0KCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgndHQubmFtZScpLCBhcnJheSgnY291bnRyeScpKSk7DQoJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29yZV1dXV9jb250YWN0ZGV0YWlsc19jb3VudHJ5JywgJ3R0JykpIC4gJyBPTiAoJyAuICRkYi0+cXVvdGVOYW1lKCdjYy5jb3VudHJ5JykgLiAnID0gJyAuICRkYi0+cXVvdGVOYW1lKCd0dC5pZCcpIC4gJyknKTsNCg0KCQkvLyBvbmx5IHJldHVybiB0aGUgcHJvZHVjdCBpbiBxdWVzdGlvbg0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwLmZvcm0nKSAuICcgPSAnIC4gJGRiLT5xdW90ZSgkZ3VpZCkpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwLmlkJykgLiAnID0gJyAuIChpbnQpICRpZCk7DQoNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkkZGItPmV4ZWN1dGUoKTsNCgkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkcHJvZHVjdCA9ICRkYi0+bG9hZE9iamVjdCgpOw0KCQkJLy8gZG8gc29tZSBob3VzZSBjbGVhbmluZw0KCQkJJHByb2R1Y3QtPmZ1bGxfbmFtZSA9ICRwcm9kdWN0LT5uYW1lIC4gJyAnIC4gJHByb2R1Y3QtPnN1cm5hbWU7DQoJCQkvLyBnZXQgd2FycmFudHkNCgkJCSR3YXJyYW50eSA9IHNlbGY6OmdldFdhcnJhbnR5RGV0YWlscygkcHJvZHVjdCwgZmFsc2UpOw0KCQkJJHByb2R1Y3QtPndhcnJhbnR5X2V4cGlyZV9kYXRlID0gJHdhcnJhbnR5WydleHBpcmUnXTsNCgkJCSRwcm9kdWN0LT53YXJyYW50eV9hY3RpdmUgPSAkd2FycmFudHlbJ2FjdGl2ZSddOw0KCQkJJHByb2R1Y3QtPndhcnJhbnR5X3N0YXR1cyA9ICgkd2FycmFudHlbJ2FjdGl2ZSddKSA/IFRleHQ6Ol8oJ1VuZGVyIFdhcnJhbnR5JykgOiBUZXh0OjpfKCdPdXQgb2YgV2FycmFudHknKTsNCgkJCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gQXVzdHJhbGlhDQoJCQlkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdBdXN0cmFsaWEvU3lkbmV5Jyk7DQoJCQkvLyBmaXggZGF0ZXMNCgkJCSRwcm9kdWN0LT5yZWdpc3RyYXRpb25fZGF0ZSA9IHNlbGY6OnNldERheU1vbnRoWWVhcigkcHJvZHVjdC0+Y3JlYXRlZCk7DQoJCQkvLyBtYWtlIHN1cmUgd2UgYXJlIGluIEF1c3RyYWxpYQ0KCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJLy8gc2V0IHRoZSBpbnZvaWNlIGRhdGUNCgkJCSRwcm9kdWN0LT5pbnZvaWNlX2RhdGUgPSBzZWxmOjpzZXREYXlNb250aFllYXIoJHByb2R1Y3QtPmludm9pY2VfZGF0ZSArIDApOw0KCQkJLy8gc2V0IG9jY3VwYXRpb24NCgkJCWlmIChTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcHJvZHVjdC0+b2NjdXBhdGlvbl9vdGhlcikgJiYgIVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRwcm9kdWN0LT5vY2N1cGF0aW9uKSApDQoJCQl7DQoJCQkJJHByb2R1Y3QtPm9jY3VwYXRpb24gPSAkcHJvZHVjdC0+b2NjdXBhdGlvbl9vdGhlcjsNCgkJCX0NCgkJCS8vIG1ha2Ugc3VyZSB0aGUgZnVsbF9uYW1lIG5hbWUgaXMgbm90IGxvbmdlciB0aGVuIDYwDQoJCQkkcHJvZHVjdC0+ZnVsbF9uYW1lID0gc2VsZjo6c29ydGVuKCRwcm9kdWN0LT5mdWxsX25hbWUsIDYwLCBmYWxzZSk7DQoJCQkvLyBtYWtlIHN1cmUgdGhlIGRlYWxlciBuYW1lIGlzIG5vdCBsb25nZXIgdGhlbiA2MA0KCQkJJHByb2R1Y3QtPmRlYWxlcl9uYW1lID0gc2VsZjo6c29ydGVuKCRwcm9kdWN0LT5kZWFsZXJfbmFtZSwgNjAsIGZhbHNlKTsNCgkJCS8vIG1ha2Ugc3VyZSB0aGUgcHJvZHVjdCBuYW1lIGlzIG5vdCBsb25nZXIgdGhlbiA0MA0KCQkJJHByb2R1Y3QtPnByb2R1Y3RfbmFtZSA9IHNlbGY6OnNvcnRlbigkcHJvZHVjdC0+cHJvZHVjdF9uYW1lLCA0MCwgZmFsc2UpOw0KCQkJLy8gcmVtb3ZlIHNvbWUgc3R1ZmYgbm8gbG9uZ2VyIG5lZWRlZA0KCQkJdW5zZXQoJHByb2R1Y3QtPm9jY3VwYXRpb25fb3RoZXIpOw0KCQkJdW5zZXQoJHByb2R1Y3QtPmNyZWF0ZWQpOw0KCQkJdW5zZXQoJHByb2R1Y3QtPnR5cGUpOw0KCQkJdW5zZXQoJHByb2R1Y3QtPmJyYW5kKTsNCgkJCXVuc2V0KCRwcm9kdWN0LT53YXJyYW50eSk7DQoJCQl1bnNldCgkcHJvZHVjdC0+ZXh0ZW5kZWQpOw0KCQkJLy8gbm93IHJldHVybiBwcm9kdWN0IGRldGFpbHMNCgkJCXJldHVybiAkcHJvZHVjdDsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBwcm9kdWN0cyBmcm9tIHJlZ2lzdHJ5DQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJvZHVjdHMoJiRmaWVsZCwgJiRkYXRhLCAkYnJhbmQNCgkpIC8vIGRhdGEgaXMgYW4gb2JqZWN0DQoJew0KCQkvLyBDb252ZXJ0IHRoZSBmaWVsZCB0byBhbiBhcnJheS4NCgkJJGZpZWxkID0gYXJyYXkoKTsNCgkJaWYgKHNlbGY6OnZhbGlkYXRlR1VJRCgkZGF0YS0+Z3VpZCkNCgkJCSYmICgoJGJyYW5kID09IDEgJiYgJGRhdGEtPmFkZF9tYWtpdGFfcHJvZHVjdHMgPT0gMSkNCgkJCQl8fCAoJGJyYW5kID09IDINCgkJCQkJJiYgJGRhdGEtPmFkZF9vdGhlcl9wcm9kdWN0cyA9PSAxKSkpDQoJCXsNCgkJCS8vIGdldCB0aGUgcHJvZHVjdHMgZnJvbSB0aGUgcmVnaXN0cnkNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnYS5wcm9kdWN0JywgJ2Euc2VyaWFsJywgJ2EubmFtZScsICdhLnByb2R1Y3RfY29kZScpKSk7DQoJCQkkcXVlcnktPmZyb20oDQoJCQkJJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9wcm9kdWN0X3JlZ2lzdHJhdGlvbicsICdhJykNCgkJCSk7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnB1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJCSRxdWVyeS0+d2hlcmUoDQoJCQkJJGRiLT5xdW90ZU5hbWUoJ2EuZm9ybScpIC4gJyA9ICcgLiAkZGItPnF1b3RlKCRkYXRhLT5ndWlkKQ0KCQkJKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EuYnJhbmQnKSAuICcgPSAnIC4gKGludCkgJGJyYW5kKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCSRwcm9kdWN0cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQlmb3JlYWNoICgkcHJvZHVjdHMgYXMgJG5yID0+ICRwcm9kdWN0KQ0KCQkJCXsNCgkJCQkJaWYgKCRicmFuZCA9PSAxKQ0KCQkJCQl7DQoJCQkJCQkkZmllbGRbJ21ha2l0YV9wcm9kdWN0cycgLiAkbnJdID0gYXJyYXkoDQoJCQkJCQkJJ3Byb2R1Y3QnID0+ICRwcm9kdWN0LT5wcm9kdWN0LA0KCQkJCQkJCSdzZXJpYWwnICA9PiAkcHJvZHVjdC0+c2VyaWFsDQoJCQkJCQkpOw0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJJGZpZWxkWydvdGhlcl9wcm9kdWN0cycgLiAkbnJdID0gYXJyYXkoDQoJCQkJCQkJJ25hbWUnICAgICAgICAgPT4gJHByb2R1Y3QtPm5hbWUsDQoJCQkJCQkJJ3Byb2R1Y3RfY29kZScgPT4gJHByb2R1Y3QtPnByb2R1Y3RfY29kZSwNCgkJCQkJCQknc2VyaWFsJyAgICAgICA9PiAkcHJvZHVjdC0+c2VyaWFsDQoJCQkJCQkpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogU2VuZCBwcm9kdWN0IHJlZ2lzdHJhdGlvbiBlbWFpbA0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlbmRQcm9kdWN0UmVnaXN0cmF0aW9uRW1haWwoJiRyZWNpcGllbnQpDQoJew0KCQkvLyBsb2FkIHRoZSB3ZWJzaXRlIGxpbmsNCgkJJHJlY2lwaWVudFsnbWFraXRhX3VybCddID0gVXJpOjpyb290KCk7IC8vICdodHRwczovL3d3dy5tYWtpdGEuY29tLmF1LycgZGlkIGhhcmQgY29kZSB0aGlzLCBidXQgd2FzIGFza2VkIHRvIHVzZSB0aGUgd2Vic2l0ZSByb290IChkeW5hbWljIGdpdmVuIGJ5IEpvb21sYSkgaW5zdGVhZC4NCgkJLy8gZ2V0IHRoZSBtZXNzYWdlIHRlbXBsYXRlDQoJCSRtZXNzYWdlID0gc2VsZjo6Z2V0RW1haWxUZW1wbGF0ZSgpOw0KCQkvLyBjb252ZXJ0ICRyZWNpcGllbnQgdG8gcGxhY2Vob2xkZXJzDQoJCSRwbGFjZWhvbGRlcnMgPSBhcnJheSgpOw0KCQlmb3JlYWNoICgkcmVjaXBpZW50IGFzICRrZXkgPT4gJHZhbHVlKQ0KCQl7DQoJCQkkcGxhY2Vob2xkZXJzWydbJyAuICRrZXkgLiAnXSddID0gJHZhbHVlOw0KCQl9DQoJCXJldHVybiBzZWxmOjpzZW5kTWVzc2FnZSgkcmVjaXBpZW50LCAkbWVzc2FnZSwgJHBsYWNlaG9sZGVycyk7DQoJfQ0KDQoJLyoqDQoJICogU2VuZCBhIE1lc3NhZ2UNCgkgKg0KCSAqIEByZXR1cm4gYm9vbGVhbg0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZW5kTWVzc2FnZSgmJHJlY2lwaWVudCwgJiRtZXNzYWdlLCAmJHBsYWNlaG9sZGVycykNCgl7DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIHJlY2lwaWVudCBkZXRhaWxzDQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcmVjaXBpZW50KSAmJiBpc3NldCgkcmVjaXBpZW50WydlbWFpbCddKSkNCgkJew0KCQkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgcGxhY2Vob2xkZXJzDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHBsYWNlaG9sZGVycykpDQoJCQl7DQoJCQkJLy8gYm90aCBodG1sIGFuZCB0ZXh0DQoJCQkJJGh0bWwgPSBzZWxmOjpzZXREeW5hbWljRGF0YSgkbWVzc2FnZVsnaHRtbCddLCAkcGxhY2Vob2xkZXJzKTsNCgkJCQkkdGV4dCA9IHNlbGY6OnNldER5bmFtaWNEYXRhKCRtZXNzYWdlWyd0ZXh0J10sICRwbGFjZWhvbGRlcnMpOw0KCQkJCS8vIHNldCBtb2RlIHRvIEhUTUwNCgkJCQkkbW9kZSA9IDE7DQoJCQkJLy8gc2V0IHRoZSBzdWJqZWN0DQoJCQkJJHN1YmplY3QgPSBzZWxmOjpzZXREeW5hbWljRGF0YSgkbWVzc2FnZVsnc3ViamVjdCddLCAkcGxhY2Vob2xkZXJzKTsNCgkJCQkvLyBub3cgc2VuZCB0aGUgZW1haWwNCgkJCQlpZiAoW1tbQ29tcG9uZW50XV1dRW1haWw6OnNlbmQoJHJlY2lwaWVudFsnZW1haWwnXSwgJHN1YmplY3QsICRodG1sLCAkdGV4dCwgJG1vZGUpKQ0KCQkJCXsNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBTZXQgdGhlIHByb2R1Y3RzIHRvIHRoZSByZWdpc3RyeQ0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFByb2R1Y3RzKCYkZmllbGQsICYkZGF0YSwgJGJyYW5kDQoJKSAvLyBkYXRhIGlzIGFuIGFycmF5DQoJew0KCQkvLyBzYXZlIHRoZSBwcm9kdWN0cyB0byB0aGUgcmVnaXN0cnkNCgkJaWYgKHNlbGY6OnZhbGlkYXRlR1VJRCgkZGF0YVsnZ3VpZCddKSkNCgkJew0KCQkJJHByb2R1Y3RzID0gYXJyYXkoKTsNCgkJCS8vIGdldCB0aGUgcHJvZHVjdHMgZnJvbSB0aGUgcmVnaXN0cnkNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnYS5pZCcsICdhLnZlcnNpb24nLCAnYS5wcm9kdWN0JywgJ2Euc2VyaWFsJywgJ2EubmFtZScsICdhLnByb2R1Y3RfY29kZScsICdhLmd1aWQnLCAnYS5jcmVhdGVkJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgNCgkJCQkkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3Byb2R1Y3RfcmVnaXN0cmF0aW9uJywgJ2EnKQ0KCQkJKTsNCgkJCSRxdWVyeS0+d2hlcmUoDQoJCQkJJGRiLT5xdW90ZU5hbWUoJ2EuZm9ybScpIC4gJyA9ICcgLiAkZGItPnF1b3RlKCRkYXRhWydndWlkJ10pDQoJCQkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYS5icmFuZCcpIC4gJyA9ICcgLiAoaW50KSAkYnJhbmQpOw0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJHByb2R1Y3RzID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJfQ0KCQkJLy8gY2hlY2sgaWYgd2UgbXVzdCBpbnNlcnQgb3IgdXBkYXRlIHByb2R1Y3RzDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGZpZWxkKQ0KCQkJCSYmICgoJGJyYW5kID09IDEgJiYgJGRhdGFbJ2FkZF9tYWtpdGFfcHJvZHVjdHMnXSA9PSAxKQ0KCQkJCQl8fCAoJGJyYW5kID09IDIgJiYgJGRhdGFbJ2FkZF9vdGhlcl9wcm9kdWN0cyddID09IDEpKSkNCgkJCXsNCg0KCQkJCS8vIGdldCB0aGUgdXNlciBvYmplY3QNCgkJCQkkdXNlciA9IEZhY3Rvcnk6OmdldFVzZXIoKTsNCgkJCQkvLyBzZXQgc29tZSBkZWZhdWx0cw0KCQkJCSR0b2RheURhdGUgPSBGYWN0b3J5OjpnZXREYXRlKCktPnRvU3FsKCk7DQoJCQkJLy8gc3RvcmUgdGhlIGRhdGENCgkJCQlmb3JlYWNoICgkZmllbGQgYXMgJGsgPT4gJHByb2R1Y3QpDQoJCQkJew0KCQkJCQkvLyBidWlsZCBzdG9yaW5nIG9iamVjdA0KCQkJCQkkc3RvcmUgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkJCSRzdG9yZS0+Zm9ybSA9ICRkYXRhWydndWlkJ107DQoJCQkJCSRzdG9yZS0+c2VyaWFsID0gJHByb2R1Y3RbJ3NlcmlhbCddOw0KCQkJCQkkc3RvcmUtPmJyYW5kID0gKGludCkgJGJyYW5kOw0KCQkJCQkkc3RvcmUtPm1lbWJlciA9IChpbnQpICRkYXRhWydtZW1iZXInXTsNCgkJCQkJJHN0b3JlLT5kZWFsZXJfbmFtZSA9ICRkYXRhWydkZWFsZXJfbmFtZSddOw0KCQkJCQkkc3RvcmUtPmludm9pY2VfbnVtYmVyID0gJGRhdGFbJ2ludm9pY2VfbnVtYmVyJ107DQoJCQkJCSRzdG9yZS0+aW52b2ljZV9kYXRlID0gJGRhdGFbJ2ludm9pY2VfZGF0ZSddOw0KCQkJCQkkc3RvcmUtPnB1Ymxpc2hlZCA9IDE7DQoJCQkJCS8vIHNldCBwcm9kdWN0IGRldGFpbHMNCgkJCQkJaWYgKCRicmFuZCA9PSAxICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRwcm9kdWN0Wydwcm9kdWN0J10pKQ0KCQkJCQl7DQoJCQkJCQkkc3RvcmUtPnByb2R1Y3QgPSAkcHJvZHVjdFsncHJvZHVjdCddOw0KCQkJCQkJLy8gc3R1cGlkIGZpeCBmb3IgY29tYm8gKFRoaXNpc2FDb21ib0tpdCkgVE9ETw0KCQkJCQkJaWYgKCdUaGlzaXNhQ29tYm9LaXQnID09PSAkc3RvcmUtPnNlcmlhbCkNCgkJCQkJCXsNCgkJCQkJCQkkc3RvcmUtPnNlcmlhbCA9ICRzdG9yZS0+cHJvZHVjdCAuICctJyAuIHNlbGY6OnJhbmRvbWtleSg3KTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQllbHNlaWYgKCRicmFuZCA9PSAyICYmIFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRwcm9kdWN0WyduYW1lJ10pDQoJCQkJCQkmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkcHJvZHVjdFsncHJvZHVjdF9jb2RlJ10pKQ0KCQkJCQl7DQoJCQkJCQkkc3RvcmUtPm5hbWUgPSAkcHJvZHVjdFsnbmFtZSddOw0KCQkJCQkJJHN0b3JlLT5wcm9kdWN0X2NvZGUgPSAkcHJvZHVjdFsncHJvZHVjdF9jb2RlJ107DQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkvLyByZW1vdmUgZnJvbSBmaWVsZCBzZXQNCgkJCQkJCXVuc2V0KCRmaWVsZFska10pOw0KCQkJCQkJY29udGludWU7DQoJCQkJCX0NCgkJCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBwcm9kdWN0cyBpbiB0aGUgcmVnaXN0cnkNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRwcm9kdWN0cykpDQoJCQkJCXsNCgkJCQkJCSRzZWFyY2hpbmcgPSB0cnVlOw0KCQkJCQkJZm9yZWFjaCAoJHByb2R1Y3RzIGFzICRuciA9PiAkX3Byb2R1Y3QpDQoJCQkJCQl7DQoJCQkJCQkJLy8gY2hlY2sgaWYgcHJvZHVjdCBpcyBmb3VuZA0KCQkJCQkJCWlmICgkc2VhcmNoaW5nICYmIHN0cmNhc2VjbXAoJHN0b3JlLT5zZXJpYWwsICRfcHJvZHVjdC0+c2VyaWFsKSA9PSAwICYmIA0KCQkJCQkJCQkoDQoJCQkJCQkJCSAgKCRicmFuZCA9PSAxICYmIHN0cmNhc2VjbXAoJHN0b3JlLT5wcm9kdWN0LCAkX3Byb2R1Y3QtPnByb2R1Y3QpID09IDApIHx8DQoJCQkJCQkJCSAgKCRicmFuZCA9PSAyICYmIHN0cmNhc2VjbXAoJHN0b3JlLT5wcm9kdWN0X2NvZGUsICRfcHJvZHVjdC0+cHJvZHVjdF9jb2RlKSA9PSAwKQ0KCQkJCQkJCQkpDQoJCQkJCQkJKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gbWFwIHRvIGV4aXN0aW5nIHByb2R1Y3QgKElEKQ0KCQkJCQkJCQkkc3RvcmUtPmlkID0gJF9wcm9kdWN0LT5pZDsNCgkJCQkJCQkJLy8gc2V0IHRoZSBHVUlEDQoJCQkJCQkJCWlmIChzZWxmOjp2YWxpZGF0ZUdVSUQoJF9wcm9kdWN0LT5ndWlkKSkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHN0b3JlLT5ndWlkID0gJF9wcm9kdWN0LT5ndWlkOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRzdG9yZS0+dmVyc2lvbiA9ICRfcHJvZHVjdC0+dmVyc2lvbiArIDE7DQoJCQkJCQkJCSRzdG9yZS0+bW9kaWZpZWRfYnkgPSAkdXNlci0+aWQ7DQoJCQkJCQkJCSRzdG9yZS0+bW9kaWZpZWQgPSAkdG9kYXlEYXRlOw0KCQkJCQkJCQkkc3RvcmUtPmNyZWF0ZWQgPSAkX3Byb2R1Y3QtPmNyZWF0ZWQ7DQoJCQkJCQkJCS8vIHJlbW92ZSBmcm9tIGFycmF5DQoJCQkJCQkJCXVuc2V0KCRwcm9kdWN0c1skbnJdKTsNCgkJCQkJCQkJLy8gYnJlYWsgb3V0IG9mIHRoaXMgbG9vcA0KCQkJCQkJCQkkc2VhcmNoaW5nID0gZmFsc2U7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCS8vIHVwZGF0ZQ0KCQkJCQlpZiAoaXNzZXQoJHN0b3JlLT5pZCkpDQoJCQkJCXsNCgkJCQkJCS8vIGNoZWNrIHRoYXQgd2UgaGF2ZSBHVUlEDQoJCQkJCQl3aGlsZSAoIXNlbGY6OnZhbGlkR1VJRCgkc3RvcmUtPmd1aWQsICdwcm9kdWN0X3JlZ2lzdHJhdGlvbicsICRzdG9yZS0+aWQpKQ0KCQkJCQkJew0KCQkJCQkJCSRzdG9yZS0+Z3VpZCA9IHNlbGY6OkdVSUQoKTsNCgkJCQkJCX0NCgkJCQkJCSRkYi0+dXBkYXRlT2JqZWN0KA0KCQkJCQkJCScjX19bW1tjb21wb25lbnRdXV1fcHJvZHVjdF9yZWdpc3RyYXRpb24nLCAkc3RvcmUsDQoJCQkJCQkJJ2lkJw0KCQkJCQkJKTsNCgkJCQkJfQ0KCQkJCQkvLyBpbnNlcnQNCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkkc3RvcmUtPnZlcnNpb24gPSAxOw0KCQkJCQkJJHN0b3JlLT5ndWlkID0gc2VsZjo6R1VJRCgpOw0KCQkJCQkJLy8gdmFsaWRhdGUgdW50aWwgR1VJRA0KCQkJCQkJd2hpbGUgKCFzZWxmOjp2YWxpZEdVSUQoJHN0b3JlLT5ndWlkLCAncHJvZHVjdF9yZWdpc3RyYXRpb24nKSkNCgkJCQkJCXsNCgkJCQkJCQkkc3RvcmUtPmd1aWQgPSBzZWxmOjpHVUlEKCk7DQoJCQkJCQl9DQoJCQkJCQkkc3RvcmUtPmNyZWF0ZWRfYnkgPSAkdXNlci0+aWQ7DQoJCQkJCQkkc3RvcmUtPmNyZWF0ZWQgPSAkdG9kYXlEYXRlOw0KCQkJCQkJJGRiLT5pbnNlcnRPYmplY3QoDQoJCQkJCQkJJyNfX1tbW2NvbXBvbmVudF1dXV9wcm9kdWN0X3JlZ2lzdHJhdGlvbicsICRzdG9yZQ0KCQkJCQkJKTsNCgkJCQkJfQ0KCQkJCQkvLyBiYW5kPTEgbWVhbnMgTWFraXRhDQoJCQkJCWlmICgkc3RvcmUtPmJyYW5kID09IDEpDQoJCQkJCXsNCgkJCQkJCS8vIGRvIHRoZSBjb21wZXRpdGlvbiBjaGVjayB0byBzZWUgaWYgdGhpcyBwcm9kdWN0IHF1YWxpZnkNCgkJCQkJCXNlbGY6OnNldFF1YWxpZnlpbmcoJHN0b3JlKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBDb252ZXJ0IHRoZSBmaWVsZCB0byBhbiBzdHJpbmcgKGpzb24pLg0KCQkJCSRqc29uID0gbmV3IEpSZWdpc3RyeTsNCgkJCQkkanNvbi0+bG9hZEFycmF5KCRmaWVsZCk7DQoJCQkJJGZpZWxkID0gKHN0cmluZykgJGpzb247DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gZW1wdHkgdGhlIHByb2R1Y3RzDQoJCQkJJGZpZWxkID0gJyc7DQoJCQl9DQoJCQkvLyBpZiB3ZSBoYXZlIHByb2R1Y3RzIGxlZnQgZGVsZXRlIHRoZW0NCgkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkcHJvZHVjdHMpKQ0KCQkJew0KCQkJCS8vIGdldCB0aG9zZSB3ZSBhcmUgZ29pbmcgdG8gZGVsZXRlDQoJCQkJJGRlbGV0ZSA9IGFycmF5X21hcChmdW5jdGlvbigkcHJvZHVjdCl7DQoJCQkJCXJldHVybiAkcHJvZHVjdC0+aWQ7DQoJCQkJfSwgJHByb2R1Y3RzKTsNCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCS8vIGRlbGV0ZSBhbGwgYWxsIHRoZXNlDQoJCQkJJGNvbmRpdGlvbnMgPSBhcnJheSgNCgkJCQkJJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnIElOICgnIC4gaW1wbG9kZSgnLCcsICRkZWxldGUpIC4gJyknDQoJCQkJKTsNCgkJCQkkcXVlcnktPmRlbGV0ZSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3Byb2R1Y3RfcmVnaXN0cmF0aW9uJykpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJGNvbmRpdGlvbnMpOw0KCQkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIGVtcHR5IHRoZSBwcm9kdWN0cw0KCQkJJGZpZWxkID0gJyc7DQoJCX0NCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFF1YWxpZnlpbmcoJiRwcm9kdWN0KQ0KCXsNCgkJaWYgKCgkaGVscGVyQ2xhc3MgPSBzZWxmOjpnZXRIZWxwZXJDbGFzcygnY29tX1tbW2NvbXBldGl0aW9uXV1dJykpICE9PSBmYWxzZSAmJiBtZXRob2RfZXhpc3RzKCRoZWxwZXJDbGFzcywgJ3NldFF1YWxpZnlpbmcnKSkNCgkJew0KCQkJcmV0dXJuICRoZWxwZXJDbGFzczo6c2V0UXVhbGlmeWluZygkcHJvZHVjdCk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBUaGUgcHJvZHVjdHMgd2FycmFudHkgZGV0YWlscw0KCSAqDQoJICogQHZhciBhcnJheQ0KCSAqDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyAkd2FycmFudHlEZXRhaWxzID0gYXJyYXkoKTsNCg0KCS8qKg0KCSAqIEdldCB0aGUgcHJvZHVjdHMgd2FycmFudHkgZGV0YWlscw0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRXYXJyYW50eURldGFpbHMoJiRwcm9kdWN0LCAkYWRkX2xpbmsgPSB0cnVlKQ0KCXsNCgkJLy8gYmFuZD0xIG1lYW5zIE1ha2l0YSwgYW5kIHR5cGU9MSBtZWFucyB0aGlzIGlzIGEgcHJvZHVjdCBub3QgYSBjb21iby9raXQNCgkJaWYgKCRwcm9kdWN0LT5icmFuZCA9PSAxICYmICRwcm9kdWN0LT50eXBlID09IDEpDQoJCXsNCgkJCS8vIHRvIHNwZWVkdXAsIGFuZCBhdm9pZCBkb3VibGUgY2FsY3VsYXRpb25zDQoJCQkkY2FjaGVLZXkgPSAoJGFkZF9saW5rKSA/ICRwcm9kdWN0LT5ndWlkIC4gJ19MJyA6ICRwcm9kdWN0LT5ndWlkOw0KCQkJaWYgKCFpc3NldChzZWxmOjokd2FycmFudHlEZXRhaWxzWyRjYWNoZUtleV0pKQ0KCQkJew0KCQkJCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gQXVzdHJhbGlhDQoJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCS8vIHNldCB0aGUgd2FycmFudHkgdG8gbm90IGJlaW5nIGFjdGl2ZSAodW50aWwgcHJvdmVuIG90aGVyd2lzZSkNCgkJCQkkYWN0aXZlID0gMDsNCgkJCQkvLyBsaW5rIHRvIGdldCB0aGUgd2FycmFudHkgY2VydA0KCQkJCSRsaW5rID0gbnVsbDsNCgkJCQkvLyBzd2l0Y2ggdG8gYWRkIGV4dGVuZGVkIHdhcnJhbnR5IG9uY2UNCgkJCQkkc2hvdWxkX3N0aWxsX2FkZF9leHRlbmRlZCA9IHRydWU7DQoJCQkJJHllYXJzX2V4dGVuZGVkID0gNTsNCgkJCQkvLyBoYXMgY2VydGlmaWNhdGUNCgkJCQkkaGFzX2NlcnQgPSBmYWxzZTsNCgkJCQkvLyBtYWtlIHN1cmUgd2UgYXJlIGluIEF1c3RyYWxpYQ0KCQkJCWRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0F1c3RyYWxpYS9TeWRuZXknKTsNCgkJCQkvLyBnZXQgdGhlIHRpbWUgc3RhbXAgZm9yIG5vdw0KCQkJCSR0b2RheV9kYXRlID0gdGltZSgpOw0KCQkJCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gQXVzdHJhbGlhDQoJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCS8vIHRoZSByZWdpc3RyYXRpb24gZGF0ZSBpcyB0aGUgY3JlYXRlZCBkYXRlDQoJCQkJJGNyZWF0ZWRfZGF0ZSA9IHN0cnRvdGltZSgkcHJvZHVjdC0+Y3JlYXRlZCk7DQoJCQkJLy8gc2V0IHRoZSBpbnZvaWNlIGRhdGUNCgkJCQkkaW52b2ljZV9kYXRlID0gKGludCkgJHByb2R1Y3QtPmludm9pY2VfZGF0ZTsNCgkJCQkvLyBleHBpcmUgZGF0ZSBkZWZhdWx0IHRvIGludm9pY2UgZGF0ZQ0KCQkJCSRleHBpcmVfZGF0ZSA9ICRpbnZvaWNlX2RhdGU7DQoJCQkJLy8gYWRkIG5vcm1hbCB3YXJyYW50eSBpZiBleGlzdA0KCQkJCWlmICgkcHJvZHVjdC0+d2FycmFudHkgPiAwKQ0KCQkJCXsNCgkJCQkJLy8gbWFrZSBzdXJlIHdlIGFyZSBpbiBBdXN0cmFsaWENCgkJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCQkvLyB1cGRhdGUgZXhwaXJlIGRhdGUgd2l0aCBhY3R1YWwgd2FycmFudHkNCgkJCQkJJGV4cGlyZV9kYXRlID0gc3RydG90aW1lKCcrJyAuICRwcm9kdWN0LT53YXJyYW50eSAuJ3llYXJzJywgJGludm9pY2VfZGF0ZSk7DQoJCQkJCS8vIGRlZHVjdCB0aGUgbm9ybWFsIHdhcnJhbnR5IGZyb20gZXh0ZW5kZWQgd2FycmFudHkNCgkJCQkJJHllYXJzX2V4dGVuZGVkID0gJHllYXJzX2V4dGVuZGVkIC0gJHByb2R1Y3QtPndhcnJhbnR5Ow0KDQoJCQkJCS8vIHdlIGNvdW50IHllYXJzIGFkZGVkDQoJCQkJCSR5ZWFyc19hZGRlZCA9ICRwcm9kdWN0LT53YXJyYW50eTsNCgkJCQl9DQoJCQkJLy8gYWRkIGV4dGVuZGVkIGRhdGUgaWYgcHJvZHVjdCBxdWFsaWZ5DQoJCQkJaWYgKCRzaG91bGRfc3RpbGxfYWRkX2V4dGVuZGVkICYmICRwcm9kdWN0LT5leHRlbmRlZCA9PSAxKQ0KCQkJCXsNCgkJCQkJLy8gbWFrZSBzdXJlIHdlIGFyZSBpbiBBdXN0cmFsaWENCgkJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCQkvLyBzdGVwIGZvcndhcmQgMzAgZGF5cyBmcm9tIHB1cmNoYXNlIGRhdGUgKGludm9pY2UgZGF0ZSkNCgkJCQkJJGZvcndhcmRfdGhpcnR5X2RhdGUgPSBzdHJ0b3RpbWUoJyszMGRheXMnLCAkaW52b2ljZV9kYXRlKTsNCgkJCQkJLy8gbm93IGNoZWNrIGlmIHRoZSByZWdpc3RyYXRpb24gZmFsbHMgaW4gdGhlIA0KCQkJCQkvLyBxdWFsaWZ5aW5nIDMwIGRheXMgYWZ0ZXIgcHVyY2hhc2luZyB0aGUgcHJvZHVjdA0KCQkJCQkvLyBzbyBpZiB0aGUgZm9yd2FyZF90aGlydHlfZGF0ZSBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIGNyZWF0ZWRfZGF0ZQ0KCQkJCQkvLyB0aGUgdGhlIHByb2R1Y3QgcXVhbGlmaWVzDQoJCQkJCWlmICgkZm9yd2FyZF90aGlydHlfZGF0ZSA+PSAkY3JlYXRlZF9kYXRlKQ0KCQkJCQl7DQoJCQkJCQkvLyBtYWtlIHN1cmUgd2UgYXJlIGluIEF1c3RyYWxpYQ0KCQkJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCQkJLy8gYWRkIHRoZSBleHRlbmRlZCB3YXJyYW50eSB5ZWFycw0KCQkJCQkJJGV4cGlyZV9kYXRlID0gc3RydG90aW1lKCcrJyAuICR5ZWFyc19leHRlbmRlZCAuICd5ZWFycycsICRleHBpcmVfZGF0ZSk7DQoJCQkJCQkvLyBtYWtlIHN1cmUgd2UgYWRkIGl0IG9ubHkgb25jZQ0KCQkJCQkJJHNob3VsZF9zdGlsbF9hZGRfZXh0ZW5kZWQgPSBmYWxzZTsNCgkJCQkJCS8vIGhhcyBjZXJ0aWZpY2F0ZQ0KCQkJCQkJJGhhc19jZXJ0ID0gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQkvLyBtYWtlIHN1cmUgd2UgYXJlIHN0aWxsIGluIDIwMjAgYW5kIGJlZm9yZSBlbmQgb2YgQXVndXN0DQoJCQkJCSR0aGlzX3llYXIgPSBzZWxmOjpzZXRZZWFyKCR0b2RheV9kYXRlKTsNCgkJCQkJJHRoaXNfbW9udGggPSBzZWxmOjpzZXRNb250aCgkdG9kYXlfZGF0ZSk7DQoJCQkJCS8vIHNlZSBpZiB0aGlzIGZhbGxzIGluIENPVklELTE5IHNwZWNpYWwNCgkJCQkJaWYgKCRzaG91bGRfc3RpbGxfYWRkX2V4dGVuZGVkICYmICcyMDIwJyA9PSAkdGhpc195ZWFyICYmICR0aGlzX21vbnRoIDw9IDgpDQoJCQkJCXsNCgkJCQkJCS8vIGNoZWNrIGlmIGludm9pY2UgeWVhciBpcyAyMDIwDQoJCQkJCQkkeWVhciA9IHNlbGY6OnNldFllYXIoJGludm9pY2VfZGF0ZSk7DQoJCQkJCQkvLyBjaGVjayBpZiBtb250aCBpcyBiZXR3ZWVuIEphbnVhcnkgYW5kIEp1bHkNCgkJCQkJCSRtb250aCA9IHNlbGY6OnNldE1vbnRoKCRpbnZvaWNlX2RhdGUpOw0KCQkJCQkJLy8gaWYgdGhlIGNyaXRlcmlhIGlzIG1ldCwgd2UgYWRkIGV4dGVuZGVkIHdhcnJhbnR5DQoJCQkJCQlpZiAoJzIwMjAnID09ICR5ZWFyICYmICRtb250aCA8PSA3KQ0KCQkJCQkJew0KCQkJCQkJCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gQXVzdHJhbGlhDQoJCQkJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCQkJCS8vIGFkZCB0aGUgZXh0ZW5kZWQgd2FycmFudHkgeWVhcnMNCgkJCQkJCQkkZXhwaXJlX2RhdGUgPSBzdHJ0b3RpbWUoJysnIC4gJHllYXJzX2V4dGVuZGVkIC4gJ3llYXJzJywgJGV4cGlyZV9kYXRlKTsNCgkJCQkJCQkvLyBtYWtlIHN1cmUgd2UgYWRkIGl0IG9ubHkgb25jZSBUT0RPIG1vcmUgb3B0aW9ucyBjb3VsZCBiZSBhZGRlZA0KCQkJCQkJCSRzaG91bGRfc3RpbGxfYWRkX2V4dGVuZGVkID0gZmFsc2U7DQoJCQkJCQkJLy8gaGFzIGNlcnRpZmljYXRlDQoJCQkJCQkJJGhhc19jZXJ0ID0gdHJ1ZTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkvLyBub3cgY2hlY2sgaWYgd2FycmFudHkgaXMgYWN0aXZlDQoJCQkJaWYgKCRleHBpcmVfZGF0ZSA+PSAkdG9kYXlfZGF0ZSkNCgkJCQl7DQoJCQkJCS8vIGFjdGl2YXRlIHdhcnJhbnR5DQoJCQkJCSRhY3RpdmUgPSAxOw0KCQkJCQkvLyBvbmx5IGFkZCB0aGUgbGluayBpZiBhc2tlZCB0byAoZGVmYXVsdCBpcyB0cnVlKQ0KCQkJCQlpZiAoJGFkZF9saW5rICYmICRoYXNfY2VydCkNCgkJCQkJew0KCQkJCQkJLy8gc2V0IHRoZSBkb3dubG9hZCBsaW5rDQoJCQkJCQkkbGluayA9IEpvb21sYV9fX2Q0Yzc2MDk5XzRjMzJfNDA4YV84NzAxX2QwYTcyNDQ4NGRmZF9fX1Bvd2VyOjpfKCJpbmRleC5waHA/b3B0aW9uPWNvbV9bW1tjb21wb25lbnRdXV0mdGFzaz1kb3dubG9hZC53YXJyYW50eSZrZXk9IiAuIHVybGVuY29kZShzZWxmOjplbmNyeXB0KCRwcm9kdWN0LT5pZCkpIC4gIiZndWlkPSIgLiAkcHJvZHVjdC0+Zm9ybSAuICImIiAuIEpvb21sYV9fXzViYTM4NTEzXzVjNGZfNGIwZF85MzVlXzQ5ZTk4NmE2YmNlOF9fX1Bvd2VyOjpnZXRGb3JtVG9rZW4oKSAuICI9MSIpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gQXVzdHJhbGlhDQoJCQkJZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnQXVzdHJhbGlhL1N5ZG5leScpOw0KCQkJCS8vIG5vIHJldHVybiB3YXJyYW50eSBkZXRhaWxzDQoJCQkJc2VsZjo6JHdhcnJhbnR5RGV0YWlsc1skY2FjaGVLZXldID0gYXJyYXkoJ2FjdGl2ZScgPT4gJGFjdGl2ZSwgJ2V4cGlyZScgPT4gc2VsZjo6c2V0RGF5TW9udGhZZWFyKCRleHBpcmVfZGF0ZSksICdsaW5rJyA9PiAkbGluaywgJ3F1YWxpZnknID0+ICRoYXNfY2VydCk7DQoJCQl9DQoJCQkvLyBjaGVjayBpZiB0aGUgdmFsdWUgd2FzIGluZGVlZCBzZXQNCgkJCWlmIChpc3NldChzZWxmOjokd2FycmFudHlEZXRhaWxzWyRjYWNoZUtleV0pKQ0KCQkJew0KCQkJCXJldHVybiBzZWxmOjokd2FycmFudHlEZXRhaWxzWyRjYWNoZUtleV07DQoJCQl9DQoJCX0NCgkJLy8gZm9yIG90aGVyIGJyYW5kcyBhbmQgY29tYm8va2l0J3MNCgkJcmV0dXJuIGFycmF5KCdhY3RpdmUnID0+IDAsICdleHBpcmUnID0+IDAsICdsaW5rJyA9PiBudWxsLCAncXVhbGlmeScgPT4gZmFsc2UpOw0KCX0NCg0KCS8qKg0KCSAqIE1haW4gaW1hZ2UgbGluaw0KCSAqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRpbWFnZUxpbms7DQoNCgkvKioNCgkgKiBEdW1teSBJbWFnZSBsaW5rDQoJICoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGR1bW15SW1hZ2VMaW5rOw0KDQoJLyoqDQoJICogR2V0IHRoZSBwcm9kdWN0cyBpbWFnZSBsaW5rDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbWFnZUxpbmsoJiRwcm9kdWN0KQ0KCXsNCgkJaWYgKCRwcm9kdWN0LT5icmFuZCA9PSAxICYmICgkcGF0aCA9IHNlbGY6OmdldFZhcignaW1hZ2VzJywgc3RydG9sb3dlcigkcHJvZHVjdC0+Y29kZSksICdjb2RlJywgJ3BhdGgnKSkgIT09IGZhbHNlKQ0KCQl7DQoJCQlyZXR1cm4gVXJpOjpyb290KCkgLiAnaW1hZ2VzL3Byb2R1Y3RzLycgLiAkcGF0aDsNCgkJfQ0KCQkvLyByZXR1cm4gdGhlIGR1bW15IGltYWdlIFRPRE8gd2UgY2FuIGFkZCB0eXBlcyBpZiB3ZSBsaWtlDQoJCWlmICghU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JGR1bW15SW1hZ2VMaW5rKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCQl7DQoJCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZHVtbXkgaW1hZ2UgcGF0aC4NCgkJCXNlbGY6OiRkdW1teUltYWdlTGluayA9IFVyaTo6cm9vdCgpIC4gc2VsZjo6JHBhcmFtcy0+Z2V0KCdpbWFnZV9kdW1teV9wYXRoJywgJ2ltYWdlcy9sb2dvLnBuZycpOw0KCQkJLy8gY2hlY2sgaWYgaW1hZ2UgZXhpc3QNCgkJCWlmICghc2VsZjo6dXJsRXhpc3RzKHNlbGY6OiRkdW1teUltYWdlTGluaykpDQoJCQl7DQoJCQkJc2VsZjo6JGR1bW15SW1hZ2VMaW5rID0gJyMnOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBzZWxmOjokZHVtbXlJbWFnZUxpbms7DQoJfQ0KDQoJLyoqDQoJKiBHZXQgdGhlIHByb2R1Y3QgcmVnaXN0cmF0aW9uIGVtYWlsIHRlbXBsYXRlDQoJKg0KCSogQHJldHVybiAgYXJyYXkgICAgT24gc3VjY2VzcyB0aGUgZW1haWwgdGVtcGxhdGUNCgkqDQoJKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEVtYWlsVGVtcGxhdGUoKQ0KCXsNCgkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGFyYW1zKSkNCgkJew0KCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV8jIyNjb21wb25lbnQjIyMnKTsNCgkJfQ0KCQlyZXR1cm4gYXJyYXkoDQoJCQknc3ViamVjdCcgPT4gc2VsZjo6JHBhcmFtcy0+Z2V0KCdzdWJqZWN0JywgVGV4dDo6XygnW25hbWVdLCB5b3UgaGF2ZSBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCB5b3VyIHRvb2xzIHdpdGggTXlNYWtpdGEnKSksDQoJCQknaHRtbCcgPT4gc2VsZjo6JHBhcmFtcy0+Z2V0KCdodG1sYm9keScsICdbbmFtZV08YnIgLz5bbWFraXRhX3VybF0nKSwNCgkJCSd0ZXh0JyA9PiBzZWxmOjokcGFyYW1zLT5nZXQoJ3RleHRib2R5JywgJ1tuYW1lXVxuW21ha2l0YV91cmxdJykNCgkJCSk7DQoJfQ0KDQoJLyoqDQoJKiBHZXQgdGhlIHdhcnJhbnR5IHRlbXBsYXRlDQoJKg0KCSogQHJldHVybiAgc3RyaW5nICAgIE9uIHN1Y2Nlc3MgdGhlIHdhcnJhbnR5IHRlbXBsYXRlDQoJKg0KCSovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRXYXJyYW50eVRlbXBsYXRlKCkNCgl7DQoJCXJldHVybiBMT0NLQkFTRTY0KCgoKDx0YWJsZSB3aWR0aD0iODAwIj4NCjx0Ym9keT48dHIgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxNTJweDsiPjx0ZCB3aWR0aD0iMTUwIj48L3RkPjx0ZD48L3RkPjwvdHI+DQo8dHIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBsaW5lLWhlaWdodDogMzNweDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyI+DQo8dGQ+PC90ZD4NCjx0ZD4NCjxiPltmdWxsX25hbWVdPC9iPg0KPC90ZD4NCjwvdHI+DQo8dHIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBsaW5lLWhlaWdodDogMzNweDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyI+DQo8dGQ+PC90ZD4NCjx0ZD4NCjxiPltwaG9uZV08L2I+DQo8L3RkPg0KPC90cj4NCjx0ciBzdHlsZT0iZm9udC1zaXplOjE1cHg7IGxpbmUtaGVpZ2h0OiAzM3B4OyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ij4NCjx0ZD48L3RkPg0KPHRkPg0KPGI+W2VtYWlsXTwvYj4NCjwvdGQ+DQo8L3RyPg0KPC90Ym9keT48L3RhYmxlPg0KDQo8dGFibGUgd2lkdGg9IjgwMCI+DQo8dGJvZHk+PHRyIHN0eWxlPSJsaW5lLWhlaWdodDogMTNweDsiPjx0ZCB3aWR0aD0iMTUwIj48L3RkPjx0ZD48L3RkPjwvdHI+DQo8dHIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBsaW5lLWhlaWdodDogMzJweDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyI+DQo8dGQ+PC90ZD4NCjx0ZD4NCjxiPltkZWFsZXJfbmFtZV08L2I+DQo8L3RkPg0KPC90cj4NCjx0ciBzdHlsZT0iZm9udC1zaXplOjE1cHg7IGxpbmUtaGVpZ2h0OiAzMnB4OyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ij4NCjx0ZD48L3RkPg0KPHRkPg0KPGI+W2ludm9pY2VfbnVtYmVyXTwvYj4NCjwvdGQ+DQo8L3RyPg0KPHRyIHN0eWxlPSJmb250LXNpemU6MTVweDsgbGluZS1oZWlnaHQ6IDMycHg7IHZlcnRpY2FsLWFsaWduOmJvdHRvbTsiPg0KPHRkPjwvdGQ+DQo8dGQ+DQo8Yj5baW52b2ljZV9kYXRlXTwvYj4NCjwvdGQ+DQo8L3RyPg0KPC90Ym9keT48L3RhYmxlPg0KDQo8dGFibGUgd2lkdGg9IjcyMCI+DQo8dGJvZHk+PHRyIHN0eWxlPSJsaW5lLWhlaWdodDogMjhweDsiPjx0ZCB3aWR0aD0iMzUwIj48L3RkPjx0ZD48L3RkPjwvdHI+DQo8dHIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBsaW5lLWhlaWdodDozM3B4OyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ij4NCjx0ZD48L3RkPg0KPHRkPg0KPGI+W3Byb2R1Y3RfY29kZV08L2I+DQo8L3RkPg0KPC90cj4NCjx0ciBzdHlsZT0iZm9udC1zaXplOjE1cHg7IGxpbmUtaGVpZ2h0OiAzM3B4OyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ij4NCjx0ZD48L3RkPg0KPHRkPg0KPGI+W3NlcmlhbF08L2I+DQo8L3RkPg0KPC90cj4NCjx0ciBzdHlsZT0iZm9udC1zaXplOjE1cHg7IGxpbmUtaGVpZ2h0OiAzM3B4OyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ij4NCjx0ZD48L3RkPg0KPHRkPg0KPGI+W3Byb2R1Y3RfbmFtZV08L2I+DQo8L3RkPg0KPC90cj4NCjwvdGJvZHk+PC90YWJsZT4NCg0KPHRhYmxlIHdpZHRoPSI3MjAiPg0KPHRib2R5Pjx0ciBzdHlsZT0ibGluZS1oZWlnaHQ6IDIwcHg7Ij48dGQgd2lkdGg9IjM1MCI+PC90ZD48dGQ+PC90ZD48L3RyPg0KPHRyIHN0eWxlPSJmb250LXNpemU6MTVweDsgbGluZS1oZWlnaHQ6MzNweDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyI+DQo8dGQ+PC90ZD4NCjx0ZD4NCjxiPlt3YXJyYW50eV9udW1iZXJdPC9iPg0KPC90ZD4NCjwvdHI+DQo8dHIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBsaW5lLWhlaWdodDogMzNweDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyI+DQo8dGQ+PC90ZD4NCjx0ZD4NCjxiPltpbnZvaWNlX2RhdGVdPC9iPg0KPC90ZD4NCjwvdHI+DQo8dHIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyBsaW5lLWhlaWdodDogMzNweDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyI+DQo8dGQ+PC90ZD4NCjx0ZD4NCjxiPlt3YXJyYW50eV9leHBpcmVfZGF0ZV08L2I+DQo8L3RkPg0KPC90cj4NCjwvdGJvZHk+PC90YWJsZT4pKSkpOw0KCX0NCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPWdldFBsYWNlSG9sZGVyc1JlcG9ydF0NCltDVVNUT01DT0RFPWdldEFOWUZvcm1EZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9bW9kZWxBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPWxhYmVsTW9kZWxBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPWdldE1lbWJlck5hbWVdDQpbQ1VTVE9NQ09ERT1iYXNlU2l4dHlGb3VyVVJMXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCltDVVNUT01DT0RFPWdldExpbmtPcHRpb25zXQ0KW0NVU1RPTUNPREU9bWltZVR5cGVdDQpbQ1VTVE9NQ09ERT13cml0ZUZpbGVdDQpbQ1VTVE9NQ09ERT1nZXRCZXR3ZWVuXQ0KW0NVU1RPTUNPREU9Z1VJRF0NCltDVVNUT01DT0RFPWNyeXB0XQ0KW0NVU1RPTUNPREU9Z2V0Q3J5cHRdDQpbQ1VTVE9NQ09ERT1nZXRDcnlwdFBhc3NVc2VyXQ0KW0NVU1RPTUNPREU9Y29tcG9zZVZFTkRPUitwaHBzZWNsaWJdDQpbQ1VTVE9NQ09ERT1nZXRIZWxwZXJDbGFzc10NCltDVVNUT01DT0RFPWNhbkFjY2Vzc01lbWJlckRhdGFdDQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXQ0KW0NVU1RPTUNPREU9YXJyYXlQYXJ0aXRpb25dDQogW0NVU1RPTUNPREU9dXJsRXhpc3RzXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbQ29tcG9uZW50IGltYWdlXShodHRwczovL3d3dy52ZG0uaW8vaW1hZ2VzL01ha2l0YTUwMC5qcGcgIlRoZSBNYWtpdGEgQ29tcG9uZW50IikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'The MyMakita Products', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9pbWFnZXNgICgNCglgY29kZWAgVkFSQ0hBUig2NCkgTk9UIE5VTEwgREVGQVVMVCAnJywNCglgcGF0aGAgVkFSQ0hBUigyNTUpIE5PVCBOVUxMIERFRkFVTFQgJycsDQoJUFJJTUFSWSBLRVkgIChgY29kZWApDQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0Zjg7', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9pbWFnZXNgOw==', 'Products (mymakita)', '.git', '', '', 1, '', 'http://www.vdm.io', '', 'ypLnpEqOfQEPOTOqxYyDK6yFt8umORR1fhiC/6K0TfU=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 176, '', 1, 31), +(59, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', 1, '', '', '{}', '', '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.7', 'Copyright (C) 2015. All Rights Reserved', '2019-02-12 21:14:30', '', 'C3Zg8urLsFMNpxaom1+0jJkHK1dEotIRUb1ZNX3RWbk=', 'XulMeX5W2+ecezoEL1+gulTaaJQf6baZNTbdTSujzP0=', '', 'DrAWJCUprUjO68dd93yw+EUa+CvH0XW4XxiC2AYPZng=', '', '', 'A_202', 2, '', 'Orthopedic', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_orthopedic', '3x5PSUKI0txZMgQTO2lfjAspJV1B65jIBD6H0O3n9pOylGn6kZ9UCzMYnDsJXHzY', '', 'f1b1ab96-6231-44f5-a21c-4d00fc7d2cb6', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2021-12-19 22:28:19', 2, 'Orthopedic', 'coral_orthopedic', '', 4, '', '', 'W0NVU1RPTUNPREU9b3J0aG9wZWRpY0hlbHBlckJvdGhd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Orthopedic', 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlYA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlYCAoYGlkYCwgYGFsaWFzYCwgYGRlc2NyaXB0aW9uYCwgYG5hbWVgLCBgcHVibGlzaGVkYCwgYGNyZWF0ZWRgKSBWQUxVRVMNCigxLCAnYWN0aXZlLXJhbmdlLW9mLW1vdGlvbicsICcnLCAnQWN0aXZlIFJhbmdlIG9mIE1vdGlvbicsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooMiwgJ2Z1bmN0aW9uYWwtbW92ZW1lbnRzJywgJycsICdGdW5jdGlvbmFsIE1vdmVtZW50cycsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooMywgJ21hbnVhbC1tdXNjbGUtdGVzdCcsICcnLCAnTWFudWFsIE11c2NsZSBUZXN0JywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCig0LCAnbXVzY2xlLWxlbmd0aCcsICcnLCAnTXVzY2xlIExlbmd0aCcsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooNSwgJ211c2NsZS1zdHJlbmd0aC10ZXN0JywgJycsICdNdXNjbGUgU3RyZW5ndGggVGVzdCcsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooNiwgJ211c2NsZS10ZXN0JywgJycsICdNdXNjbGUgVGVzdCcsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooNywgJ25ldXJvbG9naWNhbC1leGFtJywgJycsICdOZXVyb2xvZ2ljYWwgRXhhbScsIDEsICcyMDE4LTEyLTE4IDIzOjIwOjQzJyksDQooOCwgJ3BhbHBhdGlvbicsICcnLCAnUGFscGF0aW9uJywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCig5LCAncGFzc2l2ZS1yYW5nZS1vZi1tb3Rpb24nLCAnJywgJ1Bhc3NpdmUgUmFuZ2Ugb2YgTW90aW9uJywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCigxMCwgJ3NwZWNpYWwtdGVzdCcsICcnLCAnU3BlY2lhbCBUZXN0JywgMSwgJzIwMTgtMTItMTggMjM6MjA6NDMnKSwNCigxMSwgJ3N0cmVuZ3RoLXRlc3QnLCAnJywgJ1N0cmVuZ3RoIFRlc3QnLCAxLCAnMjAxOC0xMi0xOCAyMzoyMDo0MycpOw==', '', 'Orthopedic (coral)', '.git', '', '', 1, 'https://www.vdm.io/updates/coral_orthopedic_server.xml', 'http://www.vdm.io', '', 'wkO7vaI4Mdw7BqUTMYlqxUqWoEo+M5Ch35qN7dZ9mi8=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"}}', 1, 13, '', 1, 32), +(60, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, 1, '', '', '', 1, '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.7', 'Copyright (C) 2015. All Rights Reserved', '2019-05-07 20:25:06', '', 'duF73iYN4QhKZ1/NE9GcVbG8VUbkP+aM060DGXwMqn4=', '3uO+1kKg9R603fAVO+dbA0Hkw/yZ9trV6dEcX2v+7Xo=', '', 'ecp2UWis3Sbd5VUvxquIULKhgJE6T1w5mNciWyI2ZUw=', '', '', 'A_213', 2, '', 'Invoicing', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_invoicing', 'k9EtnDjnEiCc0yQHlC9QpQ/m65IkMacyYQiYHmUAKcnKa0MBVqrah7fPljDcNPyVbcTFN27S6M1U97YLGNLqkw==', '', 'ccd30536-16a0-427f-98f9-327bb2f0ab4e', 'images/CORAL300.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '☆', '2021-03-08 03:18:14', 2, 'Invoicing', 'coral_invoicing', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEdldCBzZWxlY3Rpb24gIGJhc2VkIG9uIHR5cGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIG1haW4gdGFibGUgdG8gc2VsZWN0DQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZCAgICBUaGUgdHlwZSBvZiB2YWx1ZXMgdG8gcmV0dXJuDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGZpbHRlciAgICBUaGUga2luZCBvZiBmaWx0ZXIgKHRvIHJldHVybiBvbmx5IHZhbHVlcyByZXF1aXJlZCkNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkZGIgICAgIFRoZSBkYXRhYmFzZSBvYmplY3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0YWJsZSA9ICdmb3JtJywgJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicsICRmaWx0ZXIgPSAnbm9uZScsICRkYiA9IG51bGwpDQoJew0KCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCS8vIHByZXAgZm9yIHBsYWNlaG9sZGVycw0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCkNCgkJew0KCQkJLy8gZ2V0IHRoZSBwbGFjZWhvbGRlciBwcmVmaXgNCgkJCSRwcmVmaXggPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3BsYWNlaG9sZGVyX3ByZWZpeCcsICdbW1tjb21wb25lbnRdXV0nKTsNCgkJCSRmID0gJ1snIC4gJHByZWZpeCAuICdfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIG9ubHkgZ2V0IHdoYXQgd2UgbmVlZA0KCQlpZiAoJ3Byb2ZpbGUnID09PSAkZmlsdGVyKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGZpZWxkcy9jb2x1bW5zDQoJCQlpZiAoKCRmaWVsZHMgPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3Byb2ZpbGVfZmllbGRzJywgZmFsc2UpKSAhPT0gZmFsc2UgJiYgU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGZpZWxkcykpDQoJCQl7DQoJCQkJJGNvbHVtbnMgPSBhcnJheSgnaWQnKTsgLy8gbmVlZGVkIGZvciBwZXJtaXNzaW9uIGNoZWNrDQoJCQkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpDQoJCQkJew0KCQkJCQkkY29sdW1uc1tdID0gJGZpZWxkLT5maWVsZDsNCgkJCQl9DQoJCQkJLy8gYWRkIGRhdGVzIGZvciBkaXNwbGF5DQoJCQkJJGNvbHVtbnNbXSA9ICdjcmVhdGVkJzsNCgkJCQkkY29sdW1uc1tdID0gJ21vZGlmaWVkJzsNCgkJCX0NCgkJfQ0KCQkvLyBzZXQgdGhlIHZhbHVlcyB5b3Ugd2FudCB0byByZW1vdmUgYWZ0ZXIgbW9kZWxpbmcNCgkJZWxzZWlmICgncmVtb3ZlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gbm90aW5nIHRvIHJlbW92ZQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB0aGUgREIgb2JqZWN0DQoJCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRkYikpDQoJCQl7DQoJCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJCQkkZGIgPSBGYWN0b3J5OjpnZXREQk8oKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgZGF0YWJhc2UgY29sdW1ucyBvZiB0aGlzIHRhYmxlDQoJCQkkY29sdW1ucyA9ICRkYi0+Z2V0VGFibGVDb2x1bW5zKCIjX19bW1tjb21wb25lbnRdXV1fIiAuICR0YWJsZSwgZmFsc2UpOw0KCQkJLy8gYWx3YXlzIHJlbW92ZSB0aGVzZQ0KCQkJJHJlbW92ZSA9IGFycmF5KCdhc3NldF9pZCcsICdjaGVja2VkX291dCcsICdjaGVja2VkX291dF90aW1lJyk7DQoJCQkvLyBpZiBwbGFjZWhvbGRlciBhbmQgbm9uZSBmaWx0ZXIgdGhlbiByZW1vdmUgc29tZSBtb3JlDQoJCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCAmJiAoJ3JlcG9ydCcgPT09ICRmaWx0ZXIgfHwgJ2VtYWlsJyA9PT0gJGZpbHRlcikpDQoJCQl7DQoJCQkJJHJlbW92ZVtdID0gJ3BhcmFtcyc7DQoJCQkJJHJlbW92ZVtdID0gJ2FjY2Vzcyc7DQoJCQkJJHJlbW92ZVtdID0gJ2NyZWF0ZWRfYnknOw0KCQkJCSRyZW1vdmVbXSA9ICdpZCc7DQoJCQkJJHJlbW92ZVtdID0gJ29yZGVyaW5nJzsNCgkJCQkkcmVtb3ZlW10gPSAndmVyc2lvbic7DQoJCQkJJHJlbW92ZVtdID0gJ3B1Ymxpc2hlZCc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnbW9kaWZpZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdoaXRzJzsNCgkJCX0NCgkJCS8vIHJlbW92ZQ0KCQkJZm9yZWFjaCAoJHJlbW92ZSBhcyAka2V5KQ0KCQkJew0KCQkJCXVuc2V0KCRjb2x1bW5zWyRrZXldKTsNCgkJCX0NCgkJCS8vIHByZXAgdGhlIGNvbHVtbnMNCgkJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkY29sdW1ucyk7DQoJCX0NCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgY29sdW1ucw0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbHVtbnMpKQ0KCQl7DQoJCQkvLyBjb252ZXJ0IHRoZSBjb2x1bW5zIGZvciBxdWVyeSBzZWxlY3Rpb24NCgkJCSRzZWxlY3Rpb24gPSBhcnJheSgpOw0KCQkJLy8gbG9hZCB0aGUgY29sdW1ucyB0byBzZWxlY3Rpb24NCgkJCWZvcmVhY2ggKCRjb2x1bW5zIGFzICRjb2x1bW4pDQoJCQl7DQoJCQkJJHNlbGVjdGlvblsnYS4nIC4gJGNvbHVtbl0gPSAkZiAuICRjb2x1bW4gLiAkYjsNCgkJCQkvLyB3ZSBtdXN0IGFkZCB0aGUgbGFiZWxzDQoJCQkJaWYgKCdwcm9maWxlJyAhPT0gJGZpbHRlciAmJiAnZmllbGQnICE9PSAkZmlsdGVyKQ0KCQkJCXsNCgkJCQkJLy8gc2V0IHRoZSBsYWJlbCBmb3IgdGhlc2UgZmllbGRzDQoJCQkJCSRzZWxlY3Rpb25bJ3NldExhYmVsLT4nIC4gJGNvbHVtbl0gPSAkZiAuICdsYWJlbF8nIC4gJGNvbHVtbiAuICRiOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkc2VsZWN0aW9uOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgaW52b2ljZSBpdGVtcw0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGl0ZW0gICAgIFRoZSBpdGVtIG9iamVjdA0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEl0ZW1zKCYkaXRlbSkNCgl7DQoJCS8vIGNoZWNrIGlmIGludm9pY2UgZXhpc3QNCgkJaWYgKGlzc2V0KCRpdGVtLT5pZCkgJiYgJGl0ZW0tPmlkID4gMCkNCgkJew0KCQkJLy8gZ2V0IHRoZSBkYXRhYmFzZSBvYmplY3QNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCQkkcXVlcnktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCAncHJvZHVjdF9jb2RlJywgJ3RheGVkJywgJ21lbWJlcicsICdjb21wYW55JywgJ3ByaWNlJywgJ2Rlc2NyaXB0aW9uJykpKTsNCgkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2ludm9pY2VfaXRlbScpKTsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2Zvcm0nKSAuICcgPSAnIC4gKGludCkgJGl0ZW0tPmlkKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCS8vIHN0YXJ0IGJ1aWxkaW5nIHN1YmZvcm0NCgkJCQkkaXRlbS0+aXRlbXMgPSBhcnJheSgpOw0KCQkJCSRpdGVtLT5jb21wYW5pZXMgPSBhcnJheSgpOw0KCQkJCSRpdGVtcyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCQlmb3JlYWNoICgkaXRlbXMgYXMgJHIgPT4gJGxpbmUpDQoJCQkJew0KCQkJCQkvLyBsb2FkIGl0ZW1zDQoJCQkJCSRpdGVtLT5pdGVtc1snaXRlbXMnIC4gJHJdID0gYXJyYXkoKTsNCgkJCQkJJGl0ZW0tPml0ZW1zWydpdGVtcycgLiAkcl1bJ2hhc2gnXSA9ICRsaW5lLT5pZDsNCgkJCQkJJGl0ZW0tPml0ZW1zWydpdGVtcycgLiAkcl1bJ3Byb2R1Y3RfY29kZSddID0gJGxpbmUtPnByb2R1Y3RfY29kZTsNCgkJCQkJJGl0ZW0tPml0ZW1zWydpdGVtcycgLiAkcl1bJ2Rlc2NyaXB0aW9uJ10gPSAkbGluZS0+ZGVzY3JpcHRpb247DQoJCQkJCSRpdGVtLT5pdGVtc1snaXRlbXMnIC4gJHJdWydwcmljZSddID0gJGxpbmUtPnByaWNlOw0KCQkJCQkkaXRlbS0+aXRlbXNbJ2l0ZW1zJyAuICRyXVsndGF4ZWQnXSA9ICRsaW5lLT50YXhlZDsNCgkJCQkJLy8gJGl0ZW0tPml0ZW1zWydpdGVtcycgLiAkcl1bJ3F0eSddID0gJGxpbmUtPnF0eTsNCgkJCQkJLy8gbG9hZCBjb21wYW5pZXMNCgkJCQkJJGl0ZW0tPmNvbXBhbmllc1tdID0gJGxpbmUtPmNvbXBhbnk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogc2F2ZSBpbnZvaWNlIGl0ZW1zDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICRpdGVtICAgICBUaGUgaXRlbSBhcnJheQ0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhdmVJdGVtcygmJGl0ZW0pDQoJew0KCQkvLyBjaGVjayBpZiBpbnZvaWNlIGV4aXN0DQoJCWlmIChpc3NldCgkaXRlbVsnaWQnXSkgJiYgJGl0ZW1bJ2lkJ10gPiAwKQ0KCQl7DQoJCQkvLyBtb3JlIHNvb24NCgkJfQ0KCX0NCltDVVNUT01DT0RFPWdldEZvbGRlclBhdGhdDQpbQ1VTVE9NQ09ERT10aGVCdXRsZXJdDQpbQ1VTVE9NQ09ERT1nZXRQbGFjZUhvbGRlcnNSZXBvcnRdDQpbQ1VTVE9NQ09ERT1nZXRBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPW1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1sYWJlbE1vZGVsQU5ZRGV0YWlscytmb3JtLEZvcm1dDQpbQ1VTVE9NQ09ERT1yZW1vdmVBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPWdldE1lbWJlck5hbWVdDQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXQ0KW0NVU1RPTUNPREU9Z2V0Q29yZU5hbWVd', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ0KW0NVU1RPTUNPREU9dGVzdElmQ29tcGFueUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Invoicing', '', '', 'Invoicing (coral)', '.git', '', 1, 1, 'https://www.vdm.io/updates/coral_billing_server.xml', 'http://www.vdm.io', '', 'Hz9S2dRlC31zdUbI6Se0qMK8BTuJqlgV16VhmPzFvbg=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 25, '', 1, 33), +(61, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.2', 'Copyright (C) 2015. All Rights Reserved', '2019-06-24 12:49:07', '', 'n5BVLqYY61IDBZjyKKeBTi3PQR54i7v8rGoNwavhPgs=', '9ygtntEElSNNzfIKkn+gnd1EpsiUyhqV7jAfyvtyhn0=', '', 'vuP+5AtGk9ERYFsgT1Dxg663LrhU+d9FZZOCe7Jcqm4=', '', '', 'A_216', 2, '', 'Importing Tool', 'Joomla@vdm.io', '', '', 'a8n/ZinoyVCee7VxyI/QzyC867sY8+gdqp3MeWoZ9wc=', '', '3ffa1cc4-f8a0-4634-b4b3-1284c6af3b71', '', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2019-06-24 12:55:08', '', 'Importing Tool', 'importingtool', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Importing Tool', '', '', 'Importing Tool', '.git', '', '', 1, '', 'https://www.vdm.io/', '', '69/Iny0Vpc7HnQ9Z0NuCkAbvqk7MbjDQGM5cecflQBQ=', '', '', 1, 4, '', 1, 71), +(62, 1, '', '', '', '', '', '', '', 1, '', '', 1, 1, '', '', '', '', '', '', 1, '', 1, '', '', 1, '{}', 3, 1, 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.5', 'Copyright (C) 2015. All Rights Reserved', '2019-09-25 12:57:04', '', 'WJQGIiIAJINZg6MshYpOG+wYEjZxxPrMeeBW72hCQQA=', 'WAvyW/Ys6au3aN/lDopdZsfch1yxT2jghvhSQv0OGMU=', '', 'CsPjdpjUhnXzWNfsh1DGu81c46yHp1cvpcH471e/tng=', '', '', '', 1, '', 'A secure file repository.', 'joomla@vdm.io', '', 'https://vdm.bz/jcb-document-manager', 'jflVSFC/q6reGgpn/E2L+jgbmV79TOt8EQ4pknhJD4iT8FmAd10Tz1XmxBDVZ93QPKhkNyeorYC3NUgV16DNHg==', '', '2ca5b474-ca30-4577-913e-842a77e295ff', 'images/vdm/SR500.jpg', '', 'https://github.com/vdm-io/JCB-Packages/raw/master/JCB_documentManager.zip', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2021-03-08 03:13:35', 2, 'Secure Repository', 'SecureRepository', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9ZmlsZUhlbHBlckJvdGhd', 'W0NVU1RPTUNPREU9Y291bnRMb2NhbERvd25sb2FkXQ==', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXSgvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV8jIyNjb21wb25lbnQjIyMvYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMgQ29tcG9uZW50IE51bWJlcg0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCiMgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyDQoNCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEpDQiB2aXNpdCBbVkRNXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKSBUb2RheSEgVGhlIGZ1dHVyZSBpcyBoZXJlIQ==', '', '', 'Secure File Repository', '', '', 'Secure Repository', '.git', '', 1, 2, 'https://www.vdm.io/updates/securerepository_server.xml', 'https://www.vdm.io/', '', 'dYJ+HemHdp1NE8uXQ/TfzLW3yZdv69Xq8aBSEfHR+pQ=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 27, '', 1, 15), +(63, 1, '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, '', '', '', '{}', '', 1, 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.4', 'Copyright (C) 2019 Vast Development Method. All rights reserved.', '2019-08-01 00:28:27', '', 'v2k4J0qsLE0E8nhLDz9zaVcCJHiADgckA+lBmOVV4ZA=', 'BfPUJkUrVutxYIDWt8i46MwpOE+JBPGPCN8xkLK5SdY=', '', 'kYoJjyBPIKCuC/DHdF8tEliOkOli3MEqrvWyj5qUZhc=', '', '', '', 1, '', 'Curriculum Builder', 'dev@vdm.io', '', '', '26mWghoAiABgwOQjiMXXhqHAXyS6SsYxbNhl8ocxPjE=', '', '4c3b9815-8930-4f11-8ad7-ad5b552927c2', 'images/vdm/CUB500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, 'ℂ𝕃', '2020-11-22 03:45:54', 3, 'Curriculum Builder', 'curriculumbuilder', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'CS8qKg0KCSogVGhlIGdsb2JhbCBwYXJhbXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRwYXJhbXMgPSBmYWxzZTsNCg0KCS8qKg0KCSogIHNldCB0aGUgc2Vzc2lvbiBkZWZhdWx0cyBpZiBub3Qgc2V0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRTZXNzaW9uRGVmYXVsdHMoKQ0KCXsNCgkJLy8gbm90aW5nIGZvciBub3cNCgkJcmV0dXJuIHRydWU7DQoJfQ0KW0NVU1RPTUNPREU9dGhlQnV0bGVyXQ0KW0NVU1RPTUNPREU9Z1VJRF0NCltDVVNUT01DT0RFPWNyeXB0XQ0KW0NVU1RPTUNPREU9Z2V0Q3J5cHRdDQpbQ1VTVE9NQ09ERT1nZXRDcnlwdFBhc3NdDQpbQ1VTVE9NQ09ERT1nZXRFZGl0QnV0dG9uXQ0KW0NVU1RPTUNPREU9Z2V0RWRpdEJ1dHRvbkdVSURdDQpbQ1VTVE9NQ09ERT1zZXRTdWJmb3JtVGFibGVdDQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXQ0KW0NVU1RPTUNPREU9YmNtYXRoXQ0KW0NVU1RPTUNPREU9Y29tcG9zZVZFTkRPUitwaHBzZWNsaWJd', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KVGhpcyBpcyBhIFtKb29tbGEgMy54XShodHRwOi8vd3d3Lmpvb21sYS5vcmcvKSBjb21wb25lbnQuDQoNCiAhWyMjI0NvbXBvbmVudF9uYW1lIyMjIGltYWdlXSgvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV8jIyNjb21wb25lbnQjIyMvYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMgQ29tcG9uZW50IE51bWJlcg0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQoNCiMgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyDQoNCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEpDQiB2aXNpdCBbVkRNXShodHRwOi8vdmRtLmJ6L2NvbXBvbmVudC1idWlsZGVyKSBUb2RheSEgVGhlIGZ1dHVyZSBpcyBoZXJlIQ==', '', '', 'Curriculum Builder', '', '', 'Curriculum Builder', '.git', '', '', 1, '', 'https://www.vdm.io/', '', 'lYDhXW46jMK3cmBfyPcr95anvrilyVWw3rgaGrcxW08=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 39, '', 1, 70), +(64, 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, 1, '{}', 3, '', 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.1', 'Copyright (C) 2019. All Rights Reserved', '2019-06-24 19:13:57', 1, 'UdGyz2HyeSAWh4V8qTyePmiehQG9nsUBWfNYf0OZbx8=', 'B+mVpoNvMd5cBBoPVd0XCQ3GpdmTLzo5fWSED95/PAA=', '', 'hHNvxXcbEEU5JnV/KJWwk0x71HkcG3wVMyU92mmP7Ss=', '', 'LmZpZWxkLWNhbGVuZGFyIGlucHV0IHsNCglmb250OmNhcHRpb24gIWltcG9ydGFudDsNCn0=', '', 1, '', 'Whale is an education member manager that integrates with many other components in Joomla.', 'joomla@vdm.io', '', '', '3bz0m6mdJeP1QL1abyj5ZD2DgMbcbubdTYv5nGeH+leI9UIhDZuo9F5Fm64U2FGyaRBf93bT4GxN5IulwRtX7hgxAzms4n46F5cooeowSXw=', '', '4cd86a0a-b8f9-4f07-b904-9b96bdb5bf4b', 'images/vdm/WHALE500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, 'ℂ𝕃', '2021-03-08 03:19:29', 2, 'Whale', 'whale', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9bWVtYmVybWFuYWdlckhlbHBlckJvdGhdDQpbQ1VTVE9NQ09ERT1jYW5BY2Nlc3NNZW1iZXJd', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'The Education Member Manager', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGAgKA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTsNCg0KQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbl9tYXBgICgNCglgcmVsYXRpb25gIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTs=', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGA7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3JlbGF0aW9uX21hcGA7', 'Whale', '.git', '', 1, 3, 'https://www.vdm.io/updates/whale_server.xml', 'https://www.vdm.io/', '', 'LOFJmKrqH5HXUBZNbTRp+ZSsyjEDxokQ2BFhU65+M/Q=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 20, '', 1, 34), +(65, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.3', 'Copyright (C) 2019. All Rights Reserved', '2020-02-22 16:56:44', '', 'AILXAZHGoDcO84yVvQWM/oXimAYf7IlSW3NoEE6K1Tc=', 'A+hVHAQCVCgXZN1DHBRiEY/cyRqyhEBHfRMAglN9haM=', '', '9wTGn7cu1H2RW7fglZMBIdju1sCiUn1TpwxbYbsjErI=', '', '', 'A_189', 2, '', 'Contact Details', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_contactdetails', 'IpDszQXzrHdrZbDn3XBSP68F7/4AA8x1cozN2lg7IqFodiqcQ78JpVUITzBLMihLXKM8loLHj11ALZxsBLl5sg==', '', '12f14a26-d198-4b98-b662-686cedc379e6', 'images/vdm/WHALE500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, 'ℂ𝕃', '2020-07-26 00:38:28', 2, 'Contact', 'whale_contactdetails', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29udGFjdGRldGFpbHNIZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Contact Details', '', '', 'Contact Details (whale)', '.git', '', 1, 1, 'https://www.vdm.io/updates/coral_contactdetails_server.xml', 'http://www.vdm.io', '', 'wBtNQiZgcfgDr9dHyigBA5m4mX8huF+SSbTf9mtSatM=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 12, '', 1, 35), +(66, '', '', '', '', '', '', '', '', 1, '', '', 1, 1, '', '', '', 1, '', '', 1, '', '', 1, 1, '', '{}', '', 1, 2, 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '2.0.6', 'Copyright (C) 2020. All Rights Reserved', '2017-06-16 19:13:20', '', 'tLe8nXe/rm4UFzW9KPFSXJAF+tZRA2lR1QWsnms0zpc=', 'Z4dLjLE/k+oamCDLA3OIT6QFHHSZE8w6eaNmID2ma4g=', '', 'IxxErDaGXf2tioCBYsNN3L7Y/V/azZgA+YP9k1qlw2s=', '', '', 'A_243', 2, '', 'The sentinel server portal of the project.', 'info@vdm.io', '', '', 'X0i9nKs6X5SwD91kpEGmkWjpz+tQa4LmRTY4SeF/LDTLrzPzedd3UU56W5+HDy3l', '', '3dc577a9-81a8-4391-a82a-c47e51cb595d', 'images/vdm/Sentinel500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, 'Ω', '2020-05-24 22:57:50', '', 'Sentinel', 'sentinel', '', 4, '', '', 'W0NVU1RPTUNPREU9c2VudGluZWxIZWxwZXJCb3RoXQ==', 'CXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VmFyXygkdGFibGUsICR3aGVyZSA9IG51bGwsICR3aGVyZVN0cmluZyA9ICd1c2VyJywgJHdoYXQgPSAnaWQnKQ0KCXsNCgkJLy8gR2V0IGEgZGIgY29ubmVjdGlvbi4NCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCR3aGF0LCAkd2hlcmVTdHJpbmcpKSk7DQoJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dXycuJHRhYmxlKSk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJJHNlYXJjaCA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJCWZvcmVhY2ggKCRzZWFyY2ggYXMgJGl0ZW0pDQoJCQl7DQoJCQkJaWYgKGlzc2V0KCRpdGVtLT57JHdoZXJlU3RyaW5nfSkpDQoJCQkJew0KCQkJCQkvLyBiYXNpYyBkZWNyeXB0IGRhdGEgdmFsdWUuDQoJCQkJCSRpdGVtLT57JHdoZXJlU3RyaW5nfSA9IHNlbGY6OmRlY3J5cHQoJGl0ZW0tPnskd2hlcmVTdHJpbmd9KTsNCgkJCQl9DQoJCQkJLy8gc2VlIGlmIGl0IGlzIHRoaXMgb25lDQoJCQkJaWYgKGlzc2V0KCRpdGVtLT57JHdoZXJlU3RyaW5nfSkgJiYgaXNzZXQoJGl0ZW0tPnskd2hhdH0pICYmICRpdGVtLT57JHdoZXJlU3RyaW5nfSA9PT0gJHdoZXJlKQ0KCQkJCXsNCgkJCQkJcmV0dXJuICRpdGVtLT57JHdoYXR9Ow0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHA6Ly92ZG0uYnovY29tcG9uZW50LWJ1aWxkZXIpLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKSA=', '', '', 'Sentinel Server.', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9kYXRhYCAoDQoJYG1lbWJlcmAgSU5UKDExKSBOT1QgTlVMTCBERUZBVUxUIDAsDQoJYGd1aWRgIFZBUkNIQVIoMzYpIE5PVCBOVUxMIERFRkFVTFQgJycsDQoJYHN0YXRpb25gIFZBUkNIQVIoMzYpIE5PVCBOVUxMIERFRkFVTFQgJycsDQoJYHR5cGVgIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCBERUZBVUxUICcnLA0KCWBuYW1lYCBWQVJDSEFSKDI1NSkgTk9UIE5VTEwgREVGQVVMVCAnJywNCglgdGltZWAgdGV4dCBOT1QgTlVMTCwNCglgdmFsdWVgIHRleHQgTk9UIE5VTEwsDQoJS0VZIGBpZHhfZ3VpZGAgKGBndWlkYCksDQoJS0VZIGBpZHhfbmFtZWAgKGBuYW1lYCksDQoJS0VZIGBpZHhfc3RhdGlvbmAgKGBzdGF0aW9uYCksDQoJS0VZIGBpZHhfbWVtYmVyYCAoYG1lbWJlcmApLA0KCUtFWSBgaWR4X3R5cGVgIChgdHlwZWApDQopIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTs=', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9kYXRhYDs=', 'Sentinel', '.git', '', 1, 1, 'https://www.vdm.io/updates/demo_update_server.xml', 'https://www.vdm.io/', '', '7CXwuY5CJpupcDV211Gm4mRixTqVZ4QUhBmURvGvjGA=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 56, '', 1, 12), +(67, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'vdm.txt', '', '', 'Vast Development Method', '1.0.3', 'Copyright (C) 2019. All Rights Reserved', '2020-03-15 15:10:46', '', 'Ei1ioftwLwqpiUGX5/GiOeM7V+cmTj0TNA1jWTnKq60=', 'MFfw/alHiNeQaXzWCWenKPitzR/pBmFFnk4RXS43P8w=', '', 'OBcjRlhHM0pQeV44OmO+hHEpZk1gF1uiRTJqggpxhAg=', '', '', 'A_245', 2, '', 'The syllabus subscription manager', 'joomla@vdm.io', '', 'https://vdm.bz/jcb_syllabus_subscription', 'FoAPdDIBPxFQiCAv9VGUBoTzS7br/Rc21mR3mt6gtm39gdH0yCROk5g9elMAszus7Qtc0Hwk7HBKwLZLub/ylw==', '', '275549e5-e136-4ef7-b2ed-b3104f7844fe', 'images/vdm/WHALE500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, 'ℂ𝕃', '2020-05-25 19:34:55', 2, 'Syllabus Subscription', 'whale_syllabus_subscription', '', 4, '', '', 'W0NVU1RPTUNPREU9c3lsbGFidXNTdWJzY3JpcHRpb25IZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Syllabus subscription manager', '', '', 'Syllabus Subscription (whale)', '.git', '', 1, 1, 'https://www.vdm.io/updates/coral_contactdetails_server.xml', 'http://www.vdm.io', '', 'WvhI9MNG/3vvUYxbP+2uW95p+YSfgGqdHwUoGhaZp90=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 11, '', 1, 36), +(68, 1, '', '', 1, 1, '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, '', '{}', '', 1, 3, 3, 'Llewellyn van der Merwe', '', 'george-media.txt', '', '', 'Vast Development Method', '1.0.1', 'Copyright (C) 2020. All Rights Reserved', '2020-05-19 08:28:48', 1, 'c3bs902wPklTKLLOhd8mZpBsy9vve07ZUI+VFVjWEf4=', 'jiNQg1gpq38XPjjLiabqwJiZLNp+duN94peqXdc/Ia0=', '', 'CfL6QkMw5fRPkpzh+ozi3GknXWlFqROONLzCTXAjyjg=', '', 'LmZpZWxkLWNhbGVuZGFyIGlucHV0IHsNCglmb250OmNhcHRpb24gIWltcG9ydGFudDsNCn0=', 'A_252', 2, '', 'The MyMakita member manager that integrates with other components in Joomla.', 'joomla@vdm.io', '', '', 'mimu2TOQZEFLMMekPQ/peXSXRa+11onAIXm6+KAJd/sSRB+Sm3JjoDKggnteotqeRdWIBkSlHSAMxXAS3eC/+Q==', '', 'a0e5a4ff-690f-4536-b0d8-13fb58f9d5f9', 'images/vdm/Makita500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '⇝', '2021-03-08 03:18:26', 2, 'MyMakita', 'mymakita', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSogdGhlIGJ1dHRvbiBuYW1lcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGJ1dHRvbk5hbWVzID0gYXJyYXkoKTsNCg0KCS8qKg0KCSogdGhlIG9wZW5lcg0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG9wZW5lcjsNCg0KCS8qKg0KCSogdGhlIHJldHVybiBoZXJlIHBhdGgNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRyZXR1cm5faGVyZTsNCg0KCS8qKg0KCSAqIEdldCBzZWxlY3Rpb24gIGJhc2VkIG9uIHR5cGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIG1haW4gdGFibGUgdG8gc2VsZWN0DQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZCAgICBUaGUgdHlwZSBvZiB2YWx1ZXMgdG8gcmV0dXJuDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGZpbHRlciAgICBUaGUga2luZCBvZiBmaWx0ZXIgKHRvIHJldHVybiBvbmx5IHZhbHVlcyByZXF1aXJlZCkNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkZGIgICAgIFRoZSBkYXRhYmFzZSBvYmplY3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0YWJsZSA9ICdtZW1iZXInLCAkbWV0aG9kID0gJ3BsYWNlaG9sZGVyJywgJGZpbHRlciA9ICdub25lJywgJGRiID0gbnVsbCkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gcHJlcCBmb3IgcGxhY2Vob2xkZXJzDQoJCSRmID0gJyc7DQoJCSRiID0gJyc7DQoJCWlmICgncGxhY2Vob2xkZXInID09PSAkbWV0aG9kKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIHBsYWNlaG9sZGVyIHByZWZpeA0KCQkJJHByZWZpeCA9IHNlbGY6OiRwYXJhbXMtPmdldCgncGxhY2Vob2xkZXJfcHJlZml4JywgJ1tbW2NvbXBvbmVudF1dXScpOw0KCQkJJGYgPSAnWycgLiAkcHJlZml4IC4gJ18nOw0KCQkJJGIgPSAnXSc7DQoJCX0NCgkJLy8gZ2V0IGNoYXJ0cw0KCQlpZiAoJ2NoYXJ0JyAhPT0gJGZpbHRlciAmJiAnZmllbGQnICE9PSAkZmlsdGVyICYmIG1ldGhvZF9leGlzdHMoX19DTEFTU19fLCAnZ2V0QW55QXZhaWxhYmxlQ2hhcnRzJykgJiYgbWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICdnZXRBbGxDb21wb25lbnRzJykpDQoJCXsNCgkJCWlmICgoJGNvbXBvbmVudHMgPSBzZWxmOjpnZXRBbGxDb21wb25lbnRzKG51bGwsIGFycmF5KCdBc3Nlc3NtZW50JykpKSAhPT0gZmFsc2UgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbXBvbmVudHMpKQ0KCQkJew0KCQkJCS8vIENoYXJ0IFRhcmdldCBUeXBlcw0KCQkJCSR0YXJnZXRzID0gYXJyYXkoMiwzKTsNCgkJCQkvLyBsb2FkIHBlciBjb21wb25lbnQNCgkJCQlmb3JlYWNoICgkdGFyZ2V0cyBhcyAkdGFyZ2V0KQ0KCQkJCXsNCgkJCQkJZm9yZWFjaCAoJGNvbXBvbmVudHMgYXMgJGNvbXBvbmVudCkNCgkJCQkJew0KCQkJCQkJaWYgKCgkZGF0YSA9IHNlbGY6OmdldEFueUF2YWlsYWJsZUNoYXJ0cyhudWxsLCAkdGFyZ2V0LCAkY29tcG9uZW50LT5lbGVtZW50KSkgIT09IGZhbHNlICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRkYXRhKSkNCgkJCQkJCXsNCgkJCQkJCQkkY29tID0gc3RyX3JlcGxhY2UoJ2NvbV8nLCAnJywgJGNvbXBvbmVudC0+ZWxlbWVudCk7DQoJCQkJCQkJZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkY2hhcnREYXRhKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJGNoYXJ0c1ska2V5IC4gJ1xeLycgLiAkY29tcG9uZW50LT5lbGVtZW50IC4gJ1xeLycgLiAkdGFyZ2V0XSA9ICRjb20gLiAnXycgLiAka2V5Ow0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyBvbmx5IGdldCB3aGF0IHdlIG5lZWQNCgkJaWYgKCdlbWFpbCcgPT09ICRmaWx0ZXIgfHwgJ3JlcG9ydCcgPT09ICRmaWx0ZXIpDQoJCXsNCgkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgdGhlIERCIG9iamVjdA0KCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGIpKQ0KCQkJew0KCQkJCS8vIGdldCB0aGUgZGF0YWJhc2Ugb2JqZWN0DQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCQl9DQoJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIGNvbHVtbnMgb2YgdGhpcyB0YWJsZQ0KCQkJJGNvbHVtbnMgPSAkZGItPmdldFRhYmxlQ29sdW1ucygiI19fW1tbY29tcG9uZW50XV1dXyIgLiAkdGFibGUsIGZhbHNlKTsNCgkJCS8vIGFsd2F5cyByZW1vdmUgdGhlc2UNCgkJCSRyZW1vdmUgPSBhcnJheSgnYXNzZXRfaWQnLCAnY2hlY2tlZF9vdXQnLCAnY2hlY2tlZF9vdXRfdGltZScpOw0KCQkJLy8gcmVtb3ZlDQoJCQlmb3JlYWNoICgkcmVtb3ZlIGFzICRrZXkpDQoJCQl7DQoJCQkJdW5zZXQoJGNvbHVtbnNbJGtleV0pOw0KCQkJfQ0KCQkJLy8gcHJlcCB0aGUgY29sdW1ucw0KCQkJJGNvbHVtbnMgPSBhcnJheV9rZXlzKCRjb2x1bW5zKTsNCgkJfQ0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIGNvbHVtbnMNCgkJaWYgKGlzc2V0KCRjb2x1bW5zKSAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29sdW1ucykpDQoJCXsNCgkJCS8vIGNvbnZlcnQgdGhlIGNvbHVtbnMgZm9yIHF1ZXJ5IHNlbGVjdGlvbg0KCQkJJHNlbGVjdGlvbiA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkY29sdW1ucyBhcyAkY29sdW1uKQ0KCQkJew0KCQkJCSRzZWxlY3Rpb25bJ2EuJyAuICRjb2x1bW5dID0gJGYgLiAkY29sdW1uIC4gJGI7DQoJCQkJLy8gd2UgbXVzdCBhZGQgdGhlIHBhcmFtcw0KCQkJCWlmICgncHJvZmlsZScgIT09ICRmaWx0ZXIgJiYgJ2ZpZWxkJyAhPT0gJGZpbHRlcikNCgkJCQl7DQoJCQkJCS8vIHNldCB0aGUgbGFiZWwgZm9yIHRoZXNlIGZpZWxkcw0KCQkJCQkkc2VsZWN0aW9uWydzZXRMYWJlbC0+JyAuICRjb2x1bW5dID0gJGYgLiAnbGFiZWxfJyAuICRjb2x1bW4gLiAkYjsNCgkJCQl9DQoJCQl9DQoJCQkvLyBuZWVkZWQgdmFsdWVzDQoJCQlpZiAoJ21lbWJlcicgPT09ICR0YWJsZSkNCgkJCXsNCgkJCQkvLyBzZXQgbmFtZXMgYW5kIGVtYWlscw0KCQkJCSRzZWxlY3Rpb25bJ3NldE1lbWJlck5hbWU6aWR8dXNlcnxuYW1lfHN1cm5hbWUnXSA9ICRmIC4gJ25hbWUnIC4gJGI7DQoJCQkJJHNlbGVjdGlvblsnc2V0TWVtYmVyRW1haWw6aWR8dXNlcnxlbWFpbCddID0gJGYgLiAnZW1haWwnIC4gJGI7DQoJCQkJJHNlbGVjdGlvblsnc2V0TWVtYmVyTmFtZTpjcmVhdGVkX2J5fHVzZXInXSA9ICRmIC4gJ2NyZWF0ZWRfbmFtZScgLiAkYjsNCgkJCQkkc2VsZWN0aW9uWydzZXRNZW1iZXJFbWFpbDpjcmVhdGVkX2J5fHVzZXInXSA9ICRmIC4gJ2NyZWF0ZWRfZW1haWwnIC4gJGI7DQoJCQkJJHNlbGVjdGlvblsnc2V0TWVtYmVyTmFtZTptb2RpZmllZF9ieXx1c2VyJ10gPSAkZiAuICdtb2RpZmllZF9uYW1lJyAuICRiOw0KCQkJCSRzZWxlY3Rpb25bJ3NldE1lbWJlckVtYWlsOm1vZGlmaWVkX2J5fHVzZXInXSA9ICRmIC4gJ21vZGlmaWVkX2VtYWlsJyAuICRiOw0KCQkJCS8vIGdldCBuYW1lIGFuZCBlbWFpbA0KCQkJCSRzZWxlY3Rpb25bJ2dldE1lbWJlck5hbWU6bWFpbl9tZW1iZXInXSA9ICRmIC4gJ21haW5fbmFtZScgLiAkYjsNCgkJCQkkc2VsZWN0aW9uWydnZXRNZW1iZXJFbWFpbDptYWluX21lbWJlciddID0gJGYgLiAnbWFpbl9lbWFpbCcgLiAkYjsNCgkJCQkvLyBzZXQgZmFuY3kgZGF0ZXMNCgkJCQkkc2VsZWN0aW9uWydmYW5jeURhdGU6Y3JlYXRlZCddID0gJGYgLiAnY3JlYXRlZCcgLiAkYjsNCgkJCQkkc2VsZWN0aW9uWydmYW5jeURhdGU6bW9kaWZpZWQnXSA9ICRmIC4gJ21vZGlmaWVkJyAuICRiOw0KCQkJCS8vIHNldCBwcm9maWxlIGltYWdlDQoJCQkJJHNlbGVjdGlvblsnc2V0SW1hZ2VMaW5rOnByb2ZpbGVfaW1hZ2V8bmFtZSddID0gJGYgLiAncHJvZmlsZV9pbWFnZV91cmwnIC4gJGI7DQoJCQkJJHNlbGVjdGlvblsnc2V0SW1hZ2VIVE1MOnByb2ZpbGVfaW1hZ2VfdXJsfG5hbWUnXSA9ICRmIC4gJ3Byb2ZpbGVfaW1hZ2VfaHRtbCcgLiAkYjsNCgkJCQkvLyBzZXQgcHJvZmlsZQ0KCQkJCSRzZWxlY3Rpb25bJ3NldFByb2ZpbGVMaW5rOmlkfHRva2VuJ10gPSAgJGYgLiAncHJvZmlsZV9saW5rX3VybCcgLiAkYjsNCgkJCQkvLyBzZXQgdGhlIHJldHVybiB2YWx1ZQ0KCQkJCXNlbGY6OiRyZXR1cm5faGVyZSA9IHVybGVuY29kZShiYXNlNjRfZW5jb2RlKChzdHJpbmcpIFVyaTo6Z2V0SW5zdGFuY2UoKSkpOw0KCQkJCS8vIHNldCBlZGl0IGxpbmsNCgkJCQkkc2VsZWN0aW9uWydzZXRNZW1iZXJFZGl0VVJMOmlkfGNyZWF0ZWRfYnknXSA9ICAkZiAuICdlZGl0X3VybCcgLiAkYjsNCgkJCQkvLyBHZXQgdGhlIG1lZGl1bSBlbmNyeXB0aW9uLg0KCQkJCSRtZWRpdW1rZXkgPSBzZWxmOjpnZXRDcnlwdEtleSgnbWVkaXVtJyk7DQoJCQkJaWYgKCRtZWRpdW1rZXkpDQoJCQkJew0KCQkJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJCQlzZWxmOjokb3BlbmVyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJG1lZGl1bWtleSk7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gYWRkIHRoZSBjaGFydCBkaXYgYW5kIEpTIGNvZGUgKG9ubHkgaWYgZmlsdGVyIGlzIG5vdCBjaGFydCkNCgkJCWlmICgnY2hhcnQnICE9PSAkZmlsdGVyICYmICdmaWVsZCcgIT09ICRmaWx0ZXIgJiYgaXNzZXQoJGNoYXJ0cykgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNoYXJ0cykpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJGNoYXJ0cyBhcyAkY2hhcnQgPT4gJHZhbHVlKQ0KCQkJCXsNCgkJCQkJLy8gbWFrZSBzdXJlIHRoZSBjaGFydCBuYW1lIGlzIHNhdmUNCgkJCQkJJHNlbGVjdGlvblsnc2V0TXVsdGlDaGFydC0+JyAuICRjaGFydF0gPSAkZiAuICR2YWx1ZSAuICRiOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkc2VsZWN0aW9uOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIHNldCBpbWFnZSBIVE1MDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRJbWFnZUhUTUwoJG9iamVjdCkNCgl7DQoJCXJldHVybiAnPGltZyBzcmM9IicgLiAkb2JqZWN0LT5nZXQoJ3Byb2ZpbGVfaW1hZ2VfdXJsJywgJyMnKSAuICciIGNsYXNzPSJtZW1iZXItaW1hZ2UiIGFsdD0iJyAuICRvYmplY3QtPmdldCgnbmFtZScsIFRleHQ6Ol8oJ01lbWJlcicpKSAuICcgJyAuIFRleHQ6Ol8oJ0ltYWdlJykgLiAnIiAvPic7DQoJfQ0KDQoJLyoqDQoJKiBzZXQgaW1hZ2UgbGluaw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0SW1hZ2VMaW5rKCRpdGVtKQ0KCXsNCgkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRvcGVuZXIpICYmICgkaW1hZ2UgPSAkaXRlbS0+Z2V0KCdwcm9maWxlX2ltYWdlJywgZmFsc2UpKSAhPT0gZmFsc2UgJiYgIWlzX251bWVyaWMoJGltYWdlKSAmJiAkaW1hZ2UgPT09IGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkaW1hZ2UsIHRydWUpKSkNCgkJew0KCQkJLy8gbm93IHVubG9jaw0KCQkJJGl0ZW0tPnNldCgncHJvZmlsZV9pbWFnZScsIHJ0cmltKHNlbGY6OiRvcGVuZXItPmRlY3J5cHRTdHJpbmcoJGltYWdlKSwgIlwwIikpOw0KCQl9DQoJCS8vIGdldCBsaW5rDQoJCXJldHVybiBzZWxmOjpnZXRJbWFnZUxpbmsoJGl0ZW0sICdwcm9maWxlX2ltYWdlJywgJ25hbWUnLCBudWxsLCBmYWxzZSk7DQoJfQ0KDQoJLyoqDQoJKiBzZXQgbWVtYmVyIGVkaXQgdXJsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRNZW1iZXJFZGl0VVJMKCRpdGVtKQ0KCXsNCgkJaWYgKHNlbGY6OmNhbkFjY2Vzc01lbWJlcigkaXRlbS0+Z2V0KCdpZCcsIDApKSAmJiAoJHVybCA9IHNlbGY6OmdldEVkaXRVUkwoJGl0ZW0sICdtZW1iZXInLCAnbWVtYmVycycsICcmcmV0dXJuPScgLiBzZWxmOjokcmV0dXJuX2hlcmUpKSAhPT0gZmFsc2UpDQoJCXsNCgkJCXJldHVybiAkdXJsOw0KCQl9DQoJCXJldHVybiAnJzsNCgl9DQoNCgkvKioNCgkqIHNldCBwcm9maWxlIGxpbmsNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFByb2ZpbGVMaW5rKCRvYmplY3QpDQoJew0KCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCS8vIG9ubHkgbG9hZCBsaW5rIGlmIG9wZW4gdG8gcHVibGljIG9yIGhhcyBhY2Nlc3MNCgkJaWYgKDIgPT0gc2VsZjo6JHBhcmFtcy0+Z2V0KCdsb2dpbl9yZXF1aXJlZCcsIDEpIHx8IHNlbGY6OmNhbkFjY2Vzc01lbWJlcigkb2JqZWN0LT5nZXQoJ2lkJywgMCkpKQ0KCQl7DQoJCQlyZXR1cm4gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ2aWV3PXByb2ZpbGUmaWQ9Jy4gJG9iamVjdC0+Z2V0KCdpZCcpIC4gJzonIC4gJG9iamVjdC0+Z2V0KCd0b2tlbicpIC4gJyZyZXR1cm49JyAuIHNlbGY6OiRyZXR1cm5faGVyZSk7DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCg0KCS8qKg0KCSogc2V0IG1lbWJlciBuYW1lDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRNZW1iZXJOYW1lKCRvYmplY3QpDQoJew0KCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgY3JlYXRlZCBieSBvciBtb2RpZmllZCBieQ0KCQlpZiAoKCR1c2VyID0gJG9iamVjdC0+Z2V0KCdjcmVhdGVkX2J5JywgZmFsc2UpKSAhPT0gZmFsc2UgfHwgKCR1c2VyID0gJG9iamVjdC0+Z2V0KCdtb2RpZmllZF9ieScsIGZhbHNlKSkgIT09IGZhbHNlICkNCgkJew0KCQkJJG9iamVjdC0+c2V0KCd1c2VyJywgJHVzZXIpOw0KCQl9DQoJCXJldHVybiBzZWxmOjpnZXRNZW1iZXJOYW1lKCRvYmplY3QtPmdldCgnaWQnLCBudWxsKSwgJG9iamVjdC0+Z2V0KCd1c2VyJywgbnVsbCksICRvYmplY3QtPmdldCgnbmFtZScsIG51bGwpLCAkb2JqZWN0LT5nZXQoJ3N1cm5hbWUnLCBudWxsKSk7DQoJfQ0KDQoJLyoqDQoJKiBzZXQgbWVtYmVyIGVtYWlsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRNZW1iZXJFbWFpbCgkb2JqZWN0KQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIGNyZWF0ZWQgYnkgb3IgbW9kaWZpZWQgYnkNCgkJaWYgKCgkdXNlciA9ICRvYmplY3QtPmdldCgnY3JlYXRlZF9ieScsIGZhbHNlKSkgIT09IGZhbHNlIHx8ICgkdXNlciA9ICRvYmplY3QtPmdldCgnbW9kaWZpZWRfYnknLCBmYWxzZSkpICE9PSBmYWxzZSApDQoJCXsNCgkJCSRvYmplY3QtPnNldCgndXNlcicsICR1c2VyKTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6Z2V0TWVtYmVyRW1haWwoJG9iamVjdC0+Z2V0KCdpZCcsIG51bGwpLCAkb2JqZWN0LT5nZXQoJ3VzZXInLCBudWxsKSwgJG9iamVjdC0+Z2V0KCdlbWFpbCcsIG51bGwpKTsNCgl9DQoNCgkvKioNCgkqIHNldCB0aGUgc2Vzc2lvbiBkZWZhdWx0cyBpZiBub3Qgc2V0DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRTZXNzaW9uRGVmYXVsdHMoKQ0KCXsNCgkJLy8gbm90aW5nIGZvciBub3cNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLyoqDQoJKiBnZXQgYnV0dG9uIG5hbWUNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEJ1dHRvbk5hbWUoJHR5cGUsICRkZWZhdWx0KQ0KCXsNCgkJaWYgKCFpc3NldChzZWxmOjokYnV0dG9uTmFtZXNbJHR5cGVdKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCQl7DQoJCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgYnV0dG9uIG5hbWUNCgkJCXNlbGY6OiRidXR0b25OYW1lc1skdHlwZV0gPSBzZWxmOjokcGFyYW1zLT5nZXQoJ2J1dHRvbl8nLiAkdHlwZSAuICdfbmFtZScsICRkZWZhdWx0KTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGJ1dHRvbk5hbWVzWyR0eXBlXTsNCgl9DQoNCgkvKioNCgkqIHJlbW92ZSBhbGwgZ3JvdXBzIHRoYXQgYXJlIHBhcnQgb2YgdGFyZ2V0IGdyb3VwcyBpbiB0aGUgbWVtYmVyIHR5cGVzDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZW1vdmVNZW1iZXJHcm91cHMoJiRncm91cHMpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGdyb3VwcykpDQoJCXsNCgkJCS8vIGdldCBkYXRhYmFzZSBvYmplY3QNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERCTygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KGFycmF5KCdhLmlkJykpOw0KCQkJJHF1ZXJ5LT5mcm9tKCcjX19bW1tjb21wb25lbnRdXV1fdHlwZSBBUyBhJyk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCS8vIGdldCBhbGwgdHlwZXMNCgkJCSR0eXBlcyA9ICRkYi0+bG9hZENvbHVtbigpOw0KCQkJLy8gbm93IGdldCBhbGwgdGFyZ2V0IGdyb3Vwcw0KCQkJJGdyb3Vwc190YXJnZXQgPSBzZWxmOjpnZXRNZW1iZXJHcm91cHNCeVR5cGUoJHR5cGVzLCAnZ3JvdXBzX3RhcmdldCcpOw0KCQkJLy8gbm93IHVwZGF0ZSB0aGUgZ3JvdXBzDQoJCQkkZ3JvdXBzID0gYXJyYXlfZGlmZigkZ3JvdXBzLCAkZ3JvdXBzX3RhcmdldCk7DQoJCX0NCgl9DQoNCgkvKioNCgkqIGdldCB0aGUgcmVnaXN0cmF0aW9uIGZvcm0NCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEZvcm1zKCR0YXJnZXRzKQ0KCXsNCgkJLy8gZ2V0IHRoZSBhcHAgb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkvLyBnZXQgbGFuZ3VhZ2Ugb2JqZWN0DQoJCSRsYW5nID0gRmFjdG9yeTo6Z2V0TGFuZ3VhZ2UoKTsNCgkJLy8gc3RhcnQgZm9ybXMgYXJyYXkNCgkJJGZvcm1zPSBhcnJheSgpOw0KCQkvLyBsb2FkIHRoZSBzY3JpcHRzIGFsc28NCgkJJHNjcmlwdCA9IGFycmF5KCk7DQoJCS8vIHNldCB0aGUgZm9ybXMNCgkJZm9yZWFjaCAoJHRhcmdldHMgYXMgJGRldGFpbCkNCgkJew0KCQkJLy8gc29yZSBkYXRhIGluIHNlc3Npb24NCgkJCSRkYXRhID0gJGFwcC0+Z2V0VXNlclN0YXRlKCRkZXRhaWxbJ2NvbV8nXSAuICcuZWRpdC4nIC4gJGRldGFpbFsndGFibGUnXSAuICcuZGF0YScsIG51bGwpOw0KCQkJLy8gZ2V0IHRoZSBmb3JtDQoJCQkkZm9ybXNbJGRldGFpbFsnY29tJ11dID0gc2VsZjo6Z2V0TWVtYmVyRm9ybXMoMCwgJGRldGFpbFsnY29tXyddLCAkZGV0YWlsWyd0YWJsZSddLCAkZGF0YSwgdHJ1ZSwgJGRldGFpbFsnY29udHJvbCddKTsNCgkJCS8vIHdlIG11c3QgYWxzbyBnZXQgdGhlIHNjcmlwdHMNCgkJCS8vIHRyeSB0byBsb2FkIHRoZSB0cmFuc2xhdGlvbg0KCQkJJGxhbmctPmxvYWQoJGRldGFpbFsnY29tXyddLCBKUEFUSF9BRE1JTklTVFJBVE9SLCBudWxsLCBmYWxzZSwgdHJ1ZSk7DQoJCQkvLyBnZXQgdGhlIHNjcmlwdHMNCgkJCXNlbGY6OmdldEZpZWxkc1NjcmlwdCgkZGV0YWlsWydjb21fJ10sICRzY3JpcHQpOw0KCQl9DQoJCS8vIHRyeSBzb21lIHBsdWdpbiBsYW5ndWVzDQoJCSRsYW5nLT5sb2FkKCdwbGdfdXNlcl90ZXJtcycsIEpQQVRIX0FETUlOSVNUUkFUT1IsIG51bGwsIGZhbHNlLCB0cnVlKTsNCgkJLy8gbm93IGFkZCB0aGUgc2NyaXB0cyBpZiBmb3VuZA0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHNjcmlwdCkpDQoJCXsNCgkJCUZhY3Rvcnk6OmdldERvY3VtZW50KCktPmFkZFNjcmlwdERlY2xhcmF0aW9uKGltcGxvZGUoIlxuIiwgJHNjcmlwdCkpOw0KCQl9DQoJCS8vIHJldHVybiB0aGUgZm9ybXMNCgkJcmV0dXJuICRmb3JtczsNCgl9DQoNCgkvKioNCgkqIHVwZGF0ZSB0aGUgdHlwZSBtYXAsIGZvciBxdWljayBzZWFyY2gNCgkgKg0KCSAqIEBwYXJhbSAgIGludCAgICRtZW1iZXIgICAgIFRoZSBtZW1iZXIgSUQNCgkgKiBAcGFyYW0gICBzdHJpbmcvYXJyYXkgICAkdHlwZXMgICAgIFRoZSB0eXBlcw0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZVR5cGVzKCYkbWVtYmVyLCAkdHlwZXMgPSBudWxsKQ0KCXsNCgkJLy8gZ2V0IHRoZSBhcHAgb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkvLyBnZXQgZGF0YWJhc2Ugb2JqZWN0DQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkvLyBkZWxldGUgYWxsIHR5cGVzIHRoZSBhcmUgbGlua2VkIHRvIHRoaXMgbWVtYmVyDQoJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCSAgICAkZGItPnF1b3RlTmFtZSgnbWVtYmVyJykgLiAnID0gJyAuIChpbnQpICRtZW1iZXINCgkJKTsNCgkJJHF1ZXJ5LT5kZWxldGUoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcCcpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkY29uZGl0aW9ucyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCS8vIG5vdyBzZXQgdGhlIG5ldyB2YWx1ZXMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0eXBlcykpDQoJCXsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJLy8gSW5zZXJ0IGNvbHVtbnMuDQoJCQkkY29sdW1ucyA9IGFycmF5KCdtZW1iZXInLCAndHlwZScpOw0KCQkJLy8gYnVpbGQgaW5zZXJ0IHF1ZXJ5DQoJCQkkcXVlcnktPmluc2VydCgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3R5cGVfbWFwJykpOw0KCQkJJHF1ZXJ5LT5jb2x1bW5zKCRkYi0+cXVvdGVOYW1lKCRjb2x1bW5zKSk7DQoJCQkvLyBidWlsZCB0aGUgdmFsdWVzDQoJCQlmb3JlYWNoICgkdHlwZXMgYXMgJHR5cGUpDQoJCQl7DQoJCQkJICRxdWVyeS0+dmFsdWVzKChpbnQpICRtZW1iZXIgLiAnLCcgLiAoaW50KSAkdHlwZSk7DQoJCQl9DQoJCQkvLyBTZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0IGFuZCBleGVjdXRlIGl0Lg0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCX0NCgl9DQpbQ1VTVE9NQ09ERT12YWxpZGF0ZUR5bmFtaWNGb3JtXQ0KW0NVU1RPTUNPREU9c2F2ZUR5bmFtaWNWaWV3c10NCltDVVNUT01DT0RFPXNhdmVEeW5hbWljRm9ybV0NCltDVVNUT01DT0RFPWdldEFueVBsYWNlSG9sZGVycyttZW1iZXJdDQpbQ1VTVE9NQ09ERT1nZXRQbGFjZUhvbGRlcnNSZXBvcnRdDQpbQ1VTVE9NQ09ERT1nZXRNZW1iZXJzQnlUeXBlXQ0KW0NVU1RPTUNPREU9Z2V0UmVsYXRpb25zaGlwc0J5VHlwZXNdDQpbQ1VTVE9NQ09ERT1nZXRSZWxhdGlvbnNoaXBzQnlNZW1iZXJdDQpbQ1VTVE9NQ09ERT1nZXRBY2Nlc3NdDQpbQ1VTVE9NQ09ERT1uaWNlRmFuY3lEYXRlXQ0KW0NVU1RPTUNPREU9Z2V0QmV0d2Vlbl0NCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPWJhc2VTaXh0eUZvdXJVUkxdDQpbQ1VTVE9NQ09ERT1vcGVuVmFsaWRCYXNlU2l4dHlGb3VyXSANCltDVVNUT01DT0RFPWxvY2tlcl0NCltDVVNUT01DT0RFPXNldER5bmFtaWNEYXRhSUZdDQpbQ1VTVE9NQ09ERT1nZXRUZW1wbGF0ZV0NCltDVVNUT01DT0RFPWdldEZvbGRlclBhdGhdDQpbQ1VTVE9NQ09ERT1pbWFnZUhlbHBlcnNdDQpbQ1VTVE9NQ09ERT13cml0ZUZpbGVdDQpbQ1VTVE9NQ09ERT1nZXRMaW5rT3B0aW9uc10NCltDVVNUT01DT0RFPWdldEltYWdlTGlua10NCltDVVNUT01DT0RFPWdldEVkaXRCdXR0b25dDQpbQ1VTVE9NQ09ERT1nZXRDcmVhdGVCdXR0b25dDQpbQ1VTVE9NQ09ERT1jaGVja1VuaXF1ZV0NCltDVVNUT01DT0RFPWdldENvbXBhbnlEZXRhaWxzXQ0KW0NVU1RPTUNPREU9Z2V0SGVscGVyQ2xhc3NdDQpbQ1VTVE9NQ09ERT1nZXRSZXBvcnRdDQpbQ1VTVE9NQ09ERT1nZXRBTllUZW1wbGF0ZStBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllGb3JtRGV0YWlscytBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllDb21wYW55RGV0YWlscytBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllDaGFydENvZGUrQW55XQ0KW0NVU1RPTUNPREU9Z2V0QU5ZTXVsdGlDaGFydERhdGFUYWJsZStBbnldDQpbQ1VTVE9NQ09ERT1nZXRBTllBdmFpbGFibGVDaGFydHMrQW55XQ0KW0NVU1RPTUNPREU9Z2V0QU5ZRm9ybXMrTWVtYmVyXQ0KW0NVU1RPTUNPREU9Z2V0QU5ZRGV0YWlscyttZW1iZXIsTWVtYmVyXQ0KW0NVU1RPTUNPREU9bW9kZWxBTllEZXRhaWxzK21lbWJlcixNZW1iZXJdDQpbQ1VTVE9NQ09ERT1sYWJlbE1vZGVsQU5ZRGV0YWlscyttZW1iZXIsTWVtYmVyXQ0KW0NVU1RPTUNPREU9bXVsdGlDaGFydE1vZGVsQU5ZRGV0YWlscyttZW1iZXIsTWVtYmVyXQ0KW0NVU1RPTUNPREU9Z2V0TWVtYmVyTmFtZV0NCltDVVNUT01DT0RFPWdldEFsbENvbXBvbmVudHMrJ0luZm8nJiM0NDsnQXNzZXNzbWVudCddDQpbQ1VTVE9NQ09ERT1nZXRDb21wb25lbnROYW1lKydJbmZvJyYjNDQ7J0Fzc2Vzc21lbnQnXQ0KW0NVU1RPTUNPREU9Z2V0Q29tcG9uZW50c0F2YWlsbGFibGUraW5mbyxJbmZvLCYjOTE7JiM5MTsmIzkxO2NvbXBvbmVudCYjOTM7JiM5MzsmIzkzO10NCltDVVNUT01DT0RFPWdldENvbXBvbmVudHNBdmFpbGxhYmxlK2Fzc2Vzc21lbnQsQXNzZXNzbWVudCwmIzkxOyYjOTE7JiM5MTtjb21wb25lbnQmIzkzOyYjOTM7JiM5MztdDQpbQ1VTVE9NQ09ERT1sb2FkSW50ZWdyYXRlZFRhYnNdDQpbQ1VTVE9NQ09ERT1zZXRUYWJdDQpbQ1VTVE9NQ09ERT1zZXRTdWJmb3JtVGFibGVdDQpbQ1VTVE9NQ09ERT1zYXZlUmVsYXRpb25zaGlwc10NCltDVVNUT01DT0RFPWFycmF5UGFydGl0aW9uXQ0KW0NVU1RPTUNPREU9Z2V0RmlsZUNvbnRlbnRzXQ0KW0NVU1RPTUNPREU9YmNtYXRoXQ0KW0NVU1RPTUNPREU9Z1VJRF0NCltDVVNUT01DT0RFPWdldENvcmVOYW1lXQ0KW0NVU1RPTUNPREU9bWltZVR5cGVdDQpbQ1VTVE9NQ09ERT10cmlnZ2VyUGx1Z2luXQ0KW0NVU1RPTUNPREU9Y2FuQWNjZXNzTWVtYmVyXQ0KW0NVU1RPTUNPREU9cmVnaXN0ZXJVc2VyXQ==', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbQ29tcG9uZW50IGltYWdlXShodHRwczovL3d3dy52ZG0uaW8vaW1hZ2VzL01ha2l0YTUwMC5qcGcgIlRoZSBNYWtpdGEgQ29tcG9uZW50IikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'The MyMakita Member Manager', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGAgKA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTsNCg0KQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbl9tYXBgICgNCglgcmVsYXRpb25gIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTs=', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGA7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3JlbGF0aW9uX21hcGA7', 'MyMakita', '.git', '', '', 1, 'https://raw.githubusercontent.com/george-media/com_mymakita/master/update_server.xml', 'http://www.vdm.io', '', 'WZPKTSsZfiK0J5Pujq+Lqgf9cG0dzik44VD5UljLVls=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 65, '', 1, 37), +(69, '', '', '', '', '', '', '', '', 1, '', '', 1, 1, '', '', '', 1, '', '', 1, '', '', 1, 1, '', '{}', '', 1, 3, 3, 'Llewellyn van der Merwe', '', 'george-media.txt', '', '', 'Vast Development Method', '1.0.7', 'Copyright (C) 2020. All Rights Reserved', '2020-05-20 11:23:58', '', 'nPivTPzlBZ91Y5p+LzlRAMbU/A43NFZ/ArMkylCqFYw=', 'SQLuWYe+Izc7i9CnY4qFhvroPAqlQ1NmbR1CmQPTYGo=', '', '+qs1ypqe6t+RFF+Pe81Nhi/jGNA9fzw8s9iu1jZcxeE=', '', '', 'A_248', 2, '', 'MyMakita Members Contact Details', 'joomla@vdm.io', '', '', 'KK233XYTqvWCH8mZocCiQJ54ys8pB8WW9MgZM4tDIDqO9mGtwyiE+V8HYDhXj0GcO1zu/nG6x4Gt39Hh+20T3A==', '', 'd4af561a-6410-466f-bfab-8b069a732fbd', 'images/vdm/Makita500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '⇝', '2020-08-04 03:15:33', 2, 'Contact', 'mymakita_contactdetails', '', 4, '', '', 'CS8qKg0KCSAqIGxvYWQgY3JvbiB0YWJzDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkaXRlbSAgICAgICAgICAgICAgVGhlIGl0ZW0gdmFsdWVzDQoJICogQHBhcmFtICAgc3RyaW5nICAgICR2aWV3X25hbWUgIFRoZSBuYW1lIG9mIHRoZSB2aWV3DQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkQ3JvblRhYnMoJiRpdGVtLCAkdmlld19uYW1lKQ0KCXsNCgkJJHRtcCA9ICcnOw0KCQkvLyBvbmx5IGlmIGFsbCB2YWx1ZXMgbmVlZGVkIGFyZSBzZXQNCgkJaWYgKGlzc2V0KCRpdGVtLT5hY2Nlc3NfdG9rZW4pICYmIGlzc2V0KCRpdGVtLT5hcHBfa2V5KSAmJiBpc3NldCgkaXRlbS0+YXBwX3NlY3JldCkgJiYgaXNzZXQoJGl0ZW0tPnJlZnJlc2hfdG9rZW4pICYmDQoJCQlTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+YWNjZXNzX3Rva2VuKSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+YXBwX2tleSkgJiYNCgkJCVN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRpdGVtLT5hcHBfc2VjcmV0KSAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkaXRlbS0+cmVmcmVzaF90b2tlbikgJiYNCgkJCWlzc2V0KCRpdGVtLT5ndWlkKSAmJiBzZWxmOjp2YWxpZGF0ZUdVSUQoJGl0ZW0tPmd1aWQpKQ0KCQl7DQoJCQkvLyBzZXQgdGhlIHVwZGF0ZSBVUkwNCgkJCSR1cGRhdGVfdXJsID0gVXJpOjpyb290KCkgLiAnaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJmtleT0nIC4gJGl0ZW0tPmd1aWQgLiAnJnRhc2s9Y29uc3RhbnRjb250YWN0LnN5bmMnOw0KCQkJLy8gc2V0dXAgdGhlIGNyb24gdXJsDQoJCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkNCgkJCXsNCgkJCQkkcGF0aCA9ICcwIDAgKiAqICogY3VybCAtcyAiJyAuICR1cGRhdGVfdXJsIC4gJyIgPi9kZXYvbnVsbCAyPiYxJzsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkcGF0aCA9ICdZb3UgbXVzdCBmaXJzdCBpbnN0YWxsL3NldHVwIGN1cmwgb24geW91ciBzZXJ2ZXIuJzsNCgkJCX0NCgkJCS8vIGJ1aWxkIHRoZSB0YWINCgkJCSR0bXAgLj0gSHRtbDo6XygnYm9vdHN0cmFwLmFkZFRhYicsICR2aWV3X25hbWUgLiAnVGFiJywgc2VsZjo6cmFuZG9ta2V5KDEwKSwgVGV4dDo6XygnQ3JvbiBKb2InLCB0cnVlKSk7DQoJCQkkdG1wIC49IFBIUF9FT0wgLiAnPGRpdiBjbGFzcz0id2VsbCB3ZWxsLWxhcmdlIj48ZGl2IGNsYXNzPSJyb3ctZmx1aWQgZm9ybS1ob3Jpem9udGFsLWRlc2t0b3AiPic7DQoJCQkkdG1wIC49IFBIUF9FT0wgLiAnPGgyIGNsYXNzPSJtb2R1bGUtdGl0bGUgbmF2LWhlYWRlciI+JyAuIFRleHQ6Ol8oJ0Nyb24gSm9iIERldGFpbHMnKSAuICc8L2gyPic7DQoNCgkJCSR0bXAgLj0gUEhQX0VPTCAuICc8cD5Zb3UgY2FuIHJ1biBhIGNyb25qb2IgdGhhdCB3aWxsIHN5bmMgYWxsIHlvdXIgY29udGFjdHMgd2l0aCBjb25zdGFudCBjb250YWN0IG9uY2UgcGVyL2RheS48YnIgLz48YnIgLz4nOw0KCQkJJHRtcCAuPSBQSFBfRU9MIC4gJzxiPlVTRSBUSEUgRk9MTE9XSU5HOjwvYj4gPHNwYW4gaWQ9ImNyb25qb2Itc3luYyI+PGNvZGU+JyAuICRwYXRoIC4gJzwvY29kZT48L3NwYW4+JzsNCgkJCSR0bXAgLj0gUEhQX0VPTCAuICc8YnIgLz48YnIgLz48YSBjbGFzcz0iYnRuIGJ0bi1zdWNjZXNzIiBocmVmPSInIC4gJHVwZGF0ZV91cmwgLiAnIiB0YXJnZXQ9Il9ibGFuayI+UnVuIFVwZGF0ZSBOb3cgTWFudWFsbHk8L2E+JzsNCgkJCSR0bXAgLj0gUEhQX0VPTCAuICc8YnIgLz48YnIgLz5QbGVhc2Ugbm90ZSB0aGF0IGlmIHlvdXIgSm9vbWxhIHdlYnNpdGUgaGFzIGEgRmlyZXdhbGwgaW5zdGFsbGVkLCBpdCB3aWxsIG5vdCBhbGxvdyBjcm9uam9iIHZpYSBkaXJlY3QgVVJMIChtb3N0IG9mIHRoZSB0aW1lKSwgeW91IHdpbGwgdGhlbiBuZWVkIHRvIGFkYXB0IHRoZSBjb3Juam9iIHJlcXVlc3QgdG8gbG9vayBsaWtlIGEgYnJvd3Nlci4gRm9yIG1vcmUgaW5mbyBwbGVhc2UgcmVhZCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzE1OTc4MjMvMTQyOTY3Nyc7DQoNCgkJCSR0bXAgLj0gUEhQX0VPTCAuICc8L3A+PC9kaXY+PC9kaXY+JzsNCgkJCSR0bXAgLj0gSHRtbDo6XygnYm9vdHN0cmFwLmVuZFRhYicpOw0KCQl9DQoJCXJldHVybiAkdG1wOw0KCX0NCltDVVNUT01DT0RFPWNvbnRhY3RkZXRhaWxzSGVscGVyQm90aF0NCltDVVNUT01DT0RFPWdVSURd', 'CS8qKg0KCSAqIGdldCB0aGUgYXBwIHZhbHVlcw0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGd1aWQgICAgVGhlIEdVSUQgb2YgdGhlIGxvY2FsIEFQUA0KCSAqDQoJICogQHJldHVybiBvYmplY3QNCgkgKg0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QXBwKCRndWlkKQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHZhbGlkIEdVSUQNCgkJaWYgKHNlbGY6OnZhbGlkYXRlR1VJRCgkZ3VpZCkgJiYgKCRpZCA9IHNlbGY6OmdldFZhcignY29uc3RhbnRfY29udGFjdCcsICRndWlkLCAnZ3VpZCcsICdpZCcpKSAhPT0gZmFsc2UpDQoJCXsNCgkJCS8vIG5vdyBnZXQgdGhlIG1vZGVsDQoJCQkkbW9kZWwgPSBzZWxmOjpnZXRNb2RlbCgnY29uc3RhbnRfY29udGFjdCcsIEpQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SKTsNCgkJCS8vIG5vdyByZXR1cm4gdGhlIEFQUA0KCQkJcmV0dXJuICRtb2RlbC0+Z2V0SXRlbSgkaWQpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBzZXQgdGhlIGFwcCB2YWx1ZXMNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0eXBlICAgIFRoZSB0eXBlIG9mIHZhbHVlcw0KCSAqIEBwYXJhbSAgIG1peCAgICAgICR2YWx1ZSAgIFRoZSB2YWx1ZS9zDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGd1aWQgICAgVGhlIEdVSUQgb2YgdGhlIGxvY2FsIEFQUA0KCSAqDQoJICogQHJldHVybiBib29sDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldEFwcCgkdHlwZSwgJHZhbHVlLCAkZ3VpZCkNCgl7DQoJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSB2YWxpZCBHVUlEDQoJCWlmIChzZWxmOjp2YWxpZGF0ZUdVSUQoJGd1aWQpICYmICgkaWQgPSBzZWxmOjpnZXRWYXIoJ2NvbnN0YW50X2NvbnRhY3QnLCAkZ3VpZCwgJ2d1aWQnLCAnaWQnKSkgIT09IGZhbHNlKQ0KCQl7DQoJCQlpZiAoJ25leHQnID09PSAkdHlwZSkNCgkJCXsNCgkJCQlyZXR1cm4gc2VsZjo6c2V0QXBwTmV4dElEKCRpZCwgJHZhbHVlKTsNCgkJCX0NCgkJCWVsc2VpZiAoJ3Rva2VuJyA9PT0gJHR5cGUpDQoJCQl7DQoJCQkJcmV0dXJuIHNlbGY6OnNldEFwcFRva2VucygkaWQsICR2YWx1ZSk7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIHVwZGF0ZS9zZXQgdGhlIEFwcCBUb2tlbnMNCgkgKg0KCSAqIEBwYXJhbSAgIGludCAgICAgICAkaWQgICAgICAgICAgIFRoZSBJRCBvZiB0aGUgbG9jYWwgQVBQDQoJICogQHBhcmFtICAgYXJyYXkgICAkdG9rZW5zICAgIFRoZSBuZXcgdG9rZW5zDQoJICoNCgkgKiBAcmV0dXJuIGJvb2wNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0QXBwVG9rZW5zKCRpZCwgJiR0b2tlbnMpDQoJew0KCQkvLyBjaGVjayBpZiB0b2tlbnMgYXJlIHNldA0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHRva2VucykgJiYgIGlzc2V0KCR0b2tlbnNbJ2FjY2Vzc190b2tlbiddKSAmJiBpc3NldCgkdG9rZW5zWydyZWZyZXNoX3Rva2VuJ10pICYmDQoJCQlTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkdG9rZW5zWydhY2Nlc3NfdG9rZW4nXSkgJiYgU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHRva2Vuc1sncmVmcmVzaF90b2tlbiddKSkNCgkJew0KCQkJLy8gR2V0IHRoZSBiYXNpYyBlbmNyeXB0aW9uLg0KCQkJJGJhc2lja2V5ID0gc2VsZjo6Z2V0Q3J5cHRLZXkoJ2Jhc2ljJyk7DQoJCQkvLyBHZXQgdGhlIGVuY3J5cHRpb24gb2JqZWN0Lg0KCQkJJGJhc2ljID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGJhc2lja2V5KTsNCgkJCS8vIENyZWF0ZSBhbiBvYmplY3QgZm9yIHRoZSByZWNvcmQgd2UgYXJlIGdvaW5nIHRvIHVwZGF0ZS4NCgkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkvLyBNdXN0IGJlIGEgdmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUuDQoJCQkkb2JqZWN0LT5pZCA9IChpbnQpICRpZDsNCgkJCSRvYmplY3QtPmFjY2Vzc190b2tlbiA9ICRiYXNpYy0+ZW5jcnlwdFN0cmluZygkdG9rZW5zWydhY2Nlc3NfdG9rZW4nXSk7DQoJCQkkb2JqZWN0LT5yZWZyZXNoX3Rva2VuID0gJGJhc2ljLT5lbmNyeXB0U3RyaW5nKCR0b2tlbnNbJ3JlZnJlc2hfdG9rZW4nXSk7DQoJCQkvLyBVcGRhdGUgQVBQIFRPS0VOUyB1c2luZyBpZCBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCQlyZXR1cm4gRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX2NvbnN0YW50X2NvbnRhY3QnLCAkb2JqZWN0LCAnaWQnKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogdXBkYXRlL3NldCB0aGUgQXBwIE5leHQgSUQNCgkgKg0KCSAqIEBwYXJhbSAgIGludCAgICAgICAkaWQgICAgICAgICAgIFRoZSBJRCBvZiB0aGUgbG9jYWwgQVBQDQoJICogQHBhcmFtICAgaW50ICAgICAgICRuZXh0ICAgICAgIFRoZSBuZXh0IGlkIHRvIHN0YXJ0IHdpdGgNCgkgKg0KCSAqIEByZXR1cm4gYm9vbA0KCSAqDQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRBcHBOZXh0SUQoJGlkLCAmJG5leHQpDQoJew0KCQlpZiAoaXNfbnVtZXJpYygkbmV4dCkpDQoJCXsNCgkJCS8vIENyZWF0ZSBhbiBvYmplY3QgZm9yIHRoZSByZWNvcmQgd2UgYXJlIGdvaW5nIHRvIHVwZGF0ZS4NCgkJCSRvYmplY3QgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkvLyBNdXN0IGJlIGEgdmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUuDQoJCQkkb2JqZWN0LT5pZCA9IChpbnQpICRpZDsNCgkJCSRvYmplY3QtPm5leHRfaWQgPSAoaW50KSAkbmV4dDsNCgkJCS8vIFVwZGF0ZSBBUFAgbmV4dF9pZCB1c2luZyBpZCBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCQlyZXR1cm4gRmFjdG9yeTo6Z2V0RGJvKCktPnVwZGF0ZU9iamVjdCgnI19fW1tbY29tcG9uZW50XV1dX2NvbnN0YW50X2NvbnRhY3QnLCAkb2JqZWN0LCAnaWQnKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbQ29tcG9uZW50IGltYWdlXShodHRwczovL3d3dy52ZG0uaW8vaW1hZ2VzL01ha2l0YTUwMC5qcGcgIlRoZSBNYWtpdGEgQ29tcG9uZW50IikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'Contact Details', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9zeW5jYCAoDQoJYGFwcGAgSU5UKDExKSBOT1QgTlVMTCwNCglgY29udGFjdGAgSU5UKDExKSBOT1QgTlVMTCwNCglgbW9kaWZpZWRgIERBVEVUSU1FIE5PVCBOVUxMIERFRkFVTFQgJzAwMDAtMDAtMDAgMDA6MDA6MDAnLA0KCVBSSU1BUlkgS0VZIChgYXBwYCwgYGNvbnRhY3RgKQ0KKSBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0IERFRkFVTFQgQ09MTEFURT11dGY4bWI0X3VuaWNvZGVfY2k7', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9zeW5jYDs=', 'Contact Details (mymakita)', '.git', '', '', 1, 'https://raw.githubusercontent.com/george-media/com_mymakita_contactdetails/master/update_server.xml', 'http://www.vdm.io', '', 'sGvJftIoLEAS6/R7xK/gfKEKZfTBKf1msC+mYDUfRsQ=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 74, '', 1, 38), +(70, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'george-media.txt', '', '', 'Vast Development Method', '1.0.1', 'Copyright (C) 2020. All Rights Reserved', '2020-06-27 20:06:25', '', 'lQRaWnxCVAXWbM3PSzpOwkwWOUTqhc42ltcwwyFr10w=', 'TWodCPpX+2hZKGepw4+/qy3E/VS17mS1mEA7yhc3rMc=', '', 'TzbmxqgmTHzpTLhbxhJ6KNTeehkYRrVG8KC1t8/eDLY=', '', '', 'A_254', 2, '', 'MyMakita Competition Details', 'joomla@vdm.io', '', '', 'W37pqjT2aYIvtmMLuunwJCCfxS00AEhMQX/451TmjYp6Vn9e2IMTYIfd3BJ15P0JY0e2Af+M8/IUvxJFfsjwNg==', '', 'c592813d-418e-4c18-b2a2-537e0a7b6d13', 'images/vdm/Makita500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '⇝', '2020-07-08 03:16:16', 2, 'Competition', 'mymakita_competition', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSogY2hlY2sgaWYgdGhpcyBwcm9kdWN0IHF1YWxpZnlpbmcgaW4gYSBjb21wZXRpdGlvbiBhbmQgc2V0IGl0IGlmIGl0IGRvZXMNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFF1YWxpZnlpbmcoJiRwcm9kdWN0LCAkYnVsayA9IGZhbHNlLCAkY29tcGV0aXRpb25faWQgPSAwKQ0KCXsNCgkJaWYgKCgkY29tcGV0aXRpb25zID0gc2VsZjo6Z2V0QWN0aXZlQ29tcGV0aXRpb25zKCkpICE9PSBmYWxzZSAmJiBzZWxmOjp2YWxpZGF0ZUVudHJ5KCRwcm9kdWN0LCAkY29tcGV0aXRpb25zLCAkYnVsaykpDQoJCXsNCgkJCS8vIHN0YXJ0IGVudHJ5DQoJCQkkZW50cnkgPSBuZXcgXHN0ZENsYXNzKCk7DQoJCQkkZW50cnktPmd1aWQgPSAkcHJvZHVjdC0+Z3VpZDsNCgkJCSRlbnRyeS0+bWVtYmVyID0gJHByb2R1Y3QtPm1lbWJlcjsNCgkJCSRlbnRyeS0+Y3JlYXRlZF9ieSA9IEZhY3Rvcnk6OmdldFVzZXIoKS0+Z2V0KCdpZCcpOw0KCQkJJGVudHJ5LT5jcmVhdGVkID0gJHByb2R1Y3QtPmNyZWF0ZWQ7DQoJCQkkZW50cnktPnB1Ymxpc2hlZCA9IDE7DQoJCQkkZW50cnktPnZlcnNpb24gPSAxOw0KCQkJLy8gYnVpbGQgd2l0aCBjb21wZXRpdGlvbiBJRCBkZWFscyB3aXRoIG9uZSBjb21wZXRpdGlvbiBhdCBhIHRpbWUNCgkJCWlmICgkYnVsayAmJiAkY29tcGV0aXRpb25faWQgPiAwKQ0KCQkJew0KCQkJCXNlbGY6OnN0b3JlQ29tcGV0aXRpb25FbnRyeSgkZW50cnksICRjb21wZXRpdGlvbl9pZCwgJGJ1bGspOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIHN0b3JlIHRoZSBlbnRyaWVzIHRvIGFsbCBjb21wZXRpdGlvbnMNCgkJCQlmb3JlYWNoICgkY29tcGV0aXRpb25zIGFzICRjb21wZXRpdGlvbikNCgkJCQl7DQoJCQkJCXNlbGY6OnN0b3JlQ29tcGV0aXRpb25FbnRyeSgkZW50cnksICRjb21wZXRpdGlvbi0+aWQpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSogY2hlY2sgaWYgdGhpcyBwcm9kdWN0IHF1YWxpZnlpbmcgaW4gYSBjb21wZXRpdGlvbiBhbmQgc2V0IGl0IGlmIGl0IGRvZXMNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHN0b3JlQ29tcGV0aXRpb25FbnRyeSgmJGVudHJ5LCAmJGNvbXBldGl0aW9uX2lkLCAkYnVsayA9IGZhbHNlKQ0KCXsNCgkJLy8gdXBkYXRlIGVudHJ5DQoJCSRlbnRyeS0+Y29tcGV0aXRpb24gPSAkY29tcGV0aXRpb25faWQ7DQoJCS8vIGluc2VydCBlbnRyeQ0KCQlGYWN0b3J5OjpnZXREYm8oKS0+aW5zZXJ0T2JqZWN0KA0KCQkJJyNfX1tbW2NvbXBvbmVudF1dXV9lbnRyeScsICRlbnRyeQ0KCQkpOw0KCQkvLyBkbyBub3Qgc2V0IHNlc3Npb24gaWYgd2UgaGF2ZSBidWxrIHVwZGF0ZSBydW5uaW5nDQoJCWlmICghJGJ1bGspDQoJCXsNCgkJCS8vIHNldCB0cnVlIHRvIHNob3cgbm90aWNlIGluIHRoaXMgc2Vzc2lvbg0KCQkJJGtleSA9ICRlbnRyeS0+Y29tcGV0aXRpb24gLiAnX3ZkbV9tYWtpdGFfJyAuICRlbnRyeS0+bWVtYmVyOw0KCQkJc2VsZjo6c2V0KCRrZXksIDEpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogVG8gVmFsaWRhdGUgdGhlIEVudHJ5DQoJICovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB2YWxpZGF0ZUVudHJ5KCYkcHJvZHVjdCwgJiRjb21wZXRpdGlvbnMsICRidWxrKQ0KCXsNCgkJLy8gYnVsayBoYXMgYWxyZWFkeSBzZXQgdGhlIHByb2R1Y3QgZGV0YWlscyBhbmQgdmFsaWRhdGVkIHRoYXQgdGhleSBhcmUgdmFsaWQNCgkJaWYgKCRidWxrIHx8ICgoJHBfZGV0YWlscyA9IHNlbGY6OmdldFByb2R1Y3REZXRhaWxzKCRwcm9kdWN0LT5wcm9kdWN0KSkgIT09IGZhbHNlICYmDQoJCQkkcF9kZXRhaWxzLT5leHRlbmRlZCA9PSAxICYmICRwX2RldGFpbHMtPnR5cGUgPT0gMSkpDQoJCXsNCgkJCS8vIGNoZWNrIGlmIHRoZSBwcm9kdWN0IGludm9pY2UgZGF0ZSBmYWxscyB3aXRoaW4gdGhlIGNvbXBldGl0aW9ucyBkYXRlcw0KCQkJaWYgKCRidWxrIHx8IHNlbGY6OnZhbGlkYXRlSW52b2ljZURhdGUoJHByb2R1Y3QsICRjb21wZXRpdGlvbnMpKQ0KCQkJew0KCQkJCS8vIGxvYWQgZGV0YWlscyB0byBwcm9kdWN0DQoJCQkJaWYgKCEkYnVsaykNCgkJCQl7DQoJCQkJCSRwcm9kdWN0LT50eXBlID0gJHBfZGV0YWlscy0+dHlwZTsNCgkJCQkJJHByb2R1Y3QtPmV4dGVuZGVkID0gJHBfZGV0YWlscy0+ZXh0ZW5kZWQ7DQoJCQkJCSRwcm9kdWN0LT53YXJyYW50eSA9ICRwX2RldGFpbHMtPndhcnJhbnR5Ow0KCQkJCX0NCgkJCQkkd2FycmFudHkgPSBzZWxmOjpnZXRXYXJyYW50eURldGFpbHMoJHByb2R1Y3QpOw0KCQkJCS8vIG9ubHkgcXVhbGlmeSBpZiBhY3RpdmUgZXh0ZW5kZWQgd2FycmFudHkgYW5kIGhhcyBuZXZlciBiZWVuIGVudGVyZWQgd2l0aCAoKHRoaXMgcHJvZHVjdCkpIGluIGFueSBwcmV2aW91cyBjb21wZXRpdGlvbnMuDQoJCQkJaWYgKCR3YXJyYW50eVsnYWN0aXZlJ10gPT0gMSAmJiAkd2FycmFudHlbJ3F1YWxpZnknXSAmJiAoJGJ1bGsgfHwgKCRleGlzdCA9IHNlbGY6OmdldFZhcignZW50cnknLCAkcHJvZHVjdC0+Z3VpZCwgJ2d1aWQnLCAnaWQnKSkgPT09IGZhbHNlKSkNCgkJCQl7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogVG8gVmFsaWRhdGUgdGhlIEludm9pY2UgRGF0ZQ0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gdmFsaWRhdGVJbnZvaWNlRGF0ZSgmJHByb2R1Y3QsICYkY29tcGV0aXRpb25zKQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBwcm9kdWN0IGludm9pY2UgcXVhbGlmeQ0KCQlmb3JlYWNoICgkY29tcGV0aXRpb25zIGFzICRuciA9PiAkY29tcGV0aXRpb24pDQoJCXsNCgkJCS8vIGNoZWNrIGlmIGludm9pY2UgZGF0ZSBpcyBvbGRlciB0aGVuIHN0YXJ0IGRhdGUgb2YgY29tcGV0aXRpb24NCgkJCWlmICgoaW50KSAkcHJvZHVjdC0+aW52b2ljZV9kYXRlIDwgKGludCkgJGNvbXBldGl0aW9uLT5zdGFydCkNCgkJCXsNCgkJCQkvLyByZW1vdmUgY29tcGV0aXRpb25zIHRvIHdoaWNoIHRoZSBwcm9kdWN0IGRvZXMgbm90IHF1YWxpZnkNCgkJCQl1bnNldCgkY29tcGV0aXRpb25zWyRucl0pOw0KCQkJfQ0KCQl9DQoJCS8vIG5vdyBjaGVjayBpZiB3ZSBoYXZlIGFueSBjb21wZXRpdGlvbnMgbGVmdA0KCQlyZXR1cm4gU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGNvbXBldGl0aW9ucyk7DQoJfQ0KDQoJLyoqDQoJICogQWN0aXZlIENvbXBldGl0aW9ucyANCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljICRhY3RpdmVDb21wZXRpdGlvbnMgPSBhcnJheSgpOw0KDQoJLyoqDQoJICogR2V0IEFjdGl2ZSBDb21wZXRpdGlvbnMgDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRBY3RpdmVDb21wZXRpdGlvbnMoJG1lbWJlciA9IDAsICRjb21wID0gMCkNCgl7DQoJCSRrZXkgPSAkbWVtYmVyIC4gJ18nIC4gJGNvbXA7DQoJCS8vIGNoZWNrIGlmIHdlIGFscmVhZHkgc2V0IHRoaXMNCgkJaWYgKCFTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokYWN0aXZlQ29tcGV0aXRpb25zWyRrZXldKSkNCgkJew0KCQkJLy8gbWFrZSBzdXJlIHdlIGFyZSBpbiBBdXN0cmFsaWENCgkJCWRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0F1c3RyYWxpYS9TeWRuZXknKTsNCgkJCS8vIGdldCBkYXRhYmFzZSBvYmplY3QNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJLy8gY2hlY2sgaWYgbWVtYmVyIHdhcyBhZGRlZA0KCQkJaWYgKCRtZW1iZXIgPiAwKQ0KCQkJew0KCQkJCS8vIGdldCBhbGwgaXRlbSBpZHMgb2YgZW50cmllcyB0aGF0IGJlbG9uZyB0byB0aGlzIG1lbWJlcg0KCQkJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSkNCgkJCQkJLT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2EuZ3VpZCcsICdjLmlkJykpKQ0KCQkJCQktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9lbnRyeScsICdhJykpOw0KCQkJCSRxdWVyeS0+am9pbignTEVGVCcsICgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2NvbXBldGl0aW9uJywgJ2MnKSkgLiAnIE9OICgnIC4gJGRiLT5xdW90ZU5hbWUoJ2EuY29tcGV0aXRpb24nKSAuICcgPSAnIC4gJGRiLT5xdW90ZU5hbWUoJ2MuaWQnKSAuICcpJyk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYy5zdGFydCcpIC4gJyA8PSAnIC4gKGludCkgdGltZSgpKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdjLmVuZCcpIC4gJyA+PSAnIC4gKGludCkgdGltZSgpKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLm1lbWJlcicpIC4gJyA9ICcgLiAoaW50KSAkbWVtYmVyKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdjLnB1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLnB1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJCX0NCgkJCWVsc2VpZiAoJGNvbXAgPiAwKQ0KCQkJew0KCQkJCS8vIGdldCBhbGwgaXRlbSBkZXRhaWxzIG9mIHRoaXMgY29tcGV0aXRpb24NCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpDQoJCQkJCS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKA0KCQkJCQkJYXJyYXkoJ25hbWUnLCAnc3RhcnQnLCAnZW5kJywgJ2NvbXBldGl0aW9uc19ub3RpY2VfdGVtcGxhdGUnLCAnY29tcGV0aXRpb25zX3RlbXBsYXRlJyksDQoJCQkJCQlhcnJheSgnY29tcGV0aXRpb25fbmFtZScsICdjb21wZXRpdGlvbl9zdGFydF9kYXRlJywgJ2NvbXBldGl0aW9uX2VuZF9kYXRlJywgJ25vdGljZV90ZW1wbGF0ZScsICdjb21wZXRpdGlvbnNfdGVtcGxhdGUnKQ0KCQkJCQkpKQ0KCQkJCQktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9jb21wZXRpdGlvbicpKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdpZCcpIC4gJyA9ICcgLiAoaW50KSAkY29tcCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gZ2V0IGFsbCBjb21wZXRpdGlvbnMgdGhhdCBhcmUgYWN0aXZlDQoJCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKQ0KCQkJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgnaWQnLCAnbmFtZScsICdzdGFydCcsICdlbmQnLCAnY29tcGV0aXRpb25zX25vdGljZV90ZW1wbGF0ZScpKSkNCgkJCQkJLT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fY29tcGV0aXRpb24nKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc3RhcnQnKSAuICcgPD0gJyAuIChpbnQpIHRpbWUoKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnZW5kJykgLiAnID49ICcgLiAoaW50KSB0aW1lKCkpOw0KCQkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ3B1Ymxpc2hlZCcpIC4gJyA9IDEnKTsNCgkJCX0NCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KS0+ZXhlY3V0ZSgpOw0KCQkJaWYgKCRkYi0+Z2V0TnVtUm93cygpKQ0KCQkJew0KCQkJCS8vIHN0b3JlIGZvciBsYXRlcg0KCQkJCWlmICgkY29tcCA+IDApDQoJCQkJew0KCQkJCQlzZWxmOjokYWN0aXZlQ29tcGV0aXRpb25zWyRrZXldID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXNlbGY6OiRhY3RpdmVDb21wZXRpdGlvbnNbJGtleV0gPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJCQkJfQ0KCQkJCS8vIGp1c3QgcmV0dXJuIGZvdW5kIGNvbXBldGl0aW9ucyANCgkJCQlyZXR1cm4gc2VsZjo6JGFjdGl2ZUNvbXBldGl0aW9uc1ska2V5XTsNCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQlyZXR1cm4gc2VsZjo6JGFjdGl2ZUNvbXBldGl0aW9uc1ska2V5XTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgUHJvZHVjdCBEZXRhaWwNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEFjdGl2ZUNvbXBldGl0aW9uc01lc3NhZ2VzKCYkbWVtYmVyKQ0KCXsNCgkJaWYgKCRtZW1iZXIgJiYgKCRjb21wZXRpdGlvbnMgPSBzZWxmOjpnZXRBY3RpdmVDb21wZXRpdGlvbnMoJG1lbWJlci0+aWQpKSAhPT0gZmFsc2UpDQoJCXsNCgkJCS8vIGdldCBjb21wZXRpdGlvbiBkZXRhaWxzDQoJCQkkX2NvbXBldGl0aW9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkY29tcGV0aXRpb25zIGFzICRjb21wZXRpdGlvbikNCgkJCXsNCgkJCQlpZiAoIWlzc2V0KCRfY29tcGV0aXRpb25zWyRjb21wZXRpdGlvbi0+aWRdKSkNCgkJCQl7DQoJCQkJCS8vIGdldCBjb21wZXRpdGlvbiBkZXRhaWxzDQoJCQkJCSRfY29tcGV0aXRpb25zWyRjb21wZXRpdGlvbi0+aWRdID0gc2VsZjo6Z2V0QWN0aXZlQ29tcGV0aXRpb25zKDAsICRjb21wZXRpdGlvbi0+aWQpOw0KCQkJCQkvLyBhZGQgY291bnRlcg0KCQkJCQkkX2NvbXBldGl0aW9uc1skY29tcGV0aXRpb24tPmlkXS0+bnVtYmVyX29mX3Byb2R1Y3RzX2VudGVyZWQgPSAxOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkX2NvbXBldGl0aW9uc1skY29tcGV0aXRpb24tPmlkXS0+bnVtYmVyX29mX3Byb2R1Y3RzX2VudGVyZWQrKzsNCgkJCQl9DQoJCQl9DQoJCQl1bnNldCgkY29tcGV0aXRpb25zKTsNCgkJCXVuc2V0KCRjb21wZXRpdGlvbik7DQoJCQkvLyBzZXQgYmFzZSBwbGFjZWhvbGRlcnMNCgkJCSRwbGFjZWhvbGRlciA9IGFycmF5KCdbZnVsbF9uYW1lXScgPT4gJG1lbWJlci0+ZnVsbF9uYW1lLCAnW25hbWVdJyA9PiAkbWVtYmVyLT5uYW1lLCAnW3N1cm5hbWVdJyA9PiAkbWVtYmVyLT5zdXJuYW1lKTsNCgkJCS8vIG5vdyBidWlsZCB0aGUgbWVzc2FnZXMNCgkJCSRtZW1iZXItPmNvbXBldGl0aW9ucyA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkX2NvbXBldGl0aW9ucyBhcyAkaWQgPT4gJGNvbXBldGl0aW9uKQ0KCQkJew0KCQkJCSRwbGFjZWhvbGRlclsnW251bWJlcl9vZl9wcm9kdWN0c19lbnRlcmVkXSddID0gJGNvbXBldGl0aW9uLT5udW1iZXJfb2ZfcHJvZHVjdHNfZW50ZXJlZDsNCgkJCQkkcGxhY2Vob2xkZXJbJ1tjb21wZXRpdGlvbl9lbmRfZGF0ZV0nXSA9ICRjb21wZXRpdGlvbi0+Y29tcGV0aXRpb25fZW5kX2RhdGU7DQoJCQkJJHBsYWNlaG9sZGVyWydbY29tcGV0aXRpb25fc3RhcnRfZGF0ZV0nXSA9ICRjb21wZXRpdGlvbi0+Y29tcGV0aXRpb25fc3RhcnRfZGF0ZTsNCgkJCQkkcGxhY2Vob2xkZXJbJ1tjb21wZXRpdGlvbl9uYW1lXSddID0gJGNvbXBldGl0aW9uLT5jb21wZXRpdGlvbl9uYW1lOw0KCQkJCS8vIHNldCBrZXkNCgkJCQkka2V5ID0gJGlkIC4gJ192ZG1fbWFraXRhXycgLiAkbWVtYmVyLT5pZDsNCgkJCQkvLyBhZGQgdGhlIHByb2ZpbGUgbm90aWNlDQoJCQkJJG1lbWJlci0+Y29tcGV0aXRpb25zWyRpZF0gPSBhcnJheSgnY29tcGV0aXRpb25zX3RlbXBsYXRlJyA9PiB0cmltKHNlbGY6OnNldER5bmFtaWNEYXRhKCRjb21wZXRpdGlvbi0+Y29tcGV0aXRpb25zX3RlbXBsYXRlLCAkcGxhY2Vob2xkZXIpKSk7DQoJCQkJLy8gaXMgdGhlIG5vdGljZSBzdGlsbCBhY3RpdmUNCgkJCQlpZiAoc2VsZjo6Z2V0KCRrZXkpID09IDEpDQoJCQkJew0KCQkJCQkkbWVtYmVyLT5jb21wZXRpdGlvbnNbJGlkXVsnbm90aWNlX3RlbXBsYXRlJ10gPSB0cmltKHNlbGY6OnNldER5bmFtaWNEYXRhKCRjb21wZXRpdGlvbi0+bm90aWNlX3RlbXBsYXRlLCAkcGxhY2Vob2xkZXIpKTsNCgkJCQl9DQoJCQkJLy8gbWFrZSBzdXJlIHRoZSBub3RpY2UgaXMgbm90IGFkZGVkIGFnYWluDQoJCQkJc2VsZjo6c2V0KCRrZXksIG51bGwpOw0KCQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBQcm9kdWN0IERldGFpbA0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJvZHVjdERldGFpbHMoJiRjb2RlKQ0KCXsNCgkJLy8gZ2V0IGRhdGFiYXNlIG9iamVjdA0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJLy8gZ2V0IGFsbCBpdGVtIGlkcyBvZiBFbnRyaWVzIHRoYXQgYmVsb25nIHRvIHRoaXMgdXNlcg0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpDQoJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZShhcnJheSgndHlwZScsJ3dhcnJhbnR5JywnZXh0ZW5kZWQnKSkpDQoJCQktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW3Byb2R1Y3RzXV1dX3Byb2R1Y3QnKSk7DQoJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2NvZGUnKSAuICcgPSAnIC4gICRkYi0+cXVvdGUoJGNvZGUpKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpLT5leGVjdXRlKCk7DQoJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuICRkYi0+bG9hZE9iamVjdCgpOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldFdhcnJhbnR5RGV0YWlscygmJHByb2R1Y3QsICRhZGRfbGluayA9IGZhbHNlKQ0KCXsNCgkJaWYgKCgkaGVscGVyQ2xhc3MgPSBzZWxmOjpnZXRIZWxwZXJDbGFzcygnW1tbcHJvZHVjdHNdXV0nKSkgIT09IGZhbHNlICYmIG1ldGhvZF9leGlzdHMoJGhlbHBlckNsYXNzLCAnZ2V0V2FycmFudHlEZXRhaWxzJykpDQoJCXsNCgkJCXJldHVybiAkaGVscGVyQ2xhc3M6OmdldFdhcnJhbnR5RGV0YWlscygkcHJvZHVjdCwgJGFkZF9saW5rKTsNCgkJfQ0KCX0NCltDVVNUT01DT0RFPXRoZUJ1dGxlcl0NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQpbQ1VTVE9NQ09ERT1nZXRNZW1iZXJOYW1lXQ0KW0NVU1RPTUNPREU9Z2V0SGVscGVyQ2xhc3NdDQpbQ1VTVE9NQ09ERT1jYW5BY2Nlc3NNZW1iZXJEYXRhXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0=', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbQ29tcG9uZW50IGltYWdlXShodHRwczovL3d3dy52ZG0uaW8vaW1hZ2VzL01ha2l0YTUwMC5qcGcgIlRoZSBNYWtpdGEgQ29tcG9uZW50IikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'Competition Details', '', '', 'Competition (mymakita)', '.git', '', '', 1, 'https://raw.githubusercontent.com/george-media/com_mymakita_contactdetails/master/update_server.xml', 'http://www.vdm.io', '', '7zJ8lOdXDPAFp/EDYMkNaR2ykAAlesgeWbBdcvgecoY=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 50, '', 1, 39), +(71, 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', 1, 1, 1, '', '{}', '', 1, 3, 3, 'Llewellyn van der Merwe', '', 'joomla_basic.txt', '', '', 'Vast Development Method', '1.0.0', 'Copyright (C) 2020. All Rights Reserved', '2020-07-03 13:47:05', 1, 'NEe9OpwGlAPGqu8E+I9+15yDDexd+CY6BbIAQmwCaZs=', '9l7XznNOXO4eJo09NW06SeHHmSUdz56Aikwt+K93qto=', '', '6l6dpiHO0txj5F0mec0GrzEKvtDRaCkllWeBXz99XTQ=', '', 'LmZpZWxkLWNhbGVuZGFyIGlucHV0IHsNCglmb250OmNhcHRpb24gIWltcG9ydGFudDsNCn0=', 'A_252', 2, '', 'The tradeshow member manager that integrates with other components in Joomla, and the Joomla user suite.', 'joomla@vdm.io', '', '', 'obfWNiZGHzltZ5e+DYOTW5DtDS28vo4Q2s3aRO27LEjXk+FoFUdpPPA2go+he8S2kWlTYw+N9VkznCycTUjAPA==', '', '4962adb3-5e1e-4335-bb03-9cb11c9614eb', 'images/vdm/INTER500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '⊛', '2021-03-08 03:18:38', 2, 'Trade Show', 'tradeshow', '', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSogdGhlIGJ1dHRvbiBuYW1lcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJGJ1dHRvbk5hbWVzID0gYXJyYXkoKTsNCg0KCS8qKg0KCSogdGhlIG9wZW5lcg0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJG9wZW5lcjsNCg0KCS8qKg0KCSogdGhlIHJldHVybiBoZXJlIHBhdGgNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljICRyZXR1cm5faGVyZTsNCg0KCS8qKg0KCSogc2V0IGltYWdlIEhUTUwNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldEltYWdlSFRNTCgkb2JqZWN0KQ0KCXsNCgkJcmV0dXJuICc8aW1nIHNyYz0iJyAuICRvYmplY3QtPmdldCgncHJvZmlsZV9pbWFnZV91cmwnLCAnIycpIC4gJyIgY2xhc3M9Im1lbWJlci1pbWFnZSIgYWx0PSInIC4gJG9iamVjdC0+Z2V0KCduYW1lJywgVGV4dDo6XygnTWVtYmVyJykpIC4gJyAnIC4gVGV4dDo6XygnSW1hZ2UnKSAuICciIC8+JzsNCgl9DQoNCgkvKioNCgkqIHNldCBpbWFnZSBsaW5rDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRJbWFnZUxpbmsoJGl0ZW0pDQoJew0KCQlpZiAoU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JG9wZW5lcikgJiYgKCRpbWFnZSA9ICRpdGVtLT5nZXQoJ3Byb2ZpbGVfaW1hZ2UnLCBmYWxzZSkpICE9PSBmYWxzZSAmJiAhaXNfbnVtZXJpYygkaW1hZ2UpICYmICRpbWFnZSA9PT0gYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRpbWFnZSwgdHJ1ZSkpKQ0KCQl7DQoJCQkvLyBub3cgdW5sb2NrDQoJCQkkaXRlbS0+c2V0KCdwcm9maWxlX2ltYWdlJywgcnRyaW0oc2VsZjo6JG9wZW5lci0+ZGVjcnlwdFN0cmluZygkaW1hZ2UpLCAiXDAiKSk7DQoJCX0NCgkJLy8gZ2V0IGxpbmsNCgkJcmV0dXJuIHNlbGY6OmdldEltYWdlTGluaygkaXRlbSwgJ3Byb2ZpbGVfaW1hZ2UnLCAnbmFtZScsIG51bGwsIGZhbHNlKTsNCgl9DQoNCgkvKioNCgkqIHNldCBtZW1iZXIgZWRpdCB1cmwNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldE1lbWJlckVkaXRVUkwoJGl0ZW0pDQoJew0KCQlpZiAoc2VsZjo6Y2FuQWNjZXNzTWVtYmVyKCRpdGVtLT5nZXQoJ2lkJywgMCkpICYmICgkdXJsID0gc2VsZjo6Z2V0RWRpdFVSTCgkaXRlbSwgJ21lbWJlcicsICdtZW1iZXJzJywgJyZyZXR1cm49JyAuIHNlbGY6OiRyZXR1cm5faGVyZSkpICE9PSBmYWxzZSkNCgkJew0KCQkJcmV0dXJuICR1cmw7DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCg0KCS8qKg0KCSogc2V0IHByb2ZpbGUgbGluaw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0UHJvZmlsZUxpbmsoJG9iamVjdCkNCgl7DQoJCS8vIGdldCB0aGUgZ2xvYmFsIHNldHRpbmdzDQoJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCXsNCgkJCXNlbGY6OiRwYXJhbXMgPSBKb29tbGFfX19hZWI4ZTQ2M18yOTFmXzQ0NDVfOWFjNF8zNGI2MzdjMTJkYmRfX19Qb3dlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyk7DQoJCX0NCgkJLy8gb25seSBsb2FkIGxpbmsgaWYgb3BlbiB0byBwdWJsaWMgb3IgaGFzIGFjY2Vzcw0KCQlpZiAoMiA9PSBzZWxmOjokcGFyYW1zLT5nZXQoJ2xvZ2luX3JlcXVpcmVkJywgMSkgfHwgc2VsZjo6Y2FuQWNjZXNzTWVtYmVyKCRvYmplY3QtPmdldCgnaWQnLCAwKSkpDQoJCXsNCgkJCXJldHVybiBKb29tbGFfX19kNGM3NjA5OV80YzMyXzQwOGFfODcwMV9kMGE3MjQ0ODRkZmRfX19Qb3dlcjo6XygnaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnZpZXc9cHJvZmlsZSZpZD0nLiAkb2JqZWN0LT5nZXQoJ2lkJykgLiAnOicgLiAkb2JqZWN0LT5nZXQoJ3Rva2VuJykgLiAnJnJldHVybj0nIC4gc2VsZjo6JHJldHVybl9oZXJlKTsNCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJLyoqDQoJKiBzZXQgbWVtYmVyIG5hbWUNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldE1lbWJlck5hbWUoJG9iamVjdCkNCgl7DQoJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSBjcmVhdGVkIGJ5IG9yIG1vZGlmaWVkIGJ5DQoJCWlmICgoJHVzZXIgPSAkb2JqZWN0LT5nZXQoJ2NyZWF0ZWRfYnknLCBmYWxzZSkpICE9PSBmYWxzZSB8fCAoJHVzZXIgPSAkb2JqZWN0LT5nZXQoJ21vZGlmaWVkX2J5JywgZmFsc2UpKSAhPT0gZmFsc2UgKQ0KCQl7DQoJCQkkb2JqZWN0LT5zZXQoJ3VzZXInLCAkdXNlcik7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OmdldE1lbWJlck5hbWUoJG9iamVjdC0+Z2V0KCdpZCcsIG51bGwpLCAkb2JqZWN0LT5nZXQoJ3VzZXInLCBudWxsKSwgJG9iamVjdC0+Z2V0KCduYW1lJywgbnVsbCksICRvYmplY3QtPmdldCgnc3VybmFtZScsIG51bGwpKTsNCgl9DQoNCgkvKioNCgkqIHNldCBtZW1iZXIgZW1haWwNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldE1lbWJlckVtYWlsKCRvYmplY3QpDQoJew0KCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgY3JlYXRlZCBieSBvciBtb2RpZmllZCBieQ0KCQlpZiAoKCR1c2VyID0gJG9iamVjdC0+Z2V0KCdjcmVhdGVkX2J5JywgZmFsc2UpKSAhPT0gZmFsc2UgfHwgKCR1c2VyID0gJG9iamVjdC0+Z2V0KCdtb2RpZmllZF9ieScsIGZhbHNlKSkgIT09IGZhbHNlICkNCgkJew0KCQkJJG9iamVjdC0+c2V0KCd1c2VyJywgJHVzZXIpOw0KCQl9DQoJCXJldHVybiBzZWxmOjpnZXRNZW1iZXJFbWFpbCgkb2JqZWN0LT5nZXQoJ2lkJywgbnVsbCksICRvYmplY3QtPmdldCgndXNlcicsIG51bGwpLCAkb2JqZWN0LT5nZXQoJ2VtYWlsJywgbnVsbCkpOw0KCX0NCg0KCS8qKg0KCSogc2V0IHRoZSBzZXNzaW9uIGRlZmF1bHRzIGlmIG5vdCBzZXQNCgkqKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFNlc3Npb25EZWZhdWx0cygpDQoJew0KCQkvLyBub3RpbmcgZm9yIG5vdw0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCgkvKioNCgkqIGdldCBidXR0b24gbmFtZQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QnV0dG9uTmFtZSgkdHlwZSwgJGRlZmF1bHQpDQoJew0KCQlpZiAoIWlzc2V0KHNlbGY6OiRidXR0b25OYW1lc1skdHlwZV0pKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjayhzZWxmOjokcGFyYW1zKSkNCgkJCXsNCgkJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQkJfQ0KCQkJLy8gZ2V0IHRoZSBidXR0b24gbmFtZQ0KCQkJc2VsZjo6JGJ1dHRvbk5hbWVzWyR0eXBlXSA9IHNlbGY6OiRwYXJhbXMtPmdldCgnYnV0dG9uXycuICR0eXBlIC4gJ19uYW1lJywgJGRlZmF1bHQpOw0KCQl9DQoJCXJldHVybiBzZWxmOjokYnV0dG9uTmFtZXNbJHR5cGVdOw0KCX0NCg0KCS8qKg0KCSogcmVtb3ZlIGFsbCBncm91cHMgdGhhdCBhcmUgcGFydCBvZiB0YXJnZXQgZ3JvdXBzIGluIHRoZSBtZW1iZXIgdHlwZXMNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbW92ZU1lbWJlckdyb3VwcygmJGdyb3VwcykNCgl7DQoJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkZ3JvdXBzKSkNCgkJew0KCQkJLy8gZ2V0IGRhdGFiYXNlIG9iamVjdA0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJJHF1ZXJ5LT5zZWxlY3QoYXJyYXkoJ2EuaWQnKSk7DQoJCQkkcXVlcnktPmZyb20oJyNfX1tbW2NvbXBvbmVudF1dXV90eXBlIEFTIGEnKTsNCgkJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJLy8gZ2V0IGFsbCB0eXBlcw0KCQkJJHR5cGVzID0gJGRiLT5sb2FkQ29sdW1uKCk7DQoJCQkvLyBub3cgZ2V0IGFsbCB0YXJnZXQgZ3JvdXBzDQoJCQkkZ3JvdXBzX3RhcmdldCA9IHNlbGY6OmdldE1lbWJlckdyb3Vwc0J5VHlwZSgkdHlwZXMsICdncm91cHNfdGFyZ2V0Jyk7DQoJCQkvLyBub3cgdXBkYXRlIHRoZSBncm91cHMNCgkJCSRncm91cHMgPSBhcnJheV9kaWZmKCRncm91cHMsICRncm91cHNfdGFyZ2V0KTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSogZ2V0IHRoZSByZWdpc3RyYXRpb24gZm9ybQ0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Rm9ybXMoJHRhcmdldHMpDQoJew0KCQkvLyBnZXQgdGhlIGFwcCBvYmplY3QNCgkJJGFwcCA9IEZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCk7DQoJCS8vIGdldCBsYW5ndWFnZSBvYmplY3QNCgkJJGxhbmcgPSBGYWN0b3J5OjpnZXRMYW5ndWFnZSgpOw0KCQkvLyBzdGFydCBmb3JtcyBhcnJheQ0KCQkkZm9ybXM9IGFycmF5KCk7DQoJCS8vIGxvYWQgdGhlIHNjcmlwdHMgYWxzbw0KCQkkc2NyaXB0ID0gYXJyYXkoKTsNCgkJLy8gc2V0IHRoZSBmb3Jtcw0KCQlmb3JlYWNoICgkdGFyZ2V0cyBhcyAkZGV0YWlsKQ0KCQl7DQoJCQkvLyBnZXQgZGF0YSBmcm9tIHNlc3Npb24NCgkJCSRkYXRhID0gJGFwcC0+Z2V0VXNlclN0YXRlKCRkZXRhaWxbJ2NvbV8nXSAuICcuZWRpdC4nIC4gJGRldGFpbFsndGFibGUnXSAuICcuZGF0YScsIG51bGwpOw0KCQkJLy8gZ2V0IHRoZSBmb3JtDQoJCQkkZm9ybXNbJGRldGFpbFsnY29tJ11dID0gc2VsZjo6Z2V0TWVtYmVyRm9ybXMoMCwgJGRldGFpbFsnY29tXyddLCAkZGV0YWlsWyd0YWJsZSddLCAkZGF0YSwgdHJ1ZSwgJGRldGFpbFsnY29udHJvbCddKTsNCgkJCS8vIHdlIG11c3QgYWxzbyBnZXQgdGhlIHNjcmlwdHMNCgkJCS8vIHRyeSB0byBsb2FkIHRoZSB0cmFuc2xhdGlvbg0KCQkJJGxhbmctPmxvYWQoJGRldGFpbFsnY29tXyddLCBKUEFUSF9BRE1JTklTVFJBVE9SLCBudWxsLCBmYWxzZSwgdHJ1ZSk7DQoJCQkvLyBnZXQgdGhlIHNjcmlwdHMNCgkJCXNlbGY6OmdldEZpZWxkc1NjcmlwdCgkZGV0YWlsWydjb21fJ10sICRzY3JpcHQpOw0KCQl9DQoJCS8vIHRyeSBzb21lIHBsdWdpbiBsYW5ndWVzDQoJCSRsYW5nLT5sb2FkKCdwbGdfdXNlcl90ZXJtcycsIEpQQVRIX0FETUlOSVNUUkFUT1IsIG51bGwsIGZhbHNlLCB0cnVlKTsNCgkJLy8gbm93IGFkZCB0aGUgc2NyaXB0cyBpZiBmb3VuZA0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHNjcmlwdCkpDQoJCXsNCgkJCUZhY3Rvcnk6OmdldERvY3VtZW50KCktPmFkZFNjcmlwdERlY2xhcmF0aW9uKGltcGxvZGUoIlxuIiwgJHNjcmlwdCkpOw0KCQl9DQoJCS8vIHJldHVybiB0aGUgZm9ybXMNCgkJcmV0dXJuICRmb3JtczsNCgl9DQoNCgkvKioNCgkqIHVwZGF0ZSB0aGUgdHlwZSBtYXAsIGZvciBxdWljayBzZWFyY2gNCgkgKg0KCSAqIEBwYXJhbSAgIGludCAgICRtZW1iZXIgICAgIFRoZSBtZW1iZXIgSUQNCgkgKiBAcGFyYW0gICBzdHJpbmcvYXJyYXkgICAkdHlwZXMgICAgIFRoZSB0eXBlcw0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZVR5cGVzKCYkbWVtYmVyLCAkdHlwZXMgPSBudWxsKQ0KCXsNCgkJLy8gZ2V0IHRoZSBhcHAgb2JqZWN0DQoJCSRhcHAgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpOw0KCQkvLyBnZXQgZGF0YWJhc2Ugb2JqZWN0DQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkvLyBkZWxldGUgYWxsIHR5cGVzIHRoZSBhcmUgbGlua2VkIHRvIHRoaXMgbWVtYmVyDQoJCSRjb25kaXRpb25zID0gYXJyYXkoDQoJCSAgICAkZGItPnF1b3RlTmFtZSgnbWVtYmVyJykgLiAnID0gJyAuIChpbnQpICRtZW1iZXINCgkJKTsNCgkJJHF1ZXJ5LT5kZWxldGUoJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcCcpKTsNCgkJJHF1ZXJ5LT53aGVyZSgkY29uZGl0aW9ucyk7DQoJCSRkYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJGRiLT5leGVjdXRlKCk7DQoJCS8vIG5vdyBzZXQgdGhlIG5ldyB2YWx1ZXMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0eXBlcykpDQoJCXsNCgkJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJLy8gSW5zZXJ0IGNvbHVtbnMuDQoJCQkkY29sdW1ucyA9IGFycmF5KCdtZW1iZXInLCAndHlwZScpOw0KCQkJLy8gYnVpbGQgaW5zZXJ0IHF1ZXJ5DQoJCQkkcXVlcnktPmluc2VydCgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX3R5cGVfbWFwJykpOw0KCQkJJHF1ZXJ5LT5jb2x1bW5zKCRkYi0+cXVvdGVOYW1lKCRjb2x1bW5zKSk7DQoJCQkvLyBidWlsZCB0aGUgdmFsdWVzDQoJCQlmb3JlYWNoICgkdHlwZXMgYXMgJHR5cGUpDQoJCQl7DQoJCQkJICRxdWVyeS0+dmFsdWVzKChpbnQpICRtZW1iZXIgLiAnLCcgLiAoaW50KSAkdHlwZSk7DQoJCQl9DQoJCQkvLyBTZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0IGFuZCBleGVjdXRlIGl0Lg0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBzYXZlIHRoZSBkeW5hbWljIHZhbHVlcw0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRhdGUgICAgIFRoZSBtYWluIERhdGENCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdmlldyAgICAgVGhlIHZpZXcgbmFtZQ0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICoNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhdmVEeW5hbWljVmFsdWVzKCYkZGF0YSwgJHZpZXcgPSAnbWVtYmVyJykNCgl7DQoJCS8vIGdldCBhbGwgdGhlIGF2YWlsYWJsZSBjb21wb25lbnQgY2FsbGluZyBtZXRvZHMNCgkJJGNsYXNzID0gbmV3IFJlZmxlY3Rpb25DbGFzcygnW1tbQ29tcG9uZW50XV1dSGVscGVyJyk7DQoJCSRtZXRob2RzID0gYXJyYXlfZmlsdGVyKCRjbGFzcy0+Z2V0TWV0aG9kcyhSZWZsZWN0aW9uTWV0aG9kOjpJU19QVUJMSUMpLA0KCQkJZnVuY3Rpb24gKCRtZXRob2QpIHsNCgkJCQlpZiAoc3RycG9zKCRtZXRob2QtPm5hbWUsICdnZXQnKSAhPT0gZmFsc2UgJiYgc3RycG9zKCRtZXRob2QtPm5hbWUsICdBdmFpbGxhYmxlJykgIT09IGZhbHNlICkNCgkJCQl7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCSk7DQoJCS8vIHNldCB0eXBlIGlmIG5vdCBzZXQNCgkJaWYgKCFpc3NldCgkZGF0YVsndHlwZSddKSAmJiAkdmlldyA9PSAnbWVtYmVyJykNCgkJew0KCQkJJGRhdGFbJ3R5cGUnXSA9IHNlbGY6OmdldFZhcigkdmlldywgJGRhdGFbJ2lkJ10sICdpZCcsICd0eXBlJyk7DQoJCX0NCgkJLy8gc2V0IGFjY291bnQgaWYgbm90IHNldA0KCQlpZiAoIWlzc2V0KCRkYXRhWydhY2NvdW50J10pICYmICR2aWV3ID09ICdtZW1iZXInKQ0KCQl7DQoJCQkkZGF0YVsnYWNjb3VudCddID0gc2VsZjo6Z2V0VmFyKCR2aWV3LCAkZGF0YVsnaWQnXSwgJ2lkJywgJ2FjY291bnQnKTsNCgkJfQ0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIG1ldGhvZHMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRtZXRob2RzKSAmJiBpc3NldCgkZGF0YVsndHlwZSddLCAkZGF0YVsnYWNjb3VudCddKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSBnbG9iYWwgc2V0dGluZ3MNCgkJCWlmICghU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soc2VsZjo6JHBhcmFtcykpDQoJCQl7DQoJCQkJc2VsZjo6JHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKTsNCgkJCX0NCgkJCS8vIGdldCB0aGUgYXBwIG9iamVjdA0KCQkJJGFwcCA9IEZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCk7DQoJCQkvLyBnZXQgdGhlIHBvc3Qgb2JqZWN0DQoJCQkkcG9zdCA9IEZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCktPmlucHV0LT5wb3N0Ow0KCQkJLy8gZ2V0IHRoZSB1c2VyIG9iamVjdA0KCQkJJHVzZXIgPSBGYWN0b3J5OjpnZXRVc2VyKCk7DQoJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIG9iamVjdA0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCQkvLyBzdGFydCBsb29waW5nIHRoZSBtZXRob2RzDQoJCQlmb3JlYWNoICgkbWV0aG9kcyBhcyAkbWV0aG9kKQ0KCQkJew0KCQkJCS8vIGdldCBjb21wb25lbnRzDQoJCQkJJGNvbXBvbmVudHMgPSBzZWxmOjp7JG1ldGhvZC0+bmFtZX0oJGRhdGFbJ3R5cGUnXSwgJGRhdGFbJ2FjY291bnQnXSk7DQoJCQkJLy8gY2hlY2sgaWYgd2UgZm91bmQgY29tcG9uZW50cw0KCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkY29tcG9uZW50cykpDQoJCQkJew0KCQkJCQkvLyBnZXQgYXNzZXNzbWVudCBkZXRhaWxzDQoJCQkJCWZvcmVhY2ggKCRjb21wb25lbnRzIGFzICRfbmFtZSA9PiAkY29tcCkNCgkJCQkJew0KCQkJCQkJLy8gb25seSBzYXZlIG9uZSB0byBvbmUgY29tcG9uZW50cw0KCQkJCQkJaWYgKFN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKCRjb21wKSAmJiBpc3NldCgkY29tcC0+ZWxlbWVudCkpDQoJCQkJCQl7DQoJCQkJCQkJJF9jb21wb25lbnQgPSAkY29tcC0+ZWxlbWVudDsNCgkJCQkJCQkkY29tcG9uZW50ID0gc3RyX3JlcGxhY2UoJ2NvbV8nLCAnJywgJF9jb21wb25lbnQpOw0KCQkJCQkJCSRDb21wb25lbnQgPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRjb21wb25lbnQsICdGJyk7DQoJCQkJCQkJJENPTXBvbmVudCA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJGNvbXBvbmVudCwgJ1cnKTsNCgkJCQkJCQkvLyBnZXQgdGhlIHBvc3RlZCBkYXRlIGlmIHRoZXJlIHdlcmUgYW55DQoJCQkJCQkJJF9kYXRhICA9ICRwb3N0LT5nZXQoJGNvbXBvbmVudCwgYXJyYXkoKSwgJ2FycmF5Jyk7DQoJCQkJCQkJLy8gY2hlY2sgaWYgdXNlciBhcmUgYWxsb3dlZCB0byBlZGl0IGZvcm0gdmFsdWVzIG9yIGNyZWF0ZSBmb3JtIHZhbHVlcw0KCQkJCQkJCWlmIChTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkX2RhdGEpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gZ2V0IHRoZSBsb2NhbCBwYXJhbXMNCgkJCQkJCQkJJHBhcmFtcyA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJF9jb21wb25lbnQpOw0KCQkJCQkJCQkvLyBtYWtlIHN1cmUgdGhlIElEIGlzIHNldA0KCQkJCQkJCQlpZiAoIWlzc2V0KCRfZGF0YVsnaWQnXSkgfHwgIWlzX251bWVyaWMoJF9kYXRhWydpZCddKSB8fCAkX2RhdGFbJ2lkJ10gPT0gMCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJLy8gc2V0IGlkIHRvIHplcm8gYXMgdGhpcyB3aWxsIGNhdXNlIG5ldyBpdGVtIHRvIGJlIGNyZWF0ZWQNCgkJCQkJCQkJCSRfZGF0YVsnaWQnXSA9IDA7DQoJCQkJCQkJCQkvLyBzZXQgZGVmYXVsdCBhY2Nlc3MNCgkJCQkJCQkJCSRfZGF0YVsnYWNjZXNzJ10gPSAkcGFyYW1zLT5nZXQoJ2RlZmF1bHRfYWNjZXNzbGV2ZWwnLCBzZWxmOjokcGFyYW1zLT5nZXQoJ2RlZmF1bHRfYWNjZXNzbGV2ZWwnLCAxKSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJLy8gY2hlY2sgaWYgdXNlciBtYXkgZWRpdA0KCQkJCQkJCQlpZiAoJF9kYXRhWydpZCddID4gMCAmJiAhJHVzZXItPmF1dGhvcmlzZSgnY29yZS5lZGl0JywgJF9jb21wb25lbnQgLiAnLmZvcm0uJyAuIChpbnQpICRfZGF0YVsnaWQnXSkpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCS8vIGNoZWNrIGVkaXQgb3duDQoJCQkJCQkJCQlpZiAoKCRjcmVhdGVkX2J5ID0gc2VsZjo6Z2V0VmFyKCdmb3JtJywgJF9kYXRhWydpZCddLCAnaWQnLCAnY3JlYXRlZF9ieScsICc9JywgJGNvbXBvbmVudCkpID09PSBmYWxzZSB8fCAkY3JlYXRlZF9ieSAhPSAkdXNlci0+aWQgfHwgISR1c2VyLT5hdXRob3Jpc2UoJ2NvcmUuZWRpdC5vd24nLCAkX2NvbXBvbmVudCkpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGFwcC0+ZW5xdWV1ZU1lc3NhZ2UoVGV4dDo6c3ByaW50ZignWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gZWRpdCAlcywgcGxlYXNlIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLCAkQ09NcG9uZW50LCAkX2RhdGFbJ2lkJ10pLCAnd2FybmluZycpOw0KCQkJCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIGNoZWNrIGlmIHVzZXIgbWF5IGNyZWF0ZQ0KCQkJCQkJCQlpZiAoJF9kYXRhWydpZCddID09IDAgJiYgISR1c2VyLT5hdXRob3Jpc2UoJ2NvcmUuY3JlYXRlJywgJF9jb21wb25lbnQpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpzcHJpbnRmKCdZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBhZGQgZGF0YSB0byAlcywgcGxlYXNlIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLCAkQ09NcG9uZW50KSwgJ3dhcm5pbmcnKTsNCgkJCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIG1ha2Ugc3VyZSB0aGUgbWVtYmVyIElEIGlzIHNldCBpZiB2aWV3IGlzIG1lbWJlcg0KCQkJCQkJCQlpZiAoJ21lbWJlcicgPT09ICR2aWV3ICYmICFpc3NldCgkX2RhdGFbJHZpZXddKSB8fCAhaXNfbnVtZXJpYygkX2RhdGFbJHZpZXddKSB8fCAkX2RhdGFbJHZpZXddID09IDApDQoJCQkJCQkJCXsNCgkJCQkJCQkJCWlmICgkX2RhdGFbJ2lkJ10gPiAwICYmICRkYXRhWydpZCddID4gMCkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBnZXQgdGhlIG1lbWJlciBJRA0KCQkJCQkJCQkJCWlmICgoJG1lbWJlciA9IHNlbGY6OmdldFZhcignZm9ybScsICRfZGF0YVsnaWQnXSwgJ2lkJywgJHZpZXcsICc9JywgJGNvbXBvbmVudCkpID09PSBmYWxzZSB8fCAkbWVtYmVyICE9ICRkYXRhWydpZCddKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJJGFwcC0+ZW5xdWV1ZU1lc3NhZ2UoVGV4dDo6c3ByaW50ZignTWVtYmVyIElEIG1pc21hdGNoLCAlcy0lcyBjb3VsZCBub3QgYmUgc2F2ZWQuJywgJENPTXBvbmVudCwgJF9kYXRhWydpZCddKSwgJ2Vycm9yJyk7DQoJCQkJCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWVsc2VpZiAoJF9kYXRhWydpZCddID4gMCkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBnZXQgdGhlIG1lbWJlciBJRA0KCQkJCQkJCQkJCWlmICgoJG1lbWJlciA9IHNlbGY6OmdldFZhcignZm9ybScsICRfZGF0YVsnaWQnXSwgJ2lkJywgJHZpZXcsICc9JywgJGNvbXBvbmVudCkpID09PSBmYWxzZSB8fCAkbWVtYmVyID09IDApDQoJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpzcHJpbnRmKCdNZW1iZXIgSUQgbWlzbWF0Y2gsICVzLSVzIGNvdWxkIG5vdCBiZSBzYXZlZC4nLCAkQ09NcG9uZW50LCAkX2RhdGFbJ2lkJ10pLCAnZXJyb3InKTsNCgkJCQkJCQkJCQkJY29udGludWU7DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJZWxzZWlmICgkZGF0YVsnaWQnXSA+IDApDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJLy8gZ2V0IHRoZSBtZW1iZXIgSUQNCgkJCQkJCQkJCQkkbWVtYmVyID0gJGRhdGFbJ2lkJ107DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQllbHNlDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGFwcC0+ZW5xdWV1ZU1lc3NhZ2UoVGV4dDo6c3ByaW50ZignJXMgY291bGQgbm90IGJlIHNhdmVkLCBwbGVhc2UgdHJ5IGFnYWluLiBUaGlzIGNvdWxkIGJlIGR1ZSB0byB0aGUgZmFjdCB0aGlzIHRoZSBtZW1iZXIgSUQgd2FzIG5vdCByZWFkeS4nLCAkQ09NcG9uZW50KSwgJ2Vycm9yJyk7DQoJCQkJCQkJCQkJY29udGludWU7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQkvLyBzZXQgdGhlIG1lbWJlciBJRA0KCQkJCQkJCQkJJF9kYXRhWyR2aWV3XSA9ICRtZW1iZXI7DQoJCQkJCQkJCX0NCgkJCQkJCQkJLy8gY2hlY2sgaWYgdGhlIGNsYXNzIGFuZCBtZXRob2QgZXhpc3QNCgkJCQkJCQkJaWYgKCgkaGVscGVyQ2xhc3MgPSBzZWxmOjpnZXRIZWxwZXJDbGFzcygkX2NvbXBvbmVudCkpID09PSBmYWxzZSB8fCAhbWV0aG9kX2V4aXN0cygkaGVscGVyQ2xhc3MsICdnZXRNb2RlbCcpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQljb250aW51ZTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBnZXQgdGhlIG1vZGVsDQoJCQkJCQkJCSRtb2RlbCA9ICRoZWxwZXJDbGFzczo6Z2V0TW9kZWwoJ2Zvcm0nLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzLycgLiAkX2NvbXBvbmVudCwgJENvbXBvbmVudCk7DQoJCQkJCQkJCS8vIGRvIHdlIGhhdmUgdGhlIG1vZGVsDQoJCQkJCQkJCWlmICgkbW9kZWwpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCS8vIGZvcmNlIG90aGVyIGNvbXBvbmVudCBwYXRoIChUT0RPKSB3aWxsIGJlIGFuIGlzc3VlIGlmIGZvcm1zIGFuZCBmaWVsZHMgYXJlIHRoZSBzYW1lDQoJCQkJCQkJCQlcSkZvcm06OmFkZEZvcm1QYXRoKEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvJyAuICRfY29tcG9uZW50IC4gJy9tb2RlbHMvZm9ybXMnKTsNCgkJCQkJCQkJCVxKRm9ybTo6YWRkRmllbGRQYXRoKEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvJyAuICRfY29tcG9uZW50IC4gJy9tb2RlbHMvZmllbGRzJyk7DQoJCQkJCQkJCQkvLyBWYWxpZGF0ZSB0aGUgcG9zdGVkIGRhdGEuDQoJCQkJCQkJCQkvLyBTb21ldGltZXMgdGhlIGZvcm0gbmVlZHMgc29tZSBwb3N0ZWQgZGF0YSwgc3VjaCBhcyBmb3IgcGx1Z2lucyBhbmQgbW9kdWxlcy4NCgkJCQkJCQkJCSRmb3JtID0gJG1vZGVsLT5nZXRGb3JtKCRfZGF0YSwgZmFsc2UpOw0KCQkJCQkJCQkJaWYgKCEkZm9ybSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgkbW9kZWwtPmdldEVycm9yKCksICdlcnJvcicpOw0KCQkJCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJLy8gcmVtb3ZlIGFsbCBmaWVsZHMgbm90IHBhcnQgb2YgdGhlIGFsbG93ZWQgZWRpdCBmaWVsZHMNCgkJCQkJCQkJCWlmICgoJGZpZWxkcyA9ICRwYXJhbXMtPmdldCgnZWRpdF9maWVsZHMnLCBmYWxzZSkpICE9PSBmYWxzZSAmJiBTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZmllbGRzKSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkvLyBidWlsZCBhIGZpZWxkcyBhcnJheSBidWNrZXQNCgkJCQkJCQkJCQkkZmllbGRBY3RpdmUgPSBhcnJheSgpOw0KCQkJCQkJCQkJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJHJvdykNCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSRmaWVsZEFjdGl2ZVskcm93LT5maWVsZF0gPSAkcm93LT5maWVsZDsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJLy8gc2V0IHRoZSBrZWVwIHZhbHVlcw0KCQkJCQkJCQkJCSRmaWVsZEFjdGl2ZVsnaWQnXSA9ICdpZCc7DQoJCQkJCQkJCQkJJGZpZWxkQWN0aXZlWydtZW1iZXInXSA9ICdtZW1iZXInOw0KCQkJCQkJCQkJCSRmaWVsZEFjdGl2ZVsnYXNzZXRfaWQnXSA9ICdhc3NldF9pZCc7DQoJCQkJCQkJCQkJJGZpZWxkQWN0aXZlWydjcmVhdGVkJ10gPSAnY3JlYXRlZCc7DQoJCQkJCQkJCQkJJGZpZWxkQWN0aXZlWydjcmVhdGVkX2J5J10gPSAnY3JlYXRlZF9ieSc7DQoJCQkJCQkJCQkJJGZpZWxkQWN0aXZlWydtb2RpZmllZCddID0gJ21vZGlmaWVkJzsNCgkJCQkJCQkJCQkkZmllbGRBY3RpdmVbJ21vZGlmaWVkX2J5J10gPSAnbW9kaWZpZWRfYnknOw0KCQkJCQkJCQkJCSRmaWVsZEFjdGl2ZVsnYWNjZXNzJ10gPSAnYWNjZXNzJzsNCgkJCQkJCQkJCQkkZmllbGRBY3RpdmVbJ3ZlcnNpb24nXSA9ICd2ZXJzaW9uJzsNCgkJCQkJCQkJCQkkZmllbGRBY3RpdmVbJ3J1bGVzJ10gPSAncnVsZXMnOw0KCQkJCQkJCQkJCS8vIGdldCB0aGUgZGF0YWJhc2UgY29sdW1ucyBvZiB0aGlzIHRhYmxlDQoJCQkJCQkJCQkJJGNvbHVtbnMgPSAkZGItPmdldFRhYmxlQ29sdW1ucygiI19fIiAuICRjb21wb25lbnQgLiAiX2Zvcm0iLCBmYWxzZSk7DQoJCQkJCQkJCQkJLy8gbm93IG1ha2Ugc3VyZSB0aGUgZmllbGRzIHRoYXQgYXJlIG5vdCBlZGl0YWJsZSBhcmUgcmVtb3ZlZCAoc28gY2FuJ3QgYmUgdXBkYXRlZCB2aWEgdGhpcyBmb3JtKQ0KCQkJCQkJCQkJCWZvcmVhY2goYXJyYXlfa2V5cygkY29sdW1ucykgYXMgJGZpZWxkKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJaWYgKCFpc3NldCgkZmllbGRBY3RpdmVbJGZpZWxkXSkpDQoJCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJCSRmb3JtLT5yZW1vdmVGaWVsZCgkZmllbGQpOw0KCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJLy8gU2VuZCBhbiBvYmplY3Qgd2hpY2ggY2FuIGJlIG1vZGlmaWVkIHRocm91Z2ggdGhlIHBsdWdpbiBldmVudA0KCQkJCQkJCQkJJG9iakRhdGEgPSAob2JqZWN0KSAkX2RhdGE7DQoJCQkJCQkJCQkkYXBwLT50cmlnZ2VyRXZlbnQoDQoJCQkJCQkJCQkJJ29uQ29udGVudE5vcm1hbGlzZVJlcXVlc3REYXRhJywNCgkJCQkJCQkJCQlhcnJheSgkX2NvbXBvbmVudCAuICcuZm9ybScsICRvYmpEYXRhLCAkZm9ybSkNCgkJCQkJCQkJCSk7DQoJCQkJCQkJCQkkX2RhdGEgPSAoYXJyYXkpICRvYmpEYXRhOw0KCQkJCQkJCQkJLy8gVGVzdCB3aGV0aGVyIHRoZSBkYXRhIGlzIHZhbGlkLg0KCQkJCQkJCQkJJHZhbGlkRGF0YSA9ICRtb2RlbC0+dmFsaWRhdGUoJGZvcm0sICRfZGF0YSk7DQoJCQkJCQkJCQkvLyBDaGVjayBmb3IgdmFsaWRhdGlvbiBlcnJvcnMuDQoJCQkJCQkJCQlpZiAoJHZhbGlkRGF0YSA9PT0gZmFsc2UpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJLy8gR2V0IHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLg0KCQkJCQkJCQkJCSRlcnJvcnMgPSAkbW9kZWwtPmdldEVycm9ycygpOw0KCQkJCQkJCQkJCS8vIFB1c2ggdXAgdG8gdGhyZWUgdmFsaWRhdGlvbiBtZXNzYWdlcyBvdXQgdG8gdGhlIHVzZXIuDQoJCQkJCQkJCQkJZm9yICgkaSA9IDAsICRuID0gY291bnQoJGVycm9ycyk7ICRpIDwgJG4gJiYgJGkgPCAzOyAkaSsrKQ0KCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJaWYgKCRlcnJvcnNbJGldIGluc3RhbmNlb2YgXEV4Y2VwdGlvbikNCgkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJJGFwcC0+ZW5xdWV1ZU1lc3NhZ2UoJGVycm9yc1skaV0tPmdldE1lc3NhZ2UoKSwgJ3dhcm5pbmcnKTsNCgkJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCQllbHNlDQoJCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCRlcnJvcnNbJGldLCAnd2FybmluZycpOw0KCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJLy8gYWx3YXlzIGxvYWQgbWVtYmVyIGJhY2sNCgkJCQkJCQkJCWlmICghaXNfbnVtZXJpYygkdmFsaWREYXRhWyR2aWV3XSkgfHwgJHZhbGlkRGF0YVskdmlld10gPT0gMCkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkdmFsaWREYXRhWyR2aWV3XSA9ICRtZW1iZXI7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQkvLyBBdHRlbXB0IHRvIHNhdmUgdGhlIGRhdGEuDQoJCQkJCQkJCQlpZiAoISRtb2RlbC0+c2F2ZSgkdmFsaWREYXRhKSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZShUZXh0OjpzcHJpbnRmKCclcyBkYXRhIGNvdWxkIG5vdCBiZSBzYXZlZCcsICRDT01wb25lbnQpLCAnZXJyb3InKTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KW0NVU1RPTUNPREU9Z2V0QW55UGxhY2VIb2xkZXJzK21lbWJlcl0NCltDVVNUT01DT0RFPWdldFBsYWNlSG9sZGVyc1JlcG9ydF0NCltDVVNUT01DT0RFPWdldE1lbWJlcnNCeVR5cGVdDQpbQ1VTVE9NQ09ERT1nZXRSZWxhdGlvbnNoaXBzQnlUeXBlc10NCltDVVNUT01DT0RFPWdldFJlbGF0aW9uc2hpcHNCeU1lbWJlcl0NCltDVVNUT01DT0RFPWdldEFjY2Vzc10NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQpbQ1VTVE9NQ09ERT1nZXRCZXR3ZWVuXQ0KW0NVU1RPTUNPREU9dGhlQnV0bGVyXQ0KW0NVU1RPTUNPREU9YmFzZVNpeHR5Rm91clVSTF0NCltDVVNUT01DT0RFPW9wZW5WYWxpZEJhc2VTaXh0eUZvdXJdIA0KW0NVU1RPTUNPREU9bG9ja2VyXQ0KW0NVU1RPTUNPREU9c2V0RHluYW1pY0RhdGFJRl0NCltDVVNUT01DT0RFPWdldFRlbXBsYXRlXQ0KW0NVU1RPTUNPREU9Z2V0Rm9sZGVyUGF0aF0NCltDVVNUT01DT0RFPWltYWdlSGVscGVyc10NCltDVVNUT01DT0RFPXdyaXRlRmlsZV0NCltDVVNUT01DT0RFPWdldExpbmtPcHRpb25zXQ0KW0NVU1RPTUNPREU9Z2V0SW1hZ2VMaW5rXQ0KW0NVU1RPTUNPREU9Z2V0RWRpdEJ1dHRvbl0NCltDVVNUT01DT0RFPWdldENyZWF0ZUJ1dHRvbl0NCltDVVNUT01DT0RFPWNoZWNrVW5pcXVlXQ0KW0NVU1RPTUNPREU9Z2V0Q29tcGFueURldGFpbHNdDQpbQ1VTVE9NQ09ERT1nZXRIZWxwZXJDbGFzc10NCltDVVNUT01DT0RFPWdldFJlcG9ydF0NCltDVVNUT01DT0RFPWdldEFOWVRlbXBsYXRlK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUZvcm1EZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUNvbXBhbnlEZXRhaWxzK0FueV0NCltDVVNUT01DT0RFPWdldEFOWUZvcm1zK01lbWJlcl0NCltDVVNUT01DT0RFPWdldEFOWURldGFpbHMrbWVtYmVyLE1lbWJlcl0NCltDVVNUT01DT0RFPW1vZGVsQU5ZRGV0YWlscyttZW1iZXIsTWVtYmVyXQ0KW0NVU1RPTUNPREU9bGFiZWxNb2RlbEFOWURldGFpbHMrbWVtYmVyLE1lbWJlcl0NCltDVVNUT01DT0RFPWdldE1lbWJlck5hbWVdDQpbQ1VTVE9NQ09ERT1nZXRBbGxDb21wb25lbnRzKydJbmZvJyYjNDQ7J0Fzc2Vzc21lbnQnXQ0KW0NVU1RPTUNPREU9Z2V0Q29tcG9uZW50TmFtZSsnSW5mbycmIzQ0OydBc3Nlc3NtZW50J10NCltDVVNUT01DT0RFPWdldENvbXBvbmVudHNBdmFpbGxhYmxlK2luZm8sSW5mbywmIzkxOyYjOTE7JiM5MTtjb21wb25lbnQmIzkzOyYjOTM7JiM5MztdDQpbQ1VTVE9NQ09ERT1nZXRDb21wb25lbnRzQXZhaWxsYWJsZSthc3Nlc3NtZW50LEFzc2Vzc21lbnQsJiM5MTsmIzkxOyYjOTE7Y29tcG9uZW50JiM5MzsmIzkzOyYjOTM7XQ0KW0NVU1RPTUNPREU9bG9hZEludGVncmF0ZWRUYWJzXQ0KW0NVU1RPTUNPREU9c2V0VGFiXQ0KW0NVU1RPTUNPREU9c2V0U3ViZm9ybVRhYmxlXQ0KW0NVU1RPTUNPREU9c2F2ZVJlbGF0aW9uc2hpcHNdDQpbQ1VTVE9NQ09ERT1hcnJheVBhcnRpdGlvbl0NCltDVVNUT01DT0RFPWdldEZpbGVDb250ZW50c10NCltDVVNUT01DT0RFPWJjbWF0aF0NCltDVVNUT01DT0RFPWdVSURdDQpbQ1VTVE9NQ09ERT1nZXRDb3JlTmFtZV0NCltDVVNUT01DT0RFPW1pbWVUeXBlXQ0KW0NVU1RPTUNPREU9dHJpZ2dlclBsdWdpbl0NCltDVVNUT01DT0RFPWNhbkFjY2Vzc01lbWJlcl0=', '', '', '', '', '', '', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'The Tradeshow Member Manager', 'Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGAgKA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTsNCg0KQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWxhdGlvbl9tYXBgICgNCglgcmVsYXRpb25gIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWBtZW1iZXJgIElOVCgxMSkgTk9UIE5VTEwgREVGQVVMVCAwLA0KCWB0eXBlYCBJTlQoMTEpIE5PVCBOVUxMIERFRkFVTFQgMA0KKSBFTkdJTkU9SW5ub0RCIEFVVE9fSU5DUkVNRU5UPTAgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgREVGQVVMVCBDT0xMQVRFPXV0ZjhtYjRfdW5pY29kZV9jaTs=', 'RFJPUCBUQUJMRSBJRiBFWElTVFMgYCNfX1tbW2NvbXBvbmVudF1dXV90eXBlX21hcGA7DQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgI19fW1tbY29tcG9uZW50XV1dX3JlbGF0aW9uX21hcGA7', 'Trade Show', '.git', '', '', 1, 'https://raw.githubusercontent.com/george-media/com_mymakita/master/update_server.xml', 'http://www.vdm.io', '', '60dT/Pblxd6gCktQbfcYDS7dz1f+WwUbWB7tF33W3fg=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 15, '', 1, 40), +(72, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'joomla_basic.txt', '', '', 'Vast Development Method', '1.0.0', 'Copyright (C) 2020. All Rights Reserved', '2020-07-03 15:40:40', '', 'J9NlVYI02Eu7AgPKZpTm5FJn08mLqO8dFBsFtfPkXz8=', '8a60unLh/MKEy+Bk+U/DJKZpFatQlE10ON+7M0l6B9k=', '', 'TtVYGl4jbbtGejB8ajWigIAFBT35hSTBbYxPkDQlvmg=', '', '', 'A_255', 2, '', 'Tradeshow Members Contact Details', 'joomla@vdm.io', '', '', 'xte7yVjY5MNHAicUV1HSnpCG5bGN1Xqs61tQ+wrOIVrrPKTa45QbhayrfXo1plrqiVjKNheWOnCtvk+4S97eDw==', '', 'e2602a97-fc53-453c-a5bf-972b6402add3', 'images/vdm/INTER500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '⊛', '2020-07-20 23:18:52', 2, 'Contact', 'tradeshow_contactdetails', '', 4, '', '', 'W0NVU1RPTUNPREU9Y29udGFjdGRldGFpbHNIZWxwZXJCb3RoXQ==', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'Contact Details', '', '', 'Contact Details (tradeshow)', '.git', '', '', 1, 'https://raw.githubusercontent.com/george-media/com_mymakita_contactdetails/master/update_server.xml', 'http://www.vdm.io', '', 'XZD29QMr0qG96JwEhYJavC6EAXsjzKqbvwf+IHduPQ0=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 12, '', 1, 41), +(73, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', 1, '', '', 1, '', '', '', '', '', '{}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'joomla_basic.txt', '', '', 'Vast Development Method', '1.0.0', 'Copyright (C) 2020. All Rights Reserved', '2020-07-05 02:26:09', '', 'yUyHgT14jAW4fsHUg7PkwaoYVdwkgGLQBVa+JpKmy6E=', 'iNI0cSm59PTSv7sJJ9S3WIarGn3RoDz8BGGq79BnEFY=', '', 'eLhRw2cXGVaGcDPohMuh5jgMlcSYRM4AdYSS+AiVT7g=', '', '', 'A_256', 2, '', 'Tradeshow Members Interests Details', 'joomla@vdm.io', '', '', 'eOuN2nUyNDC7P7RaoGD3naJ/uTavr8Q6ZOpcZD8IprH3IUN1EmCuJOCRT5DrIGZ53B6RNhxJbm0h5BQjwqur4Q==', '', 'e64adafd-3574-415f-8ef8-96bf201ccec6', 'images/vdm/INTER500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '⊛', '2020-07-09 02:34:42', 2, 'Interests', 'tradeshow_interests', '', 4, '', '', 'CS8qKg0KCSogdGhlIHBhcmFtcw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHBhcmFtczsNCg0KCS8qKg0KCSAqIEdldCBzZWxlY3Rpb24gIGJhc2VkIG9uIHR5cGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIG1haW4gdGFibGUgdG8gc2VsZWN0DQoJICogQHBhcmFtICAgc3RyaW5nICAgJG1ldGhvZCAgICBUaGUgdHlwZSBvZiB2YWx1ZXMgdG8gcmV0dXJuDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGZpbHRlciAgICBUaGUga2luZCBvZiBmaWx0ZXIgKHRvIHJldHVybiBvbmx5IHZhbHVlcyByZXF1aXJlZCkNCgkgKiBAcGFyYW0gICBvYmplY3QgICAkZGIgICAgIFRoZSBkYXRhYmFzZSBvYmplY3QNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKg0KCSAqLw0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCR0YWJsZSA9ICdmb3JtJywgJG1ldGhvZCA9ICdwbGFjZWhvbGRlcicsICRmaWx0ZXIgPSAnbm9uZScsICRkYiA9IG51bGwpDQoJew0KCQkvLyBnZXQgdGhlIGdsb2JhbCBzZXR0aW5ncw0KCQlpZiAoIVN1cGVyX19fOTEwMDQ1MjlfOTRhOV80NTkwX2I4NDJfZTdjNmI2MjRlY2Y1X19fUG93ZXI6OmNoZWNrKHNlbGY6OiRwYXJhbXMpKQ0KCQl7DQoJCQlzZWxmOjokcGFyYW1zID0gSm9vbWxhX19fYWViOGU0NjNfMjkxZl80NDQ1XzlhYzRfMzRiNjM3YzEyZGJkX19fUG93ZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpOw0KCQl9DQoJCS8vIHByZXAgZm9yIHBsYWNlaG9sZGVycw0KCQkkZiA9ICcnOw0KCQkkYiA9ICcnOw0KCQlpZiAoJ3BsYWNlaG9sZGVyJyA9PT0gJG1ldGhvZCkNCgkJew0KCQkJLy8gZ2V0IHRoZSBwbGFjZWhvbGRlciBwcmVmaXgNCgkJCSRwcmVmaXggPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3BsYWNlaG9sZGVyX3ByZWZpeCcsICdbW1tjb21wb25lbnRdXV0nKTsNCgkJCSRmID0gJ1snIC4gJHByZWZpeCAuICdfJzsNCgkJCSRiID0gJ10nOw0KCQl9DQoJCS8vIG9ubHkgZ2V0IHdoYXQgd2UgbmVlZA0KCQlpZiAoJ3Byb2ZpbGUnID09PSAkZmlsdGVyKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGZpZWxkcy9jb2x1bW5zDQoJCQlpZiAoKCRmaWVsZHMgPSBzZWxmOjokcGFyYW1zLT5nZXQoJ3Byb2ZpbGVfZmllbGRzJywgZmFsc2UpKSAhPT0gZmFsc2UgJiYgU3VwZXJfX185MTAwNDUyOV85NGE5XzQ1OTBfYjg0Ml9lN2M2YjYyNGVjZjVfX19Qb3dlcjo6Y2hlY2soJGZpZWxkcykpDQoJCQl7DQoJCQkJJGNvbHVtbnMgPSBhcnJheSgnaWQnKTsgLy8gbmVlZGVkIGZvciBwZXJtaXNzaW9uIGNoZWNrDQoJCQkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpDQoJCQkJew0KCQkJCQkkY29sdW1uc1tdID0gJGZpZWxkLT5maWVsZDsNCgkJCQl9DQoJCQkJLy8gYWRkIGRhdGVzIGZvciBkaXNwbGF5DQoJCQkJJGNvbHVtbnNbXSA9ICdjcmVhdGVkJzsNCgkJCQkkY29sdW1uc1tdID0gJ21vZGlmaWVkJzsNCgkJCX0NCgkJfQ0KCQkvLyBzZXQgdGhlIHZhbHVlcyB5b3Ugd2FudCB0byByZW1vdmUgYWZ0ZXIgbW9kZWxpbmcNCgkJZWxzZWlmICgncmVtb3ZlJyA9PT0gJGZpbHRlcikNCgkJew0KCQkJLy8gc3RhcnQgYnVpbGQgcmVtb3ZhbA0KCQkJJHJlbW92YWwgPSBhcnJheSgpOw0KCQkJLy8gZ2V0IHRoZSBmaWVsZHMvY29sdW1ucw0KCQkJJHJlbW92YWxbXSA9ICRmIC4gJ3BhcmFtcycgLiAkYjsNCgkJCXJldHVybiAkcmVtb3ZhbDsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCS8vIGNoZWNrIGlmIHdlIGhhdmUgdGhlIERCIG9iamVjdA0KCQkJaWYgKCFTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkZGIpKQ0KCQkJew0KCQkJCS8vIGdldCB0aGUgZGF0YWJhc2Ugb2JqZWN0DQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0REJPKCk7DQoJCQl9DQoJCQkvLyBnZXQgdGhlIGRhdGFiYXNlIGNvbHVtbnMgb2YgdGhpcyB0YWJsZQ0KCQkJJGNvbHVtbnMgPSAkZGItPmdldFRhYmxlQ29sdW1ucygiI19fW1tbY29tcG9uZW50XV1dXyIgLiAkdGFibGUsIGZhbHNlKTsNCgkJCS8vIGFsd2F5cyByZW1vdmUgdGhlc2UNCgkJCSRyZW1vdmUgPSBhcnJheSgnYXNzZXRfaWQnLCAnY2hlY2tlZF9vdXQnLCAnY2hlY2tlZF9vdXRfdGltZScpOw0KCQkJLy8gaWYgcGxhY2Vob2xkZXIgYW5kIG5vbmUgZmlsdGVyIHRoZW4gcmVtb3ZlIHNvbWUgbW9yZQ0KCQkJaWYgKCdwbGFjZWhvbGRlcicgPT09ICRtZXRob2QgJiYgKCdyZXBvcnQnID09PSAkZmlsdGVyIHx8ICdlbWFpbCcgPT09ICRmaWx0ZXIpKQ0KCQkJew0KCQkJCSRyZW1vdmVbXSA9ICdwYXJhbXMnOw0KCQkJCSRyZW1vdmVbXSA9ICdhY2Nlc3MnOw0KCQkJCSRyZW1vdmVbXSA9ICdjcmVhdGVkX2J5JzsNCgkJCQkkcmVtb3ZlW10gPSAnaWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdvcmRlcmluZyc7DQoJCQkJJHJlbW92ZVtdID0gJ3ZlcnNpb24nOw0KCQkJCSRyZW1vdmVbXSA9ICdwdWJsaXNoZWQnOw0KCQkJCSRyZW1vdmVbXSA9ICdtb2RpZmllZF9ieSc7DQoJCQkJJHJlbW92ZVtdID0gJ21vZGlmaWVkJzsNCgkJCQkkcmVtb3ZlW10gPSAnaGl0cyc7DQoJCQl9DQoJCQkvLyByZW1vdmUNCgkJCWZvcmVhY2ggKCRyZW1vdmUgYXMgJGtleSkNCgkJCXsNCgkJCQl1bnNldCgkY29sdW1uc1ska2V5XSk7DQoJCQl9DQoJCQkvLyBwcmVwIHRoZSBjb2x1bW5zDQoJCQkkY29sdW1ucyA9IGFycmF5X2tleXMoJGNvbHVtbnMpOw0KCQl9DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGNvbHVtbnMNCgkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRjb2x1bW5zKSkNCgkJew0KCQkJLy8gY29udmVydCB0aGUgY29sdW1ucyBmb3IgcXVlcnkgc2VsZWN0aW9uDQoJCQkkc2VsZWN0aW9uID0gYXJyYXkoKTsNCgkJCS8vIGxvYWQgdGhlIGNvbHVtbnMgdG8gc2VsZWN0aW9uDQoJCQlmb3JlYWNoICgkY29sdW1ucyBhcyAkY29sdW1uKQ0KCQkJew0KCQkJCSRzZWxlY3Rpb25bJ2EuJyAuICRjb2x1bW5dID0gJGYgLiAkY29sdW1uIC4gJGI7DQoJCQkJLy8gd2UgbXVzdCBhZGQgdGhlIGxhYmVsDQoJCQkJaWYgKCdwcm9maWxlJyAhPT0gJGZpbHRlciAmJiAnZmllbGQnICE9PSAkZmlsdGVyKQ0KCQkJCXsNCgkJCQkJLy8gc2V0IHRoZSBsYWJlbCBmb3IgdGhlc2UgZmllbGRzDQoJCQkJCSRzZWxlY3Rpb25bJ3NldExhYmVsLT4nIC4gJGNvbHVtbl0gPSAkZiAuICdsYWJlbF8nIC4gJGNvbHVtbiAuICRiOw0KCQkJCX0NCgkJCX0NCgkJCXJldHVybiAkc2VsZWN0aW9uOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCltDVVNUT01DT0RFPWdldFBsYWNlSG9sZGVyc1JlcG9ydF0NCltDVVNUT01DT0RFPWdldEFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9bW9kZWxBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPWxhYmVsTW9kZWxBTllEZXRhaWxzK2Zvcm0sRm9ybV0NCltDVVNUT01DT0RFPXJlbW92ZUFOWURldGFpbHMrZm9ybSxGb3JtXQ0KW0NVU1RPTUNPREU9Z2V0TWVtYmVyTmFtZV0NCltDVVNUT01DT0RFPWdldEhlbHBlckNsYXNzXQ0KW0NVU1RPTUNPREU9Y2FuQWNjZXNzTWVtYmVyRGF0YV0=', '', '', '', '', 'W0NVU1RPTUNPREU9dGVzdElmQ29yZUlzSW5zdGFsbGVkXQ==', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoq', '', '', 'Interests Details', '', '', 'Interests (tradeshow)', '.git', '', '', 1, 'https://raw.githubusercontent.com/george-media/com_mymakita_contactdetails/master/update_server.xml', 'http://www.vdm.io', '', 'p64m7REo8QwAaxkYcuH3+j3lWdyOeu8LN0hd/GpEDKs=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 4, '', 1, 42), +(74, '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', '', 1, '', 3, 'Joomla! Project', '', 'joomla.txt', '', '', 'Open Source Matters', '2.0.1', '(C) 2020 Open Source Matters, Inc.', '2020-07-29 22:24:08', '', 'nuPe7BZe0OtMlyNeeHPuS8SHX8O9HvQWj5jF+XCWih554qg/aohgU1kHkZ8Bc9ZKXxaS0LNvAD1PDZ/mNvPKh/ZktsZmU/CiEIV7jDRfnn0Z67gQ4qq8ukNLvrA7vTSgnLMGHXGVOP5jkiSKKT6LfA==', 'wWB7GJgVI/YsjDN7d2Xx3J7X2yE5cu/7jHL0zRp36uM=', '', 'v3X9AzJS8wSMIb81VZpN4bI3w785Wil6K4jI4Cl2dcI=', '', '', 'A_265', 2, '', 'A component to keep track of release checking.', 'admin@joomla.org', '', '', 'v31/4wVSWaILOAk2YmJ+QAkatJjr/U4Q15RcHU8nXPA=', '/var/git_', '12903467-e133-4b2a-9fb2-5c8b6141fc0d', 'images/vdm/INTER500.jpg', '', 'https://git.vdm.dev/joomla/com_release_checking', 'GNU General Public License version 2 or later; see LICENSE.txt', 1, '»', '2024-03-07 13:38:20', 2, 'Track Release Checking', 'releasechecking', 'JCB', 4, '', '', '', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIFNvbWUgRnVuIE51bWJlcnMNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKio=', 1, '', 'Track Release Checking', '', '', 'Track Release Checking', '.git', '', '', 2, 'https://raw.githubusercontent.com/joomla-projects/com_release_checking/master/update_server.xml', 'http://www.joomla.org', '', 'DSEQLzE3zgLZWTiI7dH7LTbsTw5ebd58CnojuOFFj/g=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 51, '', 1, 19), +(75, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{\"addcontributors0\":{\"name\":\"Mauritz van der Merwe\",\"title\":\"Lila-Lead\",\"email\":\"mauritz@nampharm.com.na\",\"website\":\"https:\\/\\/www.nampharm.com.na\\/\",\"use\":\"2\",\"show\":\"3\"}}', '', 1, '', 3, 'Llewellyn van der Merwe', '', 'nampharm.txt', '', '', 'NamPharm', '1.0.0', 'Copyright (C) 2021. All Rights Reserved', '2021-08-23 17:39:20', '', 'E2gQdKS7fPBdXSh5QGPg8XUxr5RE+KYb2O4hIRpPiJo=', 'nwDmkj3a/7a20Tx85owMgVKUVXmw1dXluKkupmanRME=', '', '+B2X3uAaAiq/s7njAISK7utK8wFgFrLLMAWxIFguvG4=', '', '', 'A_259', 2, '', 'Managing the integration with Lila', 'llewellyn@vdm.io', '', 'https://git.vdm.dev/NamPharm', '/QqJA76V+vHv0yV/XxFoZVVErzwjjZyg4PTcKxGfAHoah/HwHvVMA4h6kCm8qWuG', '', '3e6ad3e9-4638-4853-8a39-177338c9899c', 'images/vdm/INTER500.jpg', '', 'https://git.vdm.dev/NamPharm/lilapharm', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '', '2021-11-13 15:41:01', 2, 'LilaPharm', 'LilaPharm', '', 4, '', '', '', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8p', 1, '', 'Managing the integration with Lila', '', '', 'LilaPharm', '.git', '', '', 1, '', 'https://git.vdm.dev/NamPharm', '', 'E0X+mbMN8utwWS03NdaBIc2x8FL5/eQTD7xtRrqrduQ=', '', '{\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"add_site_component\":\"0\",\"site_component\":\"\",\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"add_site_helper\":\"0\",\"site_helper\":\"\"},\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"}}', 1, 16, '', 1, 73), +(77, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'JCB.txt', '', '', 'Joomla Component Builder', '1.0.2', 'Copyright (C) 2020. All Rights Reserved', '2022-05-19 19:45:15', '', 'ajPZSR9ECiF8dpmSxaMBqdg3FzmwebLHIqnh5aNP9oU=', 'Q7cGyROmDxs86z12EUNFK5OnnfGBdaet2LsCAiD6I18=', '', 'rf6ckpi4p5G/57685LcBwAeoPT2tUYuXlfK5J/EB0TI=', '', '', '', 1, '', 'To update the core powers of JCB', 'joomla@vdm.io', '', '', 'YxOrE3VZMV4NCTchaLing682C5FYf/BlivX9ncHR2SU=', '', '371f04cc-4f9b-466c-b6ad-e9b4466a48a7', 'images/vdm/jcb500.jpg', '', '', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '«', '2022-09-20 10:15:18', 3, 'Power Updater', 'PowerUpdater', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Power Updater', '', '', 'Power Updater', '.git', '', '', 1, 'https://www.vdm.io/updates/componentbuilder_basic_update_server.xml', 'http://www.joomlacomponentbuilder.com', '', 'mluySSH3I1cPJE6ONgLgnaQSbWmY8NrrI8bQh5nju/E=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"1\",\"admin_component\":\"\",\"power_admin_component\":{\"power_admin_component0\":{\"power\":\"8025e71c-8e21-44cb-b23e-dce2fb5a1ab5\",\"as\":\"default\",\"build\":\"2\"}},\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 14, '', 1, 55), +(78, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'JCB.txt', '', '', 'Joomla Component Builder', '1.0.2', 'Copyright (C) 2022. All Rights Reserved', '2022-09-20 10:22:50', '', 'WF9UyIOqL1Y1RmqBCYBgGNOOTmkKeb+bpiYUF0E97sc=', '/teVDI0QeBd/DEYVguwfIbG1gh/FCiStK0so6FKoYPc=', '', '7LZ6671VY+qBiuIGUzFFuuzTSBN+aqdXScZ4cV+IZhU=', '', '', '', 1, '', 'To update the core compiler of JCB', 'joomla@vdm.io', '', '', '/bu8qaakJoHxhQEQk+3Hhx5DxXCCaoPJaHpRA78vycU=', '', '7b7f5f0d-5d5d-4a14-b1c5-47f4541ec6df', 'images/vdm/jcb500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder/src/branch/staging/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '«', '2022-09-20 10:36:48', 3, 'Compiler Updater', 'CompilerUpdater', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Compiler Updater', '', '', 'Compiler Updater', '.git', '', '', 1, '', 'http://www.joomlacomponentbuilder.com', '', 'WrCSG395h8L2AStJAE+GcU4y1jIvzHt8wS8tj66kP/g=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"1\",\"admin_component\":\"\",\"power_admin_component\":{\"power_admin_component0\":{\"power\":\"32533a86-e602-4941-87c3-90bdd703989a\",\"as\":\"default\",\"build\":\"2\"}},\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 5, '', 1, 55), +(79, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'JCB.txt', '', '', 'Joomla Component Builder', '1.0.0', 'Copyright (C) 2022. All Rights Reserved', '2022-12-02 13:22:33', '', 'lPYL2eF+0NZjPxC0XaIeqJA5TEhl2ThtH4A41XeH+D0=', 'vOO5Yu75v70pS9PTvr8KYIFiW3fIBHXJhPpdRuCLDPU=', '', 'MoGIpuhFxT5u/6Vjn1O6qulD52PVAGyOeg5aWGDAgFI=', '', '', '', 1, '', 'To update the search classes of JCB', 'joomla@vdm.io', '', '', 'Z3gsAcjBJsQ2wbjV0v8SIi/8uKXk3Ej6x1dbkcQqSBk=', '', '4940e53c-8f00-4b87-bf13-04ef9b8aa7e9', 'images/vdm/jcb500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder/src/branch/staging/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '«', '2022-12-02 13:25:24', 3, 'Search Updater', 'SearchUpdater', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Search Updater', '', '', 'Search Updater', '.git', '', '', 1, '', 'http://www.joomlacomponentbuilder.com', '', '65PyHbdXxTdBj2RkLruCsjIvsxJzMesCfl/6pL8UKmw=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"1\",\"admin_component\":\"\",\"power_admin_component\":{\"power_admin_component0\":{\"power\":\"27977769-0fc0-4ade-8068-3299d0d66e25\",\"as\":\"default\",\"build\":\"1\"}},\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 3, '', 1, 55), +(80, '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '', '', '{}', '', '', '', 3, 'Llewellyn van der Merwe', '', 'joomla_basic.txt', '', '', 'Octoleo', '1.0.2', 'Copyright (C) 2022. All Rights Reserved', '2023-02-17 12:52:16', '', 'gjvvZWW9dda/XKgVcNl77diP4aIHScvJLVI873vJz9o=', 'fXaT9P1lb2dvQlpl5P8wrebvUJdVqEP5Da+aVdZVh9c=', '', 'QpJksp5hClG8qqwyEMDNBj1r3uzKameP7EKSuc7D3zM=', '', '', '', 1, '', 'Octoleo - Joomla Extension', 'octoleo@vdm.io', '', '', 'TcpNAqfyKC9Kxnonh76heWZTQS41BxXpUAvRPZKVNpo=', '', '70b0c5c7-2735-48a2-824d-39660179da67', 'images/vdm/WHALE500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder/src/branch/staging/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '«', '2023-11-28 12:55:47', 3, 'Octoleo', 'Octoleo', '', 4, '', '', '', '', '', '', '', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', 'Joomla Extension', '', '', 'Octoleo', '.git', '', '', 1, '', 'https://git.vdm.dev/Llewellyn', '', '1IbAsXMv1z3laR1QOw/7+5OAKgZ43I1J4FvfS1ZTDSc=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"1\",\"admin_component\":\"\",\"power_admin_component\":{\"power_admin_component0\":{\"power\":\"1a41f760-fb8f-4ded-ab87-9180cc846ca7\",\"as\":\"default\",\"build\":\"2\"}},\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"0\",\"admin_helper\":\"\",\"power_admin_helper\":[],\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 8, '', 1, 55), +(83, '', 1, '', '', '', 1, '', '', '', 1, '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, 1, 3, 3, 'Llewellyn van der Merwe', '/var/www/sermondistributor_j4', 'SD.txt', '', '', 'Vast Development Method', '4.0.0-beta1', 'Copyright (C) 2015. All Rights Reserved', '2015-10-22 16:59:20', '', 'L0K4HBwUNnpeGTf4rx2/ggxpFlbUErmORKBYS7GXB4U=', 'P+K1TMDoiqK9KAgplYnZKNXjjZZRUN64kUhTHVPndMc=', '', 'igIrKuNnwzTkv6yQTWSlxJxzsj3UU94xRx5zieUpm2s=', '', '', '', 1, '', 'Distributor is a highly advanced sermon distributor that runs on the [Joomla 4.x & 5.x](http://www.joomla.org) framework. You can link a shared folder from Dropbox to the component and use Dropbox as your file host, not to mention the advanced auto builder that gives you the ability to simply load sermons to your website by only adding them to Dropbox.', 'joomla@vdm.io', 1, 'http://vdm.bz/get-sermon-distributor-key', 'XGvstI4CFtBkA5eZjfvf4o8t8ysiqasRS8sWAYi2oPjeARiIu+cKEhMzA6La9ZtQZzspXOokiZYuyOvZqJiD/A==', '/var/git_', '5aeca7ea-25aa-4ebb-b2ef-8e2a11be02af', 'images/vdm/SD500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Sermon-Distributor', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2024-03-07 13:39:40', 2, 'Sermon Distributor', 'sermondistributor', 'TrueChristianChurch', 4, '', '', 'CS8qKg0KCSogCVRoZSBnbG9iYWwgcGFyYW1zDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zID0gZmFsc2U7DQoNCgkvKioNCgkqIAlVcGRhdGUgV2F0Y2hlcg0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHVwZGF0ZVdhdGNoID0gMTsNCg0KCS8qKg0KCSogCVVwZGF0ZSBXYXRjaGVyIChpZiBhcnJheSBpcyBvbmx5IG9uZSB2YWx1ZSkNCgkqKi8NCglwdWJsaWMgc3RhdGljICR1cGRhdGVXYXRjaF8gPSAwOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBsaW5rcyBhdXRvDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZXh0ZXJuYWxzb3VyY2VfYXV0bzsNCg0KCS8qKg0KCSogCVRoZSBleHRlcm5hbCBzb3VyY2UgbGlua3MgbWFudWFsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZXh0ZXJuYWxzb3VyY2VfbWFudWFsOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBzZWxlY3Rpb24gYXV0bw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHNlbGVjdF9leHRlcm5hbHNvdXJjZV9hdXRvOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBzZWxlY3Rpb24gbWFudWFsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkc2VsZWN0X2V4dGVybmFsc291cmNlX21hbnVhbDsNCg0KCS8qKg0KCSogCVRoZSB1cGRhdGUgZXJyb3JzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXBkYXRlRXJyb3JzID0gYXJyYXkoKTsNCltDVVNUT01DT0RFPWJhc2VTaXh0eUZvdXJVUkxdDQoJLyoqDQoJKiAJZ2V0IERvd25sb2FkIGxpbmtzIG9mIGEgc2VybW9uDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREb3dubG9hZExpbmtzKCYkc2VybW9uKQ0KCXsNCgkJJGxpbmtzID0gYXJyYXkoKTsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkvLyBkZWNyeXB0IHRoZSB1cmxzDQoJCSRzYWZlID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAxMjgpOw0KCQkvLyBpbnRlcm5hbCBkb3dubG9hZCB1cmwNCgkJJGtleUNvdW50ZXIgPSBuZXcgXHN0ZENsYXNzOw0KCQkka2V5Q291bnRlci0+c2VybW9uID0gJHNlcm1vbi0+aWQ7DQoJCWlmICgkc2VybW9uLT5wcmVhY2hlcikNCgkJew0KCQkJJGtleUNvdW50ZXItPnByZWFjaGVyID0gJHNlcm1vbi0+cHJlYWNoZXI7DQoJCX0NCgkJaWYgKCRzZXJtb24tPnNlcmllcykNCgkJew0KCQkJJGtleUNvdW50ZXItPnNlcmllcyA9ICRzZXJtb24tPnNlcmllczsNCgkJfQ0KCQkka2V5Q291bnRlclJBVyA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKGpzb25fZW5jb2RlKCRrZXlDb3VudGVyKSk7DQoJCSRrZXlDb3VudGVyID0gc2VsZjo6YmFzZTY0X3VybGVuY29kZSgka2V5Q291bnRlclJBVyk7DQoJCSR0b2tlbiA9IFNlc3Npb246OmdldEZvcm1Ub2tlbigpOw0KCQkkZG93bmxvYWRVUkwgPSBVcmk6OnJvb3QoKS4naW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9ZG93bmxvYWQuZmlsZSZrZXk9Jy4ka2V5Q291bnRlci4nJnRva2VuPScuJHRva2VuOw0KCQkvLyBjaGVjayBpZiBsb2NhbCAuaHRhY2Nlc3Mgc2hvdWxkIGJlIHNldA0KCQkkc2V0SHRhY2Nlc3MgPSBmYWxzZTsNCgkJJG9uY2xpY2sgPSAnIG9uY2xpY2s9InNlcm1vbkNvdW50ZXIoXCcnLiRrZXlDb3VudGVyUkFXLidcJyxcJ0ZJTEVOQU1FXCcpOyInOw0KCQkvLyBjaGVjayB3aGF0IHNvdXJjZSBvZiBvdXIgbGluaw0KCQlzd2l0Y2ggKCRzZXJtb24tPnNvdXJjZSkNCgkJew0KCQkJY2FzZSAxOg0KCQkJCS8vIGxvY2FsIGZpbGUgZ2V0IGxvY2FsIGZvbGRlciBhbmQgY2hlY2sgaWYgb3V0c2lkZSByb290IChpZiBub3QgdGhlbiBhbGxvdyBkaXJlY3QpDQoJCQkJJGxvY2FsRm9sZGVyID0gQ29tcG9uZW50SGVscGVyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdsb2NhbGZvbGRlcicsIEpQQVRIX1JPT1QuJy9pbWFnZXMnKS4nLyc7DQoJCQkJLy8gc2hvdWxkIHdlIGFsbG93IGRpcmVjdCBkb3dubG9hZHMNCgkJCQkkYWxsb3dEaXJlY3QgPSBmYWxzZTsNCgkJCQlpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgc3RycG9zKCRsb2NhbEZvbGRlciwgSlBBVEhfUk9PVCkgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGFsbG93RGlyZWN0ID0gdHJ1ZTsNCgkJCQkJJGxvY2FsRm9sZGVyVVJMID0gVXJpOjpyb290KCkuc3RyX3JlcGxhY2UoSlBBVEhfUk9PVCwgJycsICRsb2NhbEZvbGRlcik7DQoJCQkJCS8vIGluc3VyZSBubyBkb3VibGUgLy8gaXMgaW4gdGhlIFVSTA0KCQkJCQkkbG9jYWxGb2xkZXJVUkwgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlclVSTCk7DQoJCQkJCSRsb2NhbEZvbGRlclVSTCA9IHN0cl9yZXBsYWNlKCc6LycsICc6Ly8nLCAkbG9jYWxGb2xkZXJVUkwpOw0KCQkJCX0NCgkJCQkvLyBpbnN1cmUgbm8gZG91YmxlIC8vIGlzIGluIHRoZSBwYXRoIG5hbWUNCgkJCQkkbG9jYWxGb2xkZXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlcik7DQoJCQkJJGxvY2FsRm9sZGVyID0gc3RyX3JlcGxhY2UoJzovJywgJzovLycsICRsb2NhbEZvbGRlcik7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPmxvY2FsX2ZpbGVzKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2goJHNlcm1vbi0+bG9jYWxfZmlsZXMgYXMgJGtleSkNCgkJCQkJew0KCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlIHx8ICEkYWxsb3dEaXJlY3QpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCSRmaWxlbmFtZSA9IHNlbGY6OmdldERvd25sb2FkRmlsZU5hbWUoJHNlcm1vbiwka2V5LCdsb2NhbCcpOw0KCQkJCQkJCSRsb2NrZWRGb2xkZXJQYXRoID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGxvY2FsRm9sZGVyLiRrZXkpOw0KCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZG93bmxvYWRVUkwuJyZsaW5rPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkbG9ja2VkRm9sZGVyUGF0aCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSAnJzsNCgkJCQkJCX0NCgkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGFsbG93RGlyZWN0KQ0KCQkJCQkJew0KCQkJCQkJCSRmaWxlbmFtZSA9ICRrZXk7DQoJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRsb2NhbEZvbGRlclVSTC4ka2V5Ow0KCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCSRzZXRIdGFjY2VzcyA9IHRydWU7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlIDI6DQoJCQkJLy8gRHJvcGJveCBnZXQgZ2xvYmFsIGRyb3Bib3ggc3dpdGNoIA0KCQkJCSRhZGRUb0J1dHRvbiA9IENvbXBvbmVudEhlbHBlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnYWRkX3RvX2J1dHRvbicsIDApOw0KCQkJCWlmICgxID09ICRzZXJtb24tPmJ1aWxkKQ0KCQkJCXsNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPm1hbnVhbF9maWxlcykpDQoJCQkJCXsNCgkJCQkJCS8vIG1hbnVhbCBkcm9wYm94DQoJCQkJCQlmb3JlYWNoKCRzZXJtb24tPm1hbnVhbF9maWxlcyBhcyAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RXh0ZXJuYWxTb3VyY2VMaW5rKCdtYW51YWwnLDEsJGtleSk7DQoJCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJGtleSwnZHJvcGJveF9tYW51YWwnKTsNCgkJCQkJCQkJLy8gc2hvdWxkIHdlIGVuY3J5cHQgc3RyaW5nIHRoaXMgc3RyaW5nDQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5IHx8IChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRyb3BVUkwsIHRydWUpKSAhPT0gJGRyb3BVUkwpKSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0DQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRkcm9wVVJMID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGRyb3BVUkwpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIGxvY2sgdGhlIGluZm8ga2V5DQoJCQkJCQkJCSRpbmZvS2V5ID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGtleSk7DQoJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZG93bmxvYWRVUkwuJyZpbmZvPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkaW5mb0tleSkuJyZsaW5rPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkZHJvcFVSTCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzdHJfcmVwbGFjZSgnVkRNX3BMZUtfaDB1RXIvJywgJycsICRrZXkpOw0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldCAoc28gZG9uJ3QgZGVjcnlwdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkcm9wVVJMOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2UNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9IHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKCRkcm9wVVJMKSwgIlwwIik7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGJ1aWxkIGRyb3Bib3ggc3dpdGNoIGlmIG5lZWRlZA0KCQkJCQkJCWlmICgxID09ICRhZGRUb0J1dHRvbiAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5KSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0IChzbyBkb24ndCBkZWNyeXB0KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsICRkcm9wVVJMKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRyb3Bib3hfYnV0dG9uc1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJz9kbD0xJywgJz9kbD0wJywgcnRyaW0oJHNhZmUtPmRlY3J5cHRTdHJpbmcoJGRyb3BVUkwpLCAiXDAiKSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja19kcm9ib3hbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+YnVpbGQpDQoJCQkJew0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHNlcm1vbi0+YXV0b19zZXJtb25zKSkNCgkJCQkJew0KCQkJCQkJLy8gYXV0b21hdGljIGRyb3Bib3gNCgkJCQkJCWZvcmVhY2goJHNlcm1vbi0+YXV0b19zZXJtb25zIGFzICRmaWxlbmFtZSA9PiAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RXh0ZXJuYWxTb3VyY2VMaW5rKCdhdXRvJywxLCRrZXkpOw0KCQkJCQkJCWlmICgxID09ICRzZXJtb24tPmxpbmtfdHlwZSAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIHNob3VsZCB3ZSBlbmNyeXB0IHN0cmluZyB0aGlzIHN0cmluZw0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSB8fCAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkcm9wVVJMLCB0cnVlKSkgIT09ICRkcm9wVVJMKSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldA0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkZHJvcFVSTCA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKCRkcm9wVVJMKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBsb2NrIHRoZSBpbmZvIGtleQ0KCQkJCQkJCQkkaW5mb0tleSA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKCRrZXkpOw0KCQkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJGRvd25sb2FkVVJMLicmaW5mbz0nLnNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGluZm9LZXkpLicmbGluaz0nLnNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGRyb3BVUkwpLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWU7DQoJCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKCdsb2NhbEtleTM0ZmRXRWtsJyA9PSAkbG9jYWxrZXkpIC8vIGhtbW0gbm8gZ2xvYmFsIGtleSBoYXMgYmVlbiBzZXQgKHNvIGRvbid0IGRlY3J5cHQpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZHJvcFVSTDsNCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSBydHJpbSgkc2FmZS0+ZGVjcnlwdFN0cmluZygkZHJvcFVSTCksICJcMCIpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCQkvLyBidWlsZCBkcm9wYm94IHN3aXRjaCBpZiBuZWVkZWQNCgkJCQkJCQlpZiAoMSA9PSAkYWRkVG9CdXR0b24gJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldCAoc28gZG9uJ3QgZGVjcnlwdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZHJvcGJveF9idXR0b25zWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnP2RsPTEnLCAnP2RsPTAnLCAkZHJvcFVSTCk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJZWxzZQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsIHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKCRkcm9wVVJMKSwgIlwwIikpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tfZHJvYm94WyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlIDM6DQoJCQkJLy8gdXJsIGdldCB0aGUgZmlsZSBuYW1lIHVzZSB0aGUgc2FtZSBtZXRob2QgYXMgdGhlIGF1dG8NCgkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJHNlcm1vbi0+dXJsLCd1cmwnKTsNCgkJCQlpZiAoMSA9PSAkc2VybW9uLT5saW5rX3R5cGUpDQoJCQkJew0KCQkJCQkkbG9ja2VkVVJMID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJHNlcm1vbi0+dXJsKTsNCgkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkb3dubG9hZFVSTC4nJmxpbms9Jy5zZWxmOjpiYXNlNjRfdXJsZW5jb2RlKCRsb2NrZWRVUkwpLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWU7DQoJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlKQ0KCQkJCXsNCgkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRzZXJtb24tPnVybDsNCgkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQl9DQoJCS8vIHJlbW92ZSB0aGUgdmFsdWVzIG5vIGxvbmdlciBuZWVkZWQNCgkJdW5zZXQoJHNlcm1vbi0+bG9jYWxfZmlsZXMpOw0KCQl1bnNldCgkc2VybW9uLT5tYW51YWxfZmlsZXMpOw0KCQl1bnNldCgkc2VybW9uLT5hdXRvX3Nlcm1vbnMpOw0KCQl1bnNldCgkc2VybW9uLT51cmwpOw0KCQkvLyBzaG91bGQgd2Ugc2V0IHRoZSBsb2NhbCAuaHRhY2Nlc3MgZm9yIHRoZSBkb3dubG9hZCBmb2xkZXINCgkJaWYgKCRzZXRIdGFjY2VzcykNCgkJew0KCQkJLy8gVE9ETyB3ZSBtYXkgbmVlZCB0byBhZGQgdGhpcyBsYXR0ZXIgdG8gZW5mb3JjZSBkb3dubG9hZCBvZiBmaWxlcy4NCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5leHRVcGRhdGVWYWx1ZXMoJGFzQXJyYXkgPSBmYWxzZSkNCgl7DQoJCS8vIGZpbmQgdGhlIG5leHQgdmFsdWUNCgkJJG5leHQgPSBmYWxzZTsNCgkJLy8gZ2V0IGFjdHVhbCB1cGRhdGUgdmFsdWVzDQoJCSR1cGRhdGVzID0gc2VsZjo6Z2V0RXh0ZXJuYWxMaXN0aW5nVXBkYXRlS2V5cygpOw0KCQkvLyBnZXQgbGFzdCB1cGRhdGUNCgkJJHVwZGF0ZVBhdGggPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRQYXRoKCdwYXRoJywgJ3VwZGF0ZWxhc3QnLCAndHh0JywgJ3ZEbScsIEpQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SKTsNCgkJaWYgKCgkbGFzdFVwZGF0ZSA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldENvbnRlbnQoJHVwZGF0ZVBhdGgsIEZBTFNFKSkgIT09IEZBTFNFICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR1cGRhdGVzKSkNCgkJew0KCQkJLy8gaXMgaXQgdGltZSB0byB3YXRjaA0KCQkJaWYgKHNlbGY6OiR1cGRhdGVXYXRjaF8gPiAwKQ0KCQkJew0KCQkJCS8vIGluY3JlbWVudCB0aGUgd2F0Y2gsIGFzIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIG5ldyByb3VuZA0KCQkJCXNlbGY6OiR1cGRhdGVXYXRjaCsrOw0KCQkJCS8vIG5ldyByb3VuZCBoYXMgc3RhcnRlZA0KCQkJCXNlbGY6OiR1cGRhdGVXYXRjaF8gPSAwOw0KCQkJfQ0KCQkJLy8gbm93IGNoZWNrIHdoYXQgaXMgbmV4dA0KCQkJJGxhc3RLZXkgPSBhcnJheV9zZWFyY2goJGxhc3RVcGRhdGUsICR1cGRhdGVzKTsNCgkJCWlmICghaXNfbnVsbCgkbGFzdEtleSkpDQoJCQl7DQoJCQkJJG5leHRLZXkgPSAkbGFzdEtleSArIDE7DQoJCQkJaWYgKGlzc2V0KCR1cGRhdGVzWyRuZXh0S2V5XSkpDQoJCQkJew0KCQkJCQkkbmV4dCA9ICR1cGRhdGVzWyRuZXh0S2V5XTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gbGFzdCBpdGVtIGluIGFycmF5LCBzbyBuZXh0IHJvdW5kIGFib3V0IHRvIHN0YXJ0DQoJCQkJCXNlbGY6OiR1cGRhdGVXYXRjaF8rKzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gcmVzdCBhbmQgc3RhcnQgd2l0aCB0aGUgZmlyc3Qga2V5DQoJCWlmICghJG5leHQgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHVwZGF0ZXMpKQ0KCQl7DQoJCQkvLyBzYXZlIHRoZSBmaXJzdCBzZXQNCgkJCSRzdGFydCA9IHJlc2V0KCR1cGRhdGVzKTsNCgkJCSRuZXh0ID0gJHN0YXJ0Ow0KCQl9DQoJCS8vIHNhdmUgdG8gZmlsZSBpZiBuZXh0IGlzIGZvdW5kDQoJCWlmICgkbmV4dCkNCgkJew0KCQkJU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6d3JpdGUoJHVwZGF0ZVBhdGgsJG5leHQpOw0KCQkJLy8gY29udmVydCB0byBhcnJheSBvZiBuZWVkZWQNCgkJCWlmICgkYXNBcnJheSkNCgkJCXsNCgkJCQlpZiAoc3RycG9zKCRuZXh0LCAnLCcpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRuZXh0ID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsICRuZXh0KSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRuZXh0Ow0KCX0NCltDVVNUT01DT0RFPWdldEZpbGVQYXRoXQ0KW0NVU1RPTUNPREU9d3JpdGVGaWxlXQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2F2ZUZpbGUoJGRhdGEsICRwYXRoX2ZpbGVuYW1lKQ0KCXsNCgkJcmV0dXJuIFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OndyaXRlKCRwYXRoX2ZpbGVuYW1lLCAkZGF0YSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFeHRlcm5hbExpc3RpbmdVcGRhdGVLZXlzKCRpZCA9IG51bGwsICR1cGRhdGVNZXRob2QgPSAyLCAkcmV0dXJuVHlwZSA9IDEpDQoJew0KCQkvLyBmaXJzdCBjaGVjayBpZiB0aGlzIGZpbGUgYWxyZWFkeSBoYXMgc3RhdGlzdGljcw0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2lkJywnc2hhcmVkdXJsJywnZm9sZGVyJywncGVybWlzc2lvbnR5cGUnLCdkcm9wYm94b3B0aW9ucycsJ2J1aWxkJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fZXh0ZXJuYWxfc291cmNlJykpOw0KCQlpZiAoJHVwZGF0ZU1ldGhvZCAmJiBpc19udW1lcmljKCR1cGRhdGVNZXRob2QpKQ0KCQl7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCd1cGRhdGVfbWV0aG9kJykgLiAnID0gJy4gKGludCkgJHVwZGF0ZU1ldGhvZCk7DQoJCX0NCgkJaWYgKCRpZCAmJiBpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJy4gKGludCkgJGlkKTsNCgkJfQ0KCQllbHNlaWYgKCRpZCAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWQpKQ0KCQl7DQoJCQkkaWRzID0gaW1wbG9kZSgnLCcsIGFycmF5X21hcCggJ2ludHZhbCcsICRpZCkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgSU4gICgnIC4gJGlkcyAuICcpJyk7DQoJCX0NCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHVibGlzaGVkJykgLiAnID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCSRyZXN1bHRzID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJJHVwZGF0ZXMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJHJlc3VsdHMgYXMgJHJlc3VsdCkNCgkJCXsNCgkJCQlpZiAoJ2Z1bGwnID09ICRyZXN1bHQtPnBlcm1pc3Npb250eXBlKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCBmb2xkZXIgb3IgdXJscw0KCQkJCQlzd2l0Y2ggKCRyZXN1bHQtPmRyb3Bib3hvcHRpb25zKQ0KCQkJCQl7DQoJCQkJCQljYXNlIDE6IC8vIHNoYXJlZHVybA0KCQkJCQkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0LT5zaGFyZWR1cmwpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRhcmdldHMgPSBqc29uX2RlY29kZSgkcmVzdWx0LT5zaGFyZWR1cmwpLT50c2hhcmVkdXJsOw0KCQkJCQkJCX0NCgkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAyOiAvLyBmb2xkZXJzDQoJCQkJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRyZXN1bHQtPmZvbGRlcikpDQoJCQkJCQkJew0KCQkJCQkJCQkkdGFyZ2V0cyA9IGpzb25fZGVjb2RlKCRyZXN1bHQtPmZvbGRlciktPnRmb2xkZXI7DQoJCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0YXJnZXRzKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCAoJHRhcmdldHMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQkJCQl7DQoJCQkJCQkJJG5yID0gJGtleSArIDE7DQoJCQkJCQkJLy8gaWQsIHRhcmdldCwgdHlwZQ0KCQkJCQkJCWlmICgxID09ICRyZXR1cm5UeXBlKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHVwZGF0ZXNbXSA9ICRyZXN1bHQtPmlkIC4gJywgJy4gJG5yIC4gJywgJyAuICRyZXN1bHQtPmJ1aWxkOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlIC8vIG9ubHkgcmV0dXJuIHRoZSB0YXJnZXRzDQoJCQkJCQkJew0KCQkJCQkJCQkkdXBkYXRlc1tdID0gJG5yOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkvLyBpZCwgdGFyZ2V0LCB0eXBlDQoJCQkJCWlmICgxID09ICRyZXR1cm5UeXBlKQ0KCQkJCQl7DQoJCQkJCQkkdXBkYXRlc1tdID0gJHJlc3VsdC0+aWQgLiAnLCAxLCAnLiAkcmVzdWx0LT5idWlsZDsNCgkJCQkJfQ0KCQkJCQllbHNlIC8vIG9ubHkgcmV0dXJuIHRoZSB0YXJnZXRzDQoJCQkJCXsNCgkJCQkJCSR1cGRhdGVzW10gPSAxOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICR1cGRhdGVzOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV4dGVybmFsU291cmNlTGluaygkdHlwZSwgJHJldHVybiA9IDcsICRnZXQgPSBmYWxzZSwgJHRhcmdldCA9ICdsaW5rcycpDQoJew0KCQkvLyBtYWtlIHN1cmUgYWxsIGRlZmF1bHRzIGFyZSBzZXQNCgkJJGZvdW5kID0gc2VsZjo6Y2hlY2tFeHRlcm5hbFNvdXJjZUxvY2FsTGlzdGluZygkdHlwZSwgJHRhcmdldCk7DQoJCWlmICgkZm91bmQpDQoJCXsNCgkJCXN3aXRjaCgkcmV0dXJuKQ0KCQkJew0KCQkJCWNhc2UgMToNCgkJCQkJLy8gcmV0dXJuIGEgbGluaw0KCQkJCQlpZiAoaXNzZXQoc2VsZjo6JHskdGFyZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX1bJGdldF0pKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gc2VsZjo6JHskdGFyZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX1bJGdldF07DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAyOg0KCQkJCQkvLyByZXR1cm4gYWxsIGxpbmtzDQoJCQkJCXJldHVybiBzZWxmOjokeyR0YXJnZXQuJ19leHRlcm5hbHNvdXJjZV8nLiR0eXBlfTsNCgkJCQkJYnJlYWs7DQoJCQkJZGVmYXVsdCA6DQoJCQkJCS8vIGp1c3QgY29uZmlybSB0aGF0IGl0IGlzIHNldA0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY291bnREb3dubG9hZCgkY291bnRlciwgJGZpbGVuYW1lKQ0KCXsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkkb3BlbmVyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAxMjgpOw0KCQkkY291bnRlciA9IGpzb25fZGVjb2RlKHJ0cmltKCRvcGVuZXItPmRlY3J5cHRTdHJpbmcoJGNvdW50ZXIpLCAiXDAiKSk7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY291bnRlcikpDQoJCXsNCgkJCSRjb3VudGVyLT5maWxlbmFtZSA9ICRmaWxlbmFtZTsNCgkJCS8vIHNldCB0aGUgZGF0ZSBvYmplY3QNCgkJCSRkYXRlID0gRmFjdG9yeTo6Z2V0RGF0ZSgpOw0KCQkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBmaWxlIGFscmVhZHkgaGFzIHN0YXRpc3RpY3MNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcsJ2NvdW50ZXInKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc2VybW9uJykgLiAnID0gJy4gKGludCkgJGNvdW50ZXItPnNlcm1vbik7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdmaWxlbmFtZScpIC4gJyA9ICcuICRkYi0+cXVvdGUoJGNvdW50ZXItPmZpbGVuYW1lKSk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkc3RhdGlzdGljID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJLy8gYWxyZWFkeSBoYXMgYW4gZW50cnkNCgkJCQkkc3RhdGlzdGljLT5jb3VudGVyKys7DQoJCQkJJHN0YXRpc3RpYy0+bW9kaWZpZWQgPSAkZGF0ZS0+dG9TcWwoKTsNCgkJCQkvLyB1cGRhdGUgdGhlIGVudHJ5DQoJCQkJcmV0dXJuICRkYi0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJHN0YXRpc3RpYywgJ2lkJyk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IGEgbmV3IGVudHJ5DQoJCQkJJGNvdW50ZXItPmNvdW50ZXIgPSAxOw0KCQkJCSRjb3VudGVyLT5wdWJsaXNoZWQgPSAxOw0KCQkJCSRjb3VudGVyLT5jcmVhdGVkID0gJGRhdGUtPnRvU3FsKCk7DQoJCQkJJGNvdW50ZXItPmFjY2VzcyA9IDE7DQoJCQkJJGNvdW50ZXItPnZlcnNpb24gPSAxOw0KCQkJCS8vIHNldCBhIG5ldyBlbnRyeQ0KCQkJCSRkb25lID0gJGRiLT5pbnNlcnRPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9zdGF0aXN0aWMnLCAkY291bnRlcik7DQoJCQkJLy8gaWYgZG9uZSByZXR1cm4gbGFzdCB1c2VkIGlkDQoJCQkJaWYgKCRkb25lKQ0KCQkJCXsNCgkJCQkJJG5ld0lkID0gICRkYi0+aW5zZXJ0aWQoKTsNCgkJCQkJLy8gbWFrZSBzdXJlIHRoZSBhY2Nlc3Mgb2YgYXNzZXQgaXMgc2V0DQoJCQkJCXJldHVybiBzZWxmOjpzZXRBc3NldCgkbmV3SWQsJ3N0YXRpc3RpYycpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWxlSW5mbygka2V5KQ0KCXsNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRrZXkpICYmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGtleSwgdHJ1ZSkpID09PSAka2V5KSkNCgkJew0KCQkJLy8gR2V0IGxvY2FsIGtleQ0KCQkJJGxvY2Fsa2V5ID0gc2VsZjo6Z2V0TG9jYWxLZXkoKTsNCgkJCSRvcGVuZXIgPSBuZXcgU3VwZXJfX185OTE3NWY2ZF9kYmE4XzQwODZfOGE2NV81YzRlYzE3NWU2MWRfX19Qb3dlcigkbG9jYWxrZXksIDEyOCk7DQoJCQkka2V5ID0gcnRyaW0oJG9wZW5lci0+ZGVjcnlwdFN0cmluZygka2V5KSwgIlwwIik7DQoJCQkvLyBsb2FkIHRoZSBsaW5rcyBmcm9tIHRoZSBkYXRhYmFzZQ0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCdzaXplJyk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9sb2NhbF9saXN0aW5nJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgna2V5JykgLiAnID0gJy4gJGRiLT5xdW90ZSgka2V5KSk7DQogCQkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJGluZm8gPSBhcnJheSgpOw0KCQkJCS8vIGdldCB0aGUgc2l6ZSBvZiB0aGUgZmlsZQ0KCQkJCSRpbmZvWydmaWxlc2l6ZSddID0gJGRiLT5sb2FkUmVzdWx0KCk7DQoJCQkJLy8gZ2V0IHRoZSBtaW1lIHR5cGUNCgkJCQkkaW5mb1sndHlwZSddID0gU3VwZXJfX19mMTFkYzc5MF83MTNlXzQ3MDZfOWE4NV9hMzE4ZWQzYWQ1NmVfX19Qb3dlcjo6bWltZVR5cGUoJGtleSk7DQoJCQkJLy8gcmV0dXJuIGluZm8NCgkJCQlyZXR1cm4gJGluZm87DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RG93bmxvYWRGaWxlTmFtZSgmJHNlcm1vbiwgJGZpbGUsICR0eXBlKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IGZpbGUgbmFtZSBhbmQgZmlsZSB0eXBlDQoJCSRmaWxlID0gc3RyX3JlcGxhY2UoJ1ZETV9wTGVLX2gwdUVyLycsICcnLCAkZmlsZSk7DQoJCSRmaWxlVHlwZSA9IHBhdGhpbmZvKCRmaWxlLCBQQVRISU5GT19FWFRFTlNJT04pOw0KCQlpZiAoJGZpbGVUeXBlKQ0KCQl7DQoJCQkkZmlsZSA9IHN0cl9yZXBsYWNlKCcuJy4kZmlsZVR5cGUsICcnLCAkZmlsZSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkZmlsZVR5cGUgPSAnZXJyb3InOw0KCQl9DQoJCS8vIG5vdyBidWlsZCBkb3dubG9hZCBuYW1lDQoJCSRkb3dubG9hZE5hbWUgPSBhcnJheSgpOw0KCQkvLyBidWlsZCB0aGUgRG93bmxvYWQgRmlsZSBOYW1lIC0gZmlyc3QgYWRkIHRoZSBwcmVhY2hlciBuYW1lIGlmIHNldA0KCQlpZiAoJHNlcm1vbi0+cHJlYWNoZXIpDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+cHJlYWNoZXJfbmFtZSwnVScpOw0KCQl9DQoJCS8vIGFkZCB0aGUgc2VyaWVzIG5hbWUgaWYgc2V0DQoJCWlmICgkc2VybW9uLT5zZXJpZXMpDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+c2VyaWVzX25hbWUsJ0YnKTsNCgkJfQ0KCQkvLyBhZGQgdGhlIGNhdGVnb3J5IG5hbWUgaWYgc2V0DQoJCWlmICgkc2VybW9uLT5jYXRpZCAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc2VybW9uLT5jYXRlZ29yeSkpDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+Y2F0ZWdvcnksICdGJyk7DQoJCX0NCgkJaWYgKCdkcm9wYm94X21hbnVhbCcgPT0gJHR5cGUgfHwgJ2xvY2FsJyA9PSAkdHlwZSkNCgkJew0KCQkJLy8gYWRkIHRoZSBtYWluIGZpbGUgbmFtZQ0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2VybW9uLT5uYW1lLCdGJyk7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRmaWxlLCdGJyk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZXJtb24tPm5hbWUsJ0YnKTsNCgkJCWlmICgnZXJyb3InID09ICRmaWxlVHlwZSB8fCBzdHJwb3MoJz8nLCAkZmlsZVR5cGUpICE9PSBmYWxzZSB8fCBzdHJwb3MoJyYnLCAkZmlsZVR5cGUpICE9PSBmYWxzZSApDQoJCQl7DQoJCQkJJGZpbGVUeXBlID0gJ21wMyc7IC8vIFRPRE8gd2UgZG9uJ3Qga25vdyB0aGUgdXJsIGZpbGV0eXBlIChzZXR0aW5nIHRvIG1wMyBidXQgdGhpcyBjb3VsZCBiZSB3cm9uZykNCgkJCX0NCgkJfQ0KCQkvLyBub3cgYnVpbGQgdGhlIGRvd25sb2FkIGZpbGUgbmFtZQ0KCQlyZXR1cm4gaW1wbG9kZSgnX18nLCAkZG93bmxvYWROYW1lKS4nLicuJGZpbGVUeXBlOw0KCX0NCg0KCS8qKg0KCSogCWNoZWNrIEV4dGVybmFsIFNvdXJjZSBMb2NhbCBMaXN0aW5nIChkbyB3ZSBoYXZlIHRoZSBmaWxlcykNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrRXh0ZXJuYWxTb3VyY2VMb2NhbExpc3RpbmcoJHR5cGUsICRnZXQgPSAnbGlua3MnKQ0KCXsNCgkJLy8gZ2V0IHRoZSBsb2NhbCBsaW5rcw0KCQlpZiAoaXNzZXQoc2VsZjo6JHskZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR7JGdldC4nX2V4dGVybmFsc291cmNlXycuJHR5cGV9KSkNCgkJew0KCQkJLy8gcmV0dXJuIHRydWUgd2UgaGF2ZSBsaW5rcyBsb2FkZWQNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRhcmdldCA9IGFycmF5KCdsaW5rcycgPT4gJ3VybCcsICdzZWxlY3QnID0+ICduYW1lJyk7DQoJCQkkYnVpbGQgPSBhcnJheSggJ2F1dG8nID0+IDIsICdtYW51YWwnID0+IDEpOw0KCQkJaWYgKGlzc2V0KCRidWlsZFskdHlwZV0pKQ0KCQkJew0KCQkJCS8vIGxvYWQgdGhlIGxpbmtzIGZyb20gdGhlIGRhdGFiYXNlDQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdrZXknLCAkdGFyZ2V0WyRnZXRdKSkpOw0KCQkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2xvY2FsX2xpc3RpbmcnKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYnVpbGQnKSAuICcgPSAnLiAoaW50KSAkYnVpbGRbJHR5cGVdKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwdWJsaXNoZWQnKSAuICcgPSAxJyk7IC8vIFRPRE8gd2UgY2FuIG5vdyBsaW1pdCB0aGUgbGlua3MgdG8gYWNjZXNzIGdyb3Vwcw0KIAkJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiR7JGdldC4nX2V4dGVybmFsc291cmNlXycuJHR5cGV9ID0gJGRiLT5sb2FkQXNzb2NMaXN0KCdrZXknLCAkdGFyZ2V0WyRnZXRdKTsNCgkJCQkJLy8gcmV0dXJuIHRydWUgd2UgaGF2ZSBsaW5rcyBsb2FkZWQNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgdGhlIGxvY2Fsa2V5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9jYWxrZXkgPSBhcnJheSgpOw0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TG9jYWxLZXkoJHR5cGUgPSAnYmFzaWNfa2V5JykNCgl7DQoJCWlmICghaXNzZXQoc2VsZjo6JGxvY2Fsa2V5WyR0eXBlXSkpDQoJCXsNCgkJCS8vIGdldCB0aGUgbWFpbiBrZXkNCgkJCXNlbGY6OiRsb2NhbGtleVskdHlwZV0gPSBDb21wb25lbnRIZWxwZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJHR5cGUsICdsb2NhbEtleTM0ZmRXRWtsJyk7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRsb2NhbGtleVskdHlwZV07DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVFeHRlcm5hbFNvdXJjZSgkaWQsICR0YXJnZXQgPSAwLCAkdHlwZSA9IGZhbHNlLCAkZm9yY2UgPSBmYWxzZSwgJHNsZXV0ZWwgPSBudWxsKQ0KCXsNCgkJJHNvdXJjZSA9IHNlbGY6OmdldFZhcignZXh0ZXJuYWxfc291cmNlJywgKGludCkgJGlkLCAnaWQnLCAnZXh0ZXJuYWxzb3VyY2VzJyk7DQoJCWlmICgxID09ICRzb3VyY2UpIC8vIERyb3Bib3ggaXMgdGhlIHNvdXJjZQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBmaWxlDQoJCQlKTG9hZGVyOjppbXBvcnQoJ2Ryb3Bib3h1cGRhdGVyJywgSlBBVEhfQ09NUE9ORU5UX1NJVEUuJy9oZWxwZXJzJyk7DQoJCQkvLyB1cGRhdGUgdHlwZXMNCgkJCSR0eXBlcyA9IGFycmF5KCdtYW51YWwnLCdhdXRvJyk7DQoJCQkvLyBva2F5IG5vdyB1cGRhdGUgdGhpcyB0eXBlDQoJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHR5cGUpICYmIGluX2FycmF5KCR0eXBlLCR0eXBlcykpDQoJCQl7DQoJCQkJJGRyb3Bib3ggPSBuZXcgRHJvcGJveHVwZGF0ZXIoKTsNCgkJCQlpZiAoJGRyb3Bib3gtPnVwZGF0ZSgkaWQsICR0YXJnZXQsICR0eXBlLCAkZm9yY2UsICRzbGV1dGVsKSkNCgkJCQl7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCQlzZWxmOjpzZXRVcGRhdGVFcnJvcigkaWQsICRkcm9wYm94LT5nZXRFcnJvcnMoKSk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJCXNlbGY6OnNldFVwZGF0ZUVycm9yKCRpZCwgYXJyYXkoVGV4dDo6XygnVGhlIGV4dGVybmFsIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQuJykpKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U291cmNlU3RhdHVzKCRpZCkNCgl7DQoJCS8vIGZpc3QgZ2V0IGVycm9ycyBpZiBhbnkgaXMgZm91bmQNCgkJJGVycm9ycyA9IGFycmF5KCk7DQoJCWlmICgkdGFyZ2V0cyA9IHNlbGY6OmdldEV4dGVybmFsTGlzdGluZ1VwZGF0ZUtleXMoJGlkLCBudWxsLCAxKSkNCgkJew0KCQkJZm9yZWFjaCAoJHRhcmdldHMgYXMgJHRhcmdldCkNCgkJCXsNCgkJCQkka2V5ID0gcHJlZ19yZXBsYWNlKCcvWyAsXSsvJywgJycsIHRyaW0oJHRhcmdldCkpOw0KCQkJCWlmICgkZXJyb3IgPSBzZWxmOjpnZXRVcGRhdGVFcnJvcigwLCAka2V5KSkNCgkJCQl7DQoJCQkJCSRlcnJvcnNbXSA9ICRlcnJvcjsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gY2hlY2sgd2hlbiB3YXMgdGhlIGxhc3QgdXBkYXRlDQoJCSR1cGRhdGVJbmZvID0gc2VsZjo6dXBkYXRlSW5mbygkaWQpOw0KCQlpZiAoISR1cGRhdGVJbmZvKQ0KCQl7DQoJCQkkZXJyb3JzW10gPSBUZXh0OjpfKCdUaGlzIHNvdXJjZSBoYXMgbm8gbG9jYWwgbGlzdGluZyBzZXQuJyk7DQoJCX0NCgkJLy8gYnVpbGQgdGhlIHJldHVybiBzdHJpbmcNCgkJaWYgKGlzc2V0KCR1cGRhdGVJbmZvWydsYXN0J10pIHx8IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRlcnJvcnMpKQ0KCQl7DQoJCQkkYm9keSA9IGFycmF5KCk7DQoJCQkvLyBncmVhdCB3ZSBoYXZlIHNvdXJjZSBzdGF0dXMNCgkJCWlmIChpc3NldCgkdXBkYXRlSW5mb1snbGFzdCddKSkNCgkJCXsNCgkJCQkkYm9keVtdID0gJzxoMz4nLiBUZXh0OjpfKCdMaXN0aW5nIEluZm8nKSAuICc8L2gzPic7DQoJCQkJJGJvZHlbXSA9ICc8cD48Yj4nLiBUZXh0OjpfKCdMYXN0IFVwZGF0ZScpIC4gJzo8L2I+IDxlbT4nLiR1cGRhdGVJbmZvWydsYXN0J107DQoJCQkJJGJvZHlbXSA9ICc8L2VtPjxiciAvPjxiPicuIFRleHQ6Ol8oJ051bWJlciBvZiBGaWxlcyBMaXN0ZWQnKSAuICc6PC9iPiA8ZW0+Jy4kdXBkYXRlSW5mb1sncXR5J107DQoJCQkJJGJvZHlbXSA9ICc8L2VtPjwvcD4nOw0KCQkJfQ0KCQkJLy8gbm93IHNldCBhbnkgZXJyb3JzIGZvdW5kDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGVycm9ycykpDQoJCQl7DQoJCQkJJGJvZHlbXSA9ICc8aDM+Jy4gVGV4dDo6XygnTm90aWNlIScpIC4gJzwvaDM+JzsNCgkJCQkkYm9keVtdID0gaW1wbG9kZSgnJywgJGVycm9ycyk7DQoJCQl9DQoJCQlyZXR1cm4gJzxhIGNsYXNzPSJidG4gYnRuLXNtYWxsIGJ0bi1zdWNjZXNzIiBocmVmPSIjc291cmNlLXN0YXR1cycuJGlkLiciIGRhdGEtdG9nZ2xlPSJtb2RhbCI+Jy5UZXh0OjpfKCdWaWV3IFVwZGF0ZSBTdGF0dXMnKS4nPC9hPicgDQoJCQkJLiBIdG1sOjpfKCdib290c3RyYXAucmVuZGVyTW9kYWwnLCAnc291cmNlLXN0YXR1cycuJGlkLCBhcnJheSgndGl0bGUnID0+IFRleHQ6Ol8oJ1NvdXJjZSBTdGF0dXMgUmVwb3J0LicpKSwgaW1wbG9kZSgnJywgJGJvZHkpKTsNCgkJfQ0KIAkJLy8gbm8gc3RhdHVzIGZvdW5kDQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZUluZm8oJGlkKQ0KCXsNCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLmNyZWF0ZWQnLCdhLm1vZGlmaWVkJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbG9jYWxfbGlzdGluZycsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmV4dGVybmFsX3NvdXJjZScpIC4gJyA9ICcgLiAoaW50KSAkaWQpOw0KIAkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJHF0eSA9ICRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkZGF0YSA9ICRkYi0+bG9hZFJvd0xpc3QoKTsNCgkJCSRsYXN0ID0gMDsNCgkJCWZvcmVhY2ggKCRkYXRhIGFzICRkYXRlcykNCgkJCXsNCgkJCQlmb3JlYWNoICgkZGF0ZXMgYXMgJGRhdGUpDQoJCQkJew0KCQkJCQkkdGltZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCQkJCWlmICgkdGltZSA+ICRsYXN0KQ0KCQkJCQl7DQoJCQkJCQkkbGFzdCA9ICR0aW1lOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJJGluZm9bJ3F0eSddID0gKGludCkgJHF0eTsNCgkJCSRpbmZvWydsYXN0J10gPSBzZWxmOjpmYW5jeURhdGUoJGxhc3QpOw0KCQkJcmV0dXJuICRpbmZvOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVwZGF0ZUVycm9yKCRpZCwgJGZpbGVLZXkgPSBudWxsKQ0KCXsNCgkJLy8gZ2V0IHVwZGF0ZSBlcnJvciBmcm9tIGZpbGUNCgkJaWYgKCRmaWxlS2V5KQ0KCQl7DQoJCQkkZmlsZV9wYXRoID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0UGF0aCgncGF0aCcsICd1cGRhdGVlcnJvcicsICd0eHQnLCAkZmlsZUtleSwgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IpOw0KCQkJLy8gY2hlY2sgaWYgaXQgaXMgc2V0DQoJCQlpZiAoKCR0ZXh0ID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0Q29udGVudCgkZmlsZV9wYXRoLCBGQUxTRSkpICE9PSBGQUxTRSkNCgkJCXsNCgkJCQkvLyBubyBlcnJvciBvbiBzdWNjZXNzDQoJCQkJaWYgKCdzdWNjZXNzJyAhPSAkdGV4dCkNCgkJCQl7DQoJCQkJCXJldHVybiAkdGV4dDsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJZWxzZWlmIChpc3NldChzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkpDQoJCXsNCgkJCXJldHVybiAnPHVsPjxsaT4nLmltcGxvZGUoJzwvbGk+PGxpPicsIHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkuJzwvbGk+PC91bD4nOw0KCQl9DQoJCXJldHVybiBUZXh0OjpfKCdVbmtub3duIGVycm9yIGhhcyBvY2N1cnJlZC4nKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFVwZGF0ZUVycm9yKCRpZCwgJGVycm9yQXJyYXkpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGVycm9yQXJyYXkpICYmICRpZCA+IDApDQoJCXsNCgkJCWZvcmVhY2ggKCRlcnJvckFycmF5IGFzICRlcnJvcikNCgkJCXsNCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkpDQoJCQkJew0KCQkJCQlzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0gPSBhcnJheSgpOw0KCQkJCX0NCgkJCQlzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF1bXSA9ICRlcnJvcjsNCgkJCX0NCgkJfQ0KCX0NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQpbQ1VTVE9NQ09ERT1jdXJsV29ya2VySGVscGVyXQ0KW0NVU1RPTUNPREU9bG9ja2VyXQ==', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvY2hyaXN0aWFuL0pvb21sYS1TZXJtb24tRGlzdHJpYnV0b3IvcmF3L2JyYW5jaC9tYXN0ZXIvYWRtaW4vYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KVGhlIGJlc3Qgd2F5IHRvIHNlZSBhbGwgeW91ciBvcHRpb25zIGlzIHRvIGluc3RhbGwgdGhpcyBjb21wb25lbnQgb24geW91IEpvb21sYSB3ZWJzaXRlIGFuZCB0ZXN0IGFsbCBmZWF0dXJlcyB5b3Vyc2VsZi4gSGVyZSBpcyBhIFtkaXJlY3QgZG93bmxvYWQgbGlua10oaHR0cHM6Ly9naXQudmRtLmRldi9jaHJpc3RpYW4vSm9vbWxhLVNlcm1vbi1EaXN0cmlidXRvci9hcmNoaXZlL21hc3Rlci56aXApDQoNCiAqKklmIHlvdSBsaWtlIG91ciBjb21wb25lbnQgcGxlYXNlIHJhdGUgaXQgb24gdGhlIFtKb29tbGEgSW5kZXhdKGh0dHA6Ly9leHRlbnNpb25zLmpvb21sYS5vcmcvZXh0ZW5zaW9ucy9leHRlbnNpb24vbGl2aW5nL3JlbGlnaW9uL3Nlcm1vbi1kaXN0cmlidXRvcikqKg0KDQojIyMgRXhhbXBsZSBXZWJzaXRlLCBUaGF0IEhhcyBPdmVyIDYwMDAgQXVkaW8gRmlsZXMNCg0KW0xvdWRWb2ljZS5vcmddKGh0dHA6Ly93d3cubG91ZHZvaWNlLm9yZykNCltUcnVlQ2hyaXN0aWFuLkNodXJjaF0oaHR0cHM6Ly90cnVlY2hyaXN0aWFuLmNodXJjaC8pDQoNCiMjIyBTb21lIFZpZGVvIERlbW9uc3RyYXRpb25zDQoNCisgW1NldHVwIG92ZXJ2aWV3XShodHRwczovL3lvdXR1LmJlL3lNUHAxQ3AzV18wP3Q9MjBtOHMpDQorIFtTZXR1cCBEcm9wYm94XShodHRwczovL3lvdXR1LmJlL2J0cEtGRGswLWRJKQ0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCg0KIyMgQnVpbGQgVGltZSA6aG91cmdsYXNzOg0KDQoqKiMjI3RvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI3RvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKiAoYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzYXZlZCAtDQpkdWUgdG8gW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8p', 1, '', 'A sermon distributor that links to Dropbox.', '', '', 'SermonDistributor (public) J4', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', '', 2, 'https://git.vdm.dev/christian/Joomla-Sermon-Distributor/raw/branch/4.x/sermondistributor_update_server.xml', 'https://www.vdm.io/', '', 'CTe2AYh1RvzNnJ5tek4WGInU9PnFW5UVgUE6+8jwUds=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_site_helper\":[]}}', 1, 22, '', 1, 51), +(84, '', 1, '', '', '', 1, '', '', '', 1, '', 1, '', '', 1, 1, 1, 1, '', 1, '', '', 1, '', 1, '{\"addcontributors0\":{\"name\":\"CrossWire\",\"title\":\"Modules\",\"email\":\"sword-support@crosswire.org\",\"website\":\"https:\\/\\/wiki.crosswire.org\\/\",\"use\":\"2\",\"show\":\"3\"}}', 3, 1, 3, 2, 'Llewellyn van der Merwe', '/var/www/getbible_j5', 'getBible.txt', '', '', 'Vast Development Method', '5.0.12', 'Copyright (C) 2015. All Rights Reserved', '2015-12-03 01:42:15', '', '0XN4CcxFXCsxCXgMFjh2D0Dwqdy1AIqsbGC0LVszx2Q=', 'I6X7uvf/xn8zG2BHZx2oLsXwWfr4JG4DreGhyvNZFg8=', '', 'VDSl2o9iyJbk2J9aJCjxhYrp/G6JqRZkevdNX894bNc=', '', '', '', 1, '', 'Welcome to the next level of scripture engagement - The Bible for Joomla! Our purpose is to bring the Word of God to every person, in their native language, entirely free. This isn\'t just a typical extension; it\'s a groundbreaking tool developed to span language divides and deliver a rich, customizable Bible study experience to users worldwide.\r\n\r\nWith an impressive array of 80 translations, our Joomla extension allows people from all corners of the globe to read, comprehend, and meditate on the Holy Scriptures in their preferred language. Moreover, we offer the unique opportunity for individuals to host the Bible on their own website, further extending the reach of the Word.\r\n\r\nWe\'ve integrated robust features such as note-taking, tagging, and a search function, to enhance your interaction with the Scriptures. This allows users to immerse themselves in the text, crafting a personal journey through the Bible that can be revisited in future sessions. Furthermore, our innovative linker system assigns each visitor a unique identifier (GUID) - no login required. This means you can create notes, select favorite verses, and even share sessions, while maintaining control over your personalized content.\r\n\r\nA distinctive feature of our application is the integration with OpenAI. This advanced capability allows website owners to create custom prompts to interact with OpenAI using text from any translation. This function allows you to ask questions, gain clarity, and deepen your understanding of the Scriptures in an engaging and user-friendly manner.\r\n\r\nIn essence, The Bible for Joomla is designed to transform how the Word of God is shared, studied, and comprehended. Its comprehensive features, combined with a user-friendly interface, make it an essential tool for individuals, churches, and website owners alike. Join us on this journey of faith as we make the wisdom and guidance of the Scriptures accessible to all, one verse, one language, and one website at a time.', 'joomla@vdm.io', '', 'https://vdm.bz/get-bible', 'rPFLeDAp4QRfwLLtJwZnujlR11b2sDDB4wJQVzYSAbU=', '/var/git_', 'bbe46e21-60a6-4fb2-8010-97f30d01472d', 'images/getBible.jpg', '', 'https://git.vdm.dev/getBible/joomla-component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2024-04-25 15:35:17', '', 'Get Bible', 'Getbible', 'TrueChristianChurch', 4, '', '', 'CS8qKg0KCSAqIExvYWQgdGhlIHNjcmlwdHVyZSBpbnRvIGNvbnRlbnQNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICYkcm93ICAgICBUaGUgYXJ0aWNsZSBvYmplY3QuICBOb3RlICRhcnRpY2xlLT50ZXh0IGlzIGFsc28gYXZhaWxhYmxlDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJHBsdWdpbiAgIFRoZSBwbHVnaW4gcGFyYW1zDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgMi4wLjENCgkgKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkU2NyaXB0dXJlKG9iamVjdCAmJHJvdywgb2JqZWN0ICRwbHVnaW4pOiB2b2lkDQoJew0KCQkvLyBnZXQgY2FsbCBzdHJpbmcNCgkJJGNhbGxfY2xhc3MgPSAkcGx1Z2luLT5nZXQoJ2NhbGxfY2xhc3MnLCAnZ2V0QmlibGUnKTsNCg0KCQkvLyBTaW1wbGUgcGVyZm9ybWFuY2UgY2hlY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYm90IHNob3VsZCBwcm9jZXNzIGZ1cnRoZXINCgkJaWYgKHN0cnBvcygkcm93LT50ZXh0LCAkY2FsbF9jbGFzcykgPT09IGZhbHNlKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlTdXBlcl9fXzExODkyY2ZhXzM3NGVfNGUzZl9iMGJjXzUzMTg3MWM4MjJkOV9fX1Bvd2VyOjpfKCdHZXRCaWJsZS5Mb2FkZXInKS0+c2V0KCRyb3csICRwbHVnaW4pOw0KCX0=', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9Z2V0QmlibGVSZW1vdmVPbGRMaWJdDQpbQ1VTVE9NQ09ERT1waHBDb25maWd1cmF0aW9uQ2hlY2tDYWxsKyR0aGlzLT5hcHBd', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskdGhpcy0+YXBwXQ==', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvZ2V0QmlibGUvam9vbWxhLWNvbXBvbmVudC9yYXcvYnJhbmNoLzUuMC9hZG1pbi9hc3NldHMvaW1hZ2VzL3ZkbS1jb21wb25lbnQuanBnICJHZXRCaWJsZSIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IG5ldmVyIG1ha2luZyBvbmUgbWlzdGFrZSBvciB0YWtpbmcgYW55IGNvZmZlZSBicmVhay4pDQoNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCioqIyMjYWN0dWFsSG91cnNTcGVudCMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsRGF5c1NwZW50IyMjIEVpZ2h0IEhvdXIgRGF5cyoqICh0aGUgYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzcGVudCkNCg0KPiAod2l0aCB0aGUgZm9sbG93aW5nIGJyZWFrIGRvd246DQo+ICoqZGVidWdnaW5nIEAjIyNkZWJ1Z2dpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNDsNCj4gKipwbGFubmluZyBAIyMjcGxhbm5pbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNzsNCj4gKiptYXBwaW5nIEAjIyNtYXBwaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDEwOw0KPiAqKm9mZmljZSBAIyMjb2ZmaWNlSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDY7KQ0KDQoqKiMjI2FjdHVhbFRvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbFRvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKg0KKGEgdG90YWwgb2YgdGhlIHJlYWxpc3RpYyB0aW1lIGZyYW1lIGZvciB0aGlzIHByb2plY3QpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IHdpdGggdGhlIG5vcm1hbCBldmVyeWRheSByZWFsaXRpZXMgYXQgdGhlIG9mZmljZSwgdGhhdCBpbmNsdWRlcyB0aGUgY29tcG9uZW50IHBsYW5uaW5nLCBtYXBwaW5nICYgZGVidWdnaW5nLikNCg0KUHJvamVjdCBkdXJhdGlvbjogKiojIyNwcm9qZWN0V2Vla1RpbWUjIyMgd2Vla3MqKiBvciAqKiMjI3Byb2plY3RNb250aFRpbWUjIyMgbW9udGhzKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', 1, '', 'The Bible for Joomla', 'Q1JFQVRFIElOREVYIGlkeF8jX19bW1tjb21wb25lbnRdXV1fdGFnZ2VkX3ZlcnNlX29uX2xpbmtlcl9hbmRfdGFnDQpPTiAjX19bW1tjb21wb25lbnRdXV1fdGFnZ2VkX3ZlcnNlKGxpbmtlciwgdGFnKTsNCg0KQ1JFQVRFIElOREVYIGlkeF8jX19bW1tjb21wb25lbnRdXV1fdmVyc2Vfb25fdmVyc2VfYW5kX2FiYnJldmlhdGlvbg0KT04gI19fW1tbY29tcG9uZW50XV1dX3ZlcnNlKHZlcnNlLCBhYmJyZXZpYXRpb24pOw0KDQpDUkVBVEUgSU5ERVggaWR4XyNfX1tbW2NvbXBvbmVudF1dXV9ib29rX29uX25yX2FuZF9hYmJyZXZpYXRpb24NCk9OICNfX1tbW2NvbXBvbmVudF1dXV9ib29rKG5yLCBhYmJyZXZpYXRpb24pOw0KDQpDUkVBVEUgSU5ERVggaWR4XyNfX1tbW2NvbXBvbmVudF1dXV90YWdfb25fZ3VpZF9hbmRfcHVibGlzaGVkDQpPTiAjX19bW1tjb21wb25lbnRdXV1fdGFnKGd1aWQsIHB1Ymxpc2hlZCk7', '', 'Get Bible J5', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', '', 2, 'https://git.vdm.dev/getBible/joomla-component/raw/branch/5.x/update_server.xml', 'https://getbible.net', '', 'CLMpkr0hmWG0WixbK+MiXAMRzXc19qym7pfWgMP6XNQ=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"\",\"power_admin_helper\":{\"power_admin_helper0\":{\"power\":\"11892cfa-374e-4e3f-b0bc-531871c822d9\",\"as\":\"GetBibleFactory\",\"build\":\"1\"},\"power_admin_helper1\":{\"power\":\"4612af84-5a42-4ea5-87bf-9d79cc19c330\",\"as\":\"GiteaFactory\",\"build\":\"1\"}},\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 23, '', 1, 53), +(85, 1, 1, 1, '', 1, '', '', '', 1, 1, '', 1, '', '', 1, 1, 1, 1, '', 1, '', 1, 1, 1, 1, '', 3, 1, 3, 2, 'Llewellyn van der Merwe', '/var/www/jcb_j5', 'JCB.txt', '', '', 'Vast Development Method', '5.0.0-rc1', 'Copyright (C) 2015 Vast Development Method. All rights reserved.', '2015-04-30 12:04:35', '', 'r35h7GKtIY16mKdfOZcYz5p1gBuLfGZ1D/zsj9xZsSI=', 'P2XujNqxhLXCvrszLHvzLOZtmwtZ0G/sSd/v9q8y91U=', '', 'Rr66kUKLlDlnyYgUuJHgPHClIrU3q9w6KTgapmoY8sI=', 'LmZpZWxkTWVkaXVtIHsgd2lkdGg6IDEyMHB4OyB9DQouZmllbGRMYXJnZSB7IHdpZHRoOiAzMjBweDsgfQ0KLmZpZWxkTWlkIHsgd2lkdGg6IDgwcHg7IH0NCi5maWVsZEZ1bGwgeyB3aWR0aDogMTAwJTsgfQ0KLmZpZWxkU21hbGwgeyB3aWR0aDogNjBweDsgfQ0KY29kZSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAzcHg7fQ==', '', '', 1, '', 'The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.\r\n\r\nWhether you\'re a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!', 'joomla@vdm.io', '', 'https://vdm.bz/component-builder-self', 'mbosbpYKPxqf1TgM4T3HdThzA4Csx7uJ++3WlVmONfg=', '', '3d694e49-3821-41b3-a8b5-f262506e9673', 'images/vdm/jcb500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder', 'GNU General Public License version 2 or later; see LICENSE.txt', 1, '✓', '2024-04-27 10:55:57', 2, 'Component Builder', 'Componentbuilder', 'VDM', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlckhlbHBlckJvdGhd', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskdGhpcy0+YXBwXQ==', 'W0NVU1RPTUNPREU9Y29tcG9uZW50QnVpbGRlclByZWZsaWdodFVwZGF0ZUpmaXZlXQ0KW0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskdGhpcy0+YXBwXQ==', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclJlYWRNZV0=', 1, '', 'Builds Complex Joomla Components', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMSW5zdGFsbF0=', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMVW5pbnN0YWxsXQ==', 'Component Builder (Public) J5', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', 3, 2, 'https://git.vdm.dev/joomla/Component-Builder/raw/branch/5.x/componentbuilder_update_server.xml', 'https://dev.vdm.io', '', 'OhMBUNLb8a0uJIyDBTR7DHydbI+odzre/AwNBAP5uOY=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"0\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\\r\\nuse Joomla\\\\CMS\\\\Session\\\\Session;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\\r\\nuse Joomla\\\\CMS\\\\Session\\\\Session;\",\"power_site_helper\":[]}}', 1, 42, '', 1, 1), +(86, '', '', '', '', '', '', '', '', 1, '', '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, 1, 1, 3, 'Llewellyn', '', 'default.txt', '', '', 'VDM', '5.0.0', 'Copyright (C) 2015. All Rights Reserved', '2024-02-02 16:07:26', '', 'nBiES/HRMHYRdi2aYge8F1G3fOI436PehiXXUty6J7A=', '3Ek9cjcehKnHQLNiBLLhCpF+h53s2yWSqW97IFT/3Fo=', '', 'I6IvNpSaDtIK17mSc/OrqFFnJMajZPYaeBSCIqgLmGg=', '', '', '', 1, '', '', 'joomla@vdm.io', '', '', 'MLFFvGPVwPR5C7cK9g1SKaJvtolooz9HTTbPH91lhb0=', '', '3745af8f-f96b-4e17-831e-eb4062cd4389', 'images/demo300.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Hello-World-Component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2024-03-07 13:38:41', '', 'Hello World', 'HelloWorld', 'JCB', 4, '', '', 'W0NVU1RPTUNPREU9d3JpdGVGaWxlXQ0KW0NVU1RPTUNPREU9Z2V0RmlsZUNvbnRlbnRzXQ0KW0NVU1RPTUNPREU9cmVtb3ZlRm9sZGVyXQ==', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpOYW1lKjogWyMjI0NvbXBvbmVudF9uYW1lIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqRmlyc3QgQnVpbGQqOiAjIyNDUkVBVElPTkRBVEUjIyMNCisgKkxhc3QgQnVpbGQqOiAjIyNCVUlMRERBVEUjIyMNCisgKlZlcnNpb24qOiAjIyNWRVJTSU9OIyMjDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCiMjIEJ1aWxkIFRpbWUNCg0KKiojIyN0b3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyN0b3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKiogKGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc2F2ZWQgLQ0KZHVlIHRvIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKSkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gbmV2ZXIgbWFraW5nIG9uZSBtaXN0YWtlIG9yIHRha2luZyBhbnkgY29mZmVlIGJyZWFrLikNCg0KKyAqTGluZSBjb3VudCo6ICoqIyMjTElORV9DT1VOVCMjIyoqDQorICpGaWxlIGNvdW50KjogKiojIyNGSUxFX0NPVU5UIyMjKioNCisgKkZvbGRlciBjb3VudCo6ICoqIyMjRk9MREVSX0NPVU5UIyMjKioNCg0KKiojIyNhY3R1YWxIb3Vyc1NwZW50IyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxEYXlzU3BlbnQjIyMgRWlnaHQgSG91ciBEYXlzKiogKHRoZSBhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNwZW50KQ0KDQo+ICh3aXRoIHRoZSBmb2xsb3dpbmcgYnJlYWsgZG93bjoNCj4gKipkZWJ1Z2dpbmcgQCMjI2RlYnVnZ2luZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA0Ow0KPiAqKnBsYW5uaW5nIEAjIyNwbGFubmluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA3Ow0KPiAqKm1hcHBpbmcgQCMjI21hcHBpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gMTA7DQo+ICoqb2ZmaWNlIEAjIyNvZmZpY2VIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNjspDQoNCioqIyMjYWN0dWFsVG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsVG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqDQooYSB0b3RhbCBvZiB0aGUgcmVhbGlzdGljIHRpbWUgZnJhbWUgZm9yIHRoaXMgcHJvamVjdCkNCg0KPiAoaWYgY3JlYXRpbmcgYSBmb2xkZXIgYW5kIGZpbGUgdG9vayAqKjUgc2Vjb25kcyoqIGFuZCB3cml0aW5nIG9uZSBsaW5lIG9mIGNvZGUgdG9vayAqKjEwIHNlY29uZHMqKiwNCj4gd2l0aCB0aGUgbm9ybWFsIGV2ZXJ5ZGF5IHJlYWxpdGllcyBhdCB0aGUgb2ZmaWNlLCB0aGF0IGluY2x1ZGVzIHRoZSBjb21wb25lbnQgcGxhbm5pbmcsIG1hcHBpbmcgJiBkZWJ1Z2dpbmcuKQ0KDQpQcm9qZWN0IGR1cmF0aW9uOiAqKiMjI3Byb2plY3RXZWVrVGltZSMjIyB3ZWVrcyoqIG9yICoqIyMjcHJvamVjdE1vbnRoVGltZSMjIyBtb250aHMqKg0KDQo+IFRoaXMgKipjb21wb25lbnQqKiB3YXMgYnVpbGQgd2l0aCBhIEpvb21sYSBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkuDQo+IERldmVsb3BlZCBieSBbTGxld2VsbHluIHZhbiBkZXIgTWVyd2VdKG1haWx0bzpqb29tbGFAdmRtLmlvKQ0KDQpbQ1VTVE9NQ09ERT1yZWFkTUVjb250cmlidXRvcnNd', '', '', 'Hello World', '', '', 'HelloWorld (public)', '.git', '', '', 2, 'https://raw.githubusercontent.com/Llewellynvdm/Joomla-Hello-World-Component/master/helloworld_updateserver.xml', 'https://www.vdm.io', '', 'IYXEGnRpJLAhUHUm1R0kWAwYZdCVUAXn7W5LPacqCgM=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_site_helper\":[]}}', 1, 3, '', 1, 48), +(87, '', 1, '', '', '', 1, '', '', '', 1, '', 1, '', '', 1, 1, 1, 1, '', 1, '', '', 1, '', 1, '{\"addcontributors0\":{\"name\":\"CrossWire\",\"title\":\"Modules\",\"email\":\"sword-support@crosswire.org\",\"website\":\"https:\\/\\/wiki.crosswire.org\\/\",\"use\":\"2\",\"show\":\"3\"}}', 3, 1, 3, 2, 'Llewellyn van der Merwe', '/var/www/getbible_j4', 'getBible.txt', '', '', 'Vast Development Method', '4.0.12', 'Copyright (C) 2015. All Rights Reserved', '2015-12-03 01:42:15', '', 'RR4KRth9vUzGwahsXvGuDlE7/MZqGaa2oIVUysoj+Cc=', '5ueRIZmVndaaM0V//2OhWRG9EqiL+xkS8D1upoNI4n0=', '', 'zlDXIGUCHWjXN/D08bLet3sQs9jOE+coYn5i/vK1JlA=', '', '', '', 1, '', 'Welcome to the next level of scripture engagement - The Bible for Joomla! Our purpose is to bring the Word of God to every person, in their native language, entirely free. This isn\'t just a typical extension; it\'s a groundbreaking tool developed to span language divides and deliver a rich, customizable Bible study experience to users worldwide.\r\n\r\nWith an impressive array of 80 translations, our Joomla extension allows people from all corners of the globe to read, comprehend, and meditate on the Holy Scriptures in their preferred language. Moreover, we offer the unique opportunity for individuals to host the Bible on their own website, further extending the reach of the Word.\r\n\r\nWe\'ve integrated robust features such as note-taking, tagging, and a search function, to enhance your interaction with the Scriptures. This allows users to immerse themselves in the text, crafting a personal journey through the Bible that can be revisited in future sessions. Furthermore, our innovative linker system assigns each visitor a unique identifier (GUID) - no login required. This means you can create notes, select favorite verses, and even share sessions, while maintaining control over your personalized content.\r\n\r\nA distinctive feature of our application is the integration with OpenAI. This advanced capability allows website owners to create custom prompts to interact with OpenAI using text from any translation. This function allows you to ask questions, gain clarity, and deepen your understanding of the Scriptures in an engaging and user-friendly manner.\r\n\r\nIn essence, The Bible for Joomla is designed to transform how the Word of God is shared, studied, and comprehended. Its comprehensive features, combined with a user-friendly interface, make it an essential tool for individuals, churches, and website owners alike. Join us on this journey of faith as we make the wisdom and guidance of the Scriptures accessible to all, one verse, one language, and one website at a time.', 'joomla@vdm.io', '', 'https://vdm.bz/get-bible', 'P/9mu1sMoY6DTUiVy8dBt6OYYnw1ov6SL/DxzJl4eXw=', '/var/git_', '626c492a-25c8-4567-a9d0-1e2c80789308', 'images/getBible.jpg', '', 'https://git.vdm.dev/getBible/joomla-component', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2024-04-25 15:35:10', '', 'Get Bible', 'Getbible', 'TrueChristianChurch', 4, '', '', 'CS8qKg0KCSAqIExvYWQgdGhlIHNjcmlwdHVyZSBpbnRvIGNvbnRlbnQNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICYkcm93ICAgICBUaGUgYXJ0aWNsZSBvYmplY3QuICBOb3RlICRhcnRpY2xlLT50ZXh0IGlzIGFsc28gYXZhaWxhYmxlDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJHBsdWdpbiAgIFRoZSBwbHVnaW4gcGFyYW1zDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgMi4wLjENCgkgKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkU2NyaXB0dXJlKG9iamVjdCAmJHJvdywgb2JqZWN0ICRwbHVnaW4pOiB2b2lkDQoJew0KCQkvLyBnZXQgY2FsbCBzdHJpbmcNCgkJJGNhbGxfY2xhc3MgPSAkcGx1Z2luLT5nZXQoJ2NhbGxfY2xhc3MnLCAnZ2V0QmlibGUnKTsNCg0KCQkvLyBTaW1wbGUgcGVyZm9ybWFuY2UgY2hlY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYm90IHNob3VsZCBwcm9jZXNzIGZ1cnRoZXINCgkJaWYgKHN0cnBvcygkcm93LT50ZXh0LCAkY2FsbF9jbGFzcykgPT09IGZhbHNlKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlTdXBlcl9fXzExODkyY2ZhXzM3NGVfNGUzZl9iMGJjXzUzMTg3MWM4MjJkOV9fX1Bvd2VyOjpfKCdHZXRCaWJsZS5Mb2FkZXInKS0+c2V0KCRyb3csICRwbHVnaW4pOw0KCX0=', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9Z2V0QmlibGVSZW1vdmVPbGRMaWJdDQpbQ1VTVE9NQ09ERT1waHBDb25maWd1cmF0aW9uQ2hlY2tDYWxsKyR0aGlzLT5hcHBd', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskdGhpcy0+YXBwXQ==', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvZ2V0QmlibGUvam9vbWxhLWNvbXBvbmVudC9yYXcvYnJhbmNoLzUuMC9hZG1pbi9hc3NldHMvaW1hZ2VzL3ZkbS1jb21wb25lbnQuanBnICJHZXRCaWJsZSIpDQoNCiMjI0RFU0NSSVBUSU9OIyMjDQoNCiMgQnVpbGQgRGV0YWlscw0KDQorICpDb21wYW55KjogWyMjI0NPTVBBTllOQU1FIyMjXSgjIyNBVVRIT1JXRUJTSVRFIyMjKQ0KKyAqQXV0aG9yKjogWyMjI0FVVEhPUiMjI10obWFpbHRvOiMjI0FVVEhPUkVNQUlMIyMjKQ0KKyAqTmFtZSo6IFsjIyNDb21wb25lbnRfbmFtZSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkZpcnN0IEJ1aWxkKjogIyMjQ1JFQVRJT05EQVRFIyMjDQorICpMYXN0IEJ1aWxkKjogIyMjQlVJTEREQVRFIyMjDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw0KDQojIyBCdWlsZCBUaW1lDQoNCioqIyMjdG90YWxIb3VycyMjIyBIb3VycyoqIG9yICoqIyMjdG90YWxEYXlzIyMjIEVpZ2h0IEhvdXIgRGF5cyoqIChhY3R1YWwgdGltZSB0aGUgYXV0aG9yIHNhdmVkIC0NCmR1ZSB0byBbQXV0b21hdGVkIENvbXBvbmVudCBCdWlsZGVyXShodHRwczovL3d3dy5qb29tbGFjb21wb25lbnRidWlsZGVyLmNvbSkpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IG5ldmVyIG1ha2luZyBvbmUgbWlzdGFrZSBvciB0YWtpbmcgYW55IGNvZmZlZSBicmVhay4pDQoNCisgKkxpbmUgY291bnQqOiAqKiMjI0xJTkVfQ09VTlQjIyMqKg0KKyAqRmlsZSBjb3VudCo6ICoqIyMjRklMRV9DT1VOVCMjIyoqDQorICpGb2xkZXIgY291bnQqOiAqKiMjI0ZPTERFUl9DT1VOVCMjIyoqDQoNCioqIyMjYWN0dWFsSG91cnNTcGVudCMjIyBIb3VycyoqIG9yICoqIyMjYWN0dWFsRGF5c1NwZW50IyMjIEVpZ2h0IEhvdXIgRGF5cyoqICh0aGUgYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzcGVudCkNCg0KPiAod2l0aCB0aGUgZm9sbG93aW5nIGJyZWFrIGRvd246DQo+ICoqZGVidWdnaW5nIEAjIyNkZWJ1Z2dpbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNDsNCj4gKipwbGFubmluZyBAIyMjcGxhbm5pbmdIb3VycyMjI2hvdXJzKiogPSBjb2Rpbmd0aW1lIC8gNzsNCj4gKiptYXBwaW5nIEAjIyNtYXBwaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDEwOw0KPiAqKm9mZmljZSBAIyMjb2ZmaWNlSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDY7KQ0KDQoqKiMjI2FjdHVhbFRvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbFRvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKg0KKGEgdG90YWwgb2YgdGhlIHJlYWxpc3RpYyB0aW1lIGZyYW1lIGZvciB0aGlzIHByb2plY3QpDQoNCj4gKGlmIGNyZWF0aW5nIGEgZm9sZGVyIGFuZCBmaWxlIHRvb2sgKio1IHNlY29uZHMqKiBhbmQgd3JpdGluZyBvbmUgbGluZSBvZiBjb2RlIHRvb2sgKioxMCBzZWNvbmRzKiosDQo+IHdpdGggdGhlIG5vcm1hbCBldmVyeWRheSByZWFsaXRpZXMgYXQgdGhlIG9mZmljZSwgdGhhdCBpbmNsdWRlcyB0aGUgY29tcG9uZW50IHBsYW5uaW5nLCBtYXBwaW5nICYgZGVidWdnaW5nLikNCg0KUHJvamVjdCBkdXJhdGlvbjogKiojIyNwcm9qZWN0V2Vla1RpbWUjIyMgd2Vla3MqKiBvciAqKiMjI3Byb2plY3RNb250aFRpbWUjIyMgbW9udGhzKioNCg0KPiBUaGlzICoqY29tcG9uZW50Kiogd2FzIGJ1aWxkIHdpdGggYSBKb29tbGEgW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pLg0KPiBEZXZlbG9wZWQgYnkgW0xsZXdlbGx5biB2YW4gZGVyIE1lcndlXShtYWlsdG86am9vbWxhQHZkbS5pbykNCg0KIyMgRG9uYXRpb25zDQoNCklmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBwcm9qZWN0LCBwbGVhc2UgY29uc2lkZXIgZG9uYXRpbmc6DQoqIE9wZW4gQ29sbGVjdGl2ZTogW0pvb21sYS1Db21wb25lbnQtQnVpbGRlcl0oaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vSm9vbWxhLUNvbXBvbmVudC1CdWlsZGVyKQ==', 1, '', 'The Bible for Joomla', 'Q1JFQVRFIElOREVYIGlkeF8jX19bW1tjb21wb25lbnRdXV1fdGFnZ2VkX3ZlcnNlX29uX2xpbmtlcl9hbmRfdGFnDQpPTiAjX19bW1tjb21wb25lbnRdXV1fdGFnZ2VkX3ZlcnNlKGxpbmtlciwgdGFnKTsNCg0KQ1JFQVRFIElOREVYIGlkeF8jX19bW1tjb21wb25lbnRdXV1fdmVyc2Vfb25fdmVyc2VfYW5kX2FiYnJldmlhdGlvbg0KT04gI19fW1tbY29tcG9uZW50XV1dX3ZlcnNlKHZlcnNlLCBhYmJyZXZpYXRpb24pOw0KDQpDUkVBVEUgSU5ERVggaWR4XyNfX1tbW2NvbXBvbmVudF1dXV9ib29rX29uX25yX2FuZF9hYmJyZXZpYXRpb24NCk9OICNfX1tbW2NvbXBvbmVudF1dXV9ib29rKG5yLCBhYmJyZXZpYXRpb24pOw0KDQpDUkVBVEUgSU5ERVggaWR4XyNfX1tbW2NvbXBvbmVudF1dXV90YWdfb25fZ3VpZF9hbmRfcHVibGlzaGVkDQpPTiAjX19bW1tjb21wb25lbnRdXV1fdGFnKGd1aWQsIHB1Ymxpc2hlZCk7', '', 'Get Bible J4', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', '', 2, 'https://git.vdm.dev/getBible/joomla-component/raw/branch/4.x/update_server.xml', 'https://getbible.net', '', 'sarvt+VcI4GQlwrmL1w3kRhszBhGjIZwPdDFkiP+TvI=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"\",\"power_admin_helper\":{\"power_admin_helper0\":{\"power\":\"11892cfa-374e-4e3f-b0bc-531871c822d9\",\"as\":\"GetBibleFactory\",\"build\":\"1\"},\"power_admin_helper1\":{\"power\":\"4612af84-5a42-4ea5-87bf-9d79cc19c330\",\"as\":\"GiteaFactory\",\"build\":\"1\"}},\"add_site_helper\":\"0\",\"site_helper\":\"\",\"power_site_helper\":[]}}', 1, 12, '', 1, 53), +(88, '', 1, '', '', '', 1, '', '', '', 1, '', 1, '', '', '', '', '', '', '', 1, '', '', '', '', 1, '{}', 3, 1, 3, 3, 'Llewellyn van der Merwe', '/var/www/sermondistributor_j5', 'SD.txt', '', '', 'Vast Development Method', '5.0.0-beta1', 'Copyright (C) 2015. All Rights Reserved', '2015-10-22 16:59:20', '', 'sCJHDIYwBV3t4M72i8g316yIPusajHN3qfiNBvsCg/g=', '18hUvFIOBZv3HelZKP4Ww7twWuxFqe65V3FxJmgMVzk=', '', '/WHc+nIN3Myh9BMZ9B80n/K9dMUsvO9hP8thR1OwOEY=', '', '', '', 1, '', 'Distributor is a highly advanced sermon distributor that runs on the [Joomla 4.x & 5.x](http://www.joomla.org) framework. You can link a shared folder from Dropbox to the component and use Dropbox as your file host, not to mention the advanced auto builder that gives you the ability to simply load sermons to your website by only adding them to Dropbox.', 'joomla@vdm.io', 1, 'http://vdm.bz/get-sermon-distributor-key', 'aXQ+iPTzl4tip40QGvzIh0EpOLfmTXtBW9L7fzzHTTL6miU3cDvcvQKkgCHv8XRLiVBi3KoxUV0SDXTIM88PKg==', '/var/git_', '2a62e359-1500-4adb-a2b5-f8d97f23d782', 'images/vdm/SD500.jpg', '', 'https://github.com/Llewellynvdm/Joomla-Sermon-Distributor', 'GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html', 1, '»', '2024-03-07 17:17:15', 2, 'Sermon Distributor', 'sermondistributor', 'TrueChristianChurch', 4, '', '', 'CS8qKg0KCSogCVRoZSBnbG9iYWwgcGFyYW1zDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkcGFyYW1zID0gZmFsc2U7DQoNCgkvKioNCgkqIAlVcGRhdGUgV2F0Y2hlcg0KCSoqLw0KCXB1YmxpYyBzdGF0aWMgJHVwZGF0ZVdhdGNoID0gMTsNCg0KCS8qKg0KCSogCVVwZGF0ZSBXYXRjaGVyIChpZiBhcnJheSBpcyBvbmx5IG9uZSB2YWx1ZSkNCgkqKi8NCglwdWJsaWMgc3RhdGljICR1cGRhdGVXYXRjaF8gPSAwOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBsaW5rcyBhdXRvDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZXh0ZXJuYWxzb3VyY2VfYXV0bzsNCg0KCS8qKg0KCSogCVRoZSBleHRlcm5hbCBzb3VyY2UgbGlua3MgbWFudWFsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbGlua3NfZXh0ZXJuYWxzb3VyY2VfbWFudWFsOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBzZWxlY3Rpb24gYXV0bw0KCSoqLw0KCXByb3RlY3RlZCBzdGF0aWMgJHNlbGVjdF9leHRlcm5hbHNvdXJjZV9hdXRvOw0KDQoJLyoqDQoJKiAJVGhlIGV4dGVybmFsIHNvdXJjZSBzZWxlY3Rpb24gbWFudWFsDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkc2VsZWN0X2V4dGVybmFsc291cmNlX21hbnVhbDsNCg0KCS8qKg0KCSogCVRoZSB1cGRhdGUgZXJyb3JzDQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkdXBkYXRlRXJyb3JzID0gYXJyYXkoKTsNCltDVVNUT01DT0RFPWJhc2VTaXh0eUZvdXJVUkxdDQoJLyoqDQoJKiAJZ2V0IERvd25sb2FkIGxpbmtzIG9mIGEgc2VybW9uDQoJKiovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREb3dubG9hZExpbmtzKCYkc2VybW9uKQ0KCXsNCgkJJGxpbmtzID0gYXJyYXkoKTsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkvLyBkZWNyeXB0IHRoZSB1cmxzDQoJCSRzYWZlID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAxMjgpOw0KCQkvLyBpbnRlcm5hbCBkb3dubG9hZCB1cmwNCgkJJGtleUNvdW50ZXIgPSBuZXcgXHN0ZENsYXNzOw0KCQkka2V5Q291bnRlci0+c2VybW9uID0gJHNlcm1vbi0+aWQ7DQoJCWlmICgkc2VybW9uLT5wcmVhY2hlcikNCgkJew0KCQkJJGtleUNvdW50ZXItPnByZWFjaGVyID0gJHNlcm1vbi0+cHJlYWNoZXI7DQoJCX0NCgkJaWYgKCRzZXJtb24tPnNlcmllcykNCgkJew0KCQkJJGtleUNvdW50ZXItPnNlcmllcyA9ICRzZXJtb24tPnNlcmllczsNCgkJfQ0KCQkka2V5Q291bnRlclJBVyA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKGpzb25fZW5jb2RlKCRrZXlDb3VudGVyKSk7DQoJCSRrZXlDb3VudGVyID0gc2VsZjo6YmFzZTY0X3VybGVuY29kZSgka2V5Q291bnRlclJBVyk7DQoJCSR0b2tlbiA9IFNlc3Npb246OmdldEZvcm1Ub2tlbigpOw0KCQkkZG93bmxvYWRVUkwgPSBVcmk6OnJvb3QoKS4naW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnRhc2s9ZG93bmxvYWQuZmlsZSZrZXk9Jy4ka2V5Q291bnRlci4nJnRva2VuPScuJHRva2VuOw0KCQkvLyBjaGVjayBpZiBsb2NhbCAuaHRhY2Nlc3Mgc2hvdWxkIGJlIHNldA0KCQkkc2V0SHRhY2Nlc3MgPSBmYWxzZTsNCgkJJG9uY2xpY2sgPSAnIG9uY2xpY2s9InNlcm1vbkNvdW50ZXIoXCcnLiRrZXlDb3VudGVyUkFXLidcJyxcJ0ZJTEVOQU1FXCcpOyInOw0KCQkvLyBjaGVjayB3aGF0IHNvdXJjZSBvZiBvdXIgbGluaw0KCQlzd2l0Y2ggKCRzZXJtb24tPnNvdXJjZSkNCgkJew0KCQkJY2FzZSAxOg0KCQkJCS8vIGxvY2FsIGZpbGUgZ2V0IGxvY2FsIGZvbGRlciBhbmQgY2hlY2sgaWYgb3V0c2lkZSByb290IChpZiBub3QgdGhlbiBhbGxvdyBkaXJlY3QpDQoJCQkJJGxvY2FsRm9sZGVyID0gQ29tcG9uZW50SGVscGVyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdsb2NhbGZvbGRlcicsIEpQQVRIX1JPT1QuJy9pbWFnZXMnKS4nLyc7DQoJCQkJLy8gc2hvdWxkIHdlIGFsbG93IGRpcmVjdCBkb3dubG9hZHMNCgkJCQkkYWxsb3dEaXJlY3QgPSBmYWxzZTsNCgkJCQlpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgc3RycG9zKCRsb2NhbEZvbGRlciwgSlBBVEhfUk9PVCkgIT09IGZhbHNlKQ0KCQkJCXsNCgkJCQkJJGFsbG93RGlyZWN0ID0gdHJ1ZTsNCgkJCQkJJGxvY2FsRm9sZGVyVVJMID0gVXJpOjpyb290KCkuc3RyX3JlcGxhY2UoSlBBVEhfUk9PVCwgJycsICRsb2NhbEZvbGRlcik7DQoJCQkJCS8vIGluc3VyZSBubyBkb3VibGUgLy8gaXMgaW4gdGhlIFVSTA0KCQkJCQkkbG9jYWxGb2xkZXJVUkwgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlclVSTCk7DQoJCQkJCSRsb2NhbEZvbGRlclVSTCA9IHN0cl9yZXBsYWNlKCc6LycsICc6Ly8nLCAkbG9jYWxGb2xkZXJVUkwpOw0KCQkJCX0NCgkJCQkvLyBpbnN1cmUgbm8gZG91YmxlIC8vIGlzIGluIHRoZSBwYXRoIG5hbWUNCgkJCQkkbG9jYWxGb2xkZXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRsb2NhbEZvbGRlcik7DQoJCQkJJGxvY2FsRm9sZGVyID0gc3RyX3JlcGxhY2UoJzovJywgJzovLycsICRsb2NhbEZvbGRlcik7DQoJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPmxvY2FsX2ZpbGVzKSkNCgkJCQl7DQoJCQkJCWZvcmVhY2goJHNlcm1vbi0+bG9jYWxfZmlsZXMgYXMgJGtleSkNCgkJCQkJew0KCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlIHx8ICEkYWxsb3dEaXJlY3QpDQoJCQkJCQl7DQoJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCSRmaWxlbmFtZSA9IHNlbGY6OmdldERvd25sb2FkRmlsZU5hbWUoJHNlcm1vbiwka2V5LCdsb2NhbCcpOw0KCQkJCQkJCSRsb2NrZWRGb2xkZXJQYXRoID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGxvY2FsRm9sZGVyLiRrZXkpOw0KCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZG93bmxvYWRVUkwuJyZsaW5rPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkbG9ja2VkRm9sZGVyUGF0aCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJCQkkc2VybW9uLT5vbmNsaWNrWyRmaWxlbmFtZV0gPSAnJzsNCgkJCQkJCX0NCgkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGFsbG93RGlyZWN0KQ0KCQkJCQkJew0KCQkJCQkJCSRmaWxlbmFtZSA9ICRrZXk7DQoJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRsb2NhbEZvbGRlclVSTC4ka2V5Ow0KCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCSRzZXRIdGFjY2VzcyA9IHRydWU7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlIDI6DQoJCQkJLy8gRHJvcGJveCBnZXQgZ2xvYmFsIGRyb3Bib3ggc3dpdGNoIA0KCQkJCSRhZGRUb0J1dHRvbiA9IENvbXBvbmVudEhlbHBlcjo6Z2V0UGFyYW1zKCdjb21fW1tbY29tcG9uZW50XV1dJyktPmdldCgnYWRkX3RvX2J1dHRvbicsIDApOw0KCQkJCWlmICgxID09ICRzZXJtb24tPmJ1aWxkKQ0KCQkJCXsNCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRzZXJtb24tPm1hbnVhbF9maWxlcykpDQoJCQkJCXsNCgkJCQkJCS8vIG1hbnVhbCBkcm9wYm94DQoJCQkJCQlmb3JlYWNoKCRzZXJtb24tPm1hbnVhbF9maWxlcyBhcyAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RXh0ZXJuYWxTb3VyY2VMaW5rKCdtYW51YWwnLDEsJGtleSk7DQoJCQkJCQkJaWYgKDEgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJLy8gZ2V0IHRoZSBmaWxlIG5hbWUgdXNlIHRoZSBzYW1lIG1ldGhvZCBhcyB0aGUgYXV0bw0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJGtleSwnZHJvcGJveF9tYW51YWwnKTsNCgkJCQkJCQkJLy8gc2hvdWxkIHdlIGVuY3J5cHQgc3RyaW5nIHRoaXMgc3RyaW5nDQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5IHx8IChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGRyb3BVUkwsIHRydWUpKSAhPT0gJGRyb3BVUkwpKSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0DQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRkcm9wVVJMID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGRyb3BVUkwpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCS8vIGxvY2sgdGhlIGluZm8ga2V5DQoJCQkJCQkJCSRpbmZvS2V5ID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJGtleSk7DQoJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZG93bmxvYWRVUkwuJyZpbmZvPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkaW5mb0tleSkuJyZsaW5rPScuc2VsZjo6YmFzZTY0X3VybGVuY29kZSgkZHJvcFVSTCkuJyZmaWxlbmFtZT0nLiRmaWxlbmFtZTsNCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2VpZiAoMiA9PSAkc2VybW9uLT5saW5rX3R5cGUgJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQkkZmlsZW5hbWUgPSBzdHJfcmVwbGFjZSgnVkRNX3BMZUtfaDB1RXIvJywgJycsICRrZXkpOw0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldCAoc28gZG9uJ3QgZGVjcnlwdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkcm9wVVJMOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2UNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9IHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKCRkcm9wVVJMKSwgIlwwIik7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIGJ1aWxkIGRyb3Bib3ggc3dpdGNoIGlmIG5lZWRlZA0KCQkJCQkJCWlmICgxID09ICRhZGRUb0J1dHRvbiAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCWlmICgnbG9jYWxLZXkzNGZkV0VrbCcgPT0gJGxvY2Fsa2V5KSAvLyBobW1tIG5vIGdsb2JhbCBrZXkgaGFzIGJlZW4gc2V0IChzbyBkb24ndCBkZWNyeXB0KQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsICRkcm9wVVJMKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRyb3Bib3hfYnV0dG9uc1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJz9kbD0xJywgJz9kbD0wJywgcnRyaW0oJHNhZmUtPmRlY3J5cHRTdHJpbmcoJGRyb3BVUkwpLCAiXDAiKSk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJJHNlcm1vbi0+b25jbGlja19kcm9ib3hbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+YnVpbGQpDQoJCQkJew0KCQkJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHNlcm1vbi0+YXV0b19zZXJtb25zKSkNCgkJCQkJew0KCQkJCQkJLy8gYXV0b21hdGljIGRyb3Bib3gNCgkJCQkJCWZvcmVhY2goJHNlcm1vbi0+YXV0b19zZXJtb25zIGFzICRmaWxlbmFtZSA9PiAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCS8vIGdldCB0aGUgbGluaw0KCQkJCQkJCSRkcm9wVVJMID0gc2VsZjo6Z2V0RXh0ZXJuYWxTb3VyY2VMaW5rKCdhdXRvJywxLCRrZXkpOw0KCQkJCQkJCWlmICgxID09ICRzZXJtb24tPmxpbmtfdHlwZSAmJiAkZHJvcFVSTCkNCgkJCQkJCQl7DQoJCQkJCQkJCS8vIHNob3VsZCB3ZSBlbmNyeXB0IHN0cmluZyB0aGlzIHN0cmluZw0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSB8fCAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRkcm9wVVJMLCB0cnVlKSkgIT09ICRkcm9wVVJMKSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldA0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkZHJvcFVSTCA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKCRkcm9wVVJMKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQkvLyBsb2NrIHRoZSBpbmZvIGtleQ0KCQkJCQkJCQkkaW5mb0tleSA9ICRzYWZlLT5lbmNyeXB0U3RyaW5nKCRrZXkpOw0KCQkJCQkJCQkkc2VybW9uLT5kb3dubG9hZF9saW5rc1skZmlsZW5hbWVdID0gJGRvd25sb2FkVVJMLicmaW5mbz0nLnNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGluZm9LZXkpLicmbGluaz0nLnNlbGY6OmJhc2U2NF91cmxlbmNvZGUoJGRyb3BVUkwpLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWU7DQoJCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlICYmICRkcm9wVVJMKQ0KCQkJCQkJCXsNCgkJCQkJCQkJaWYgKCdsb2NhbEtleTM0ZmRXRWtsJyA9PSAkbG9jYWxrZXkpIC8vIGhtbW0gbm8gZ2xvYmFsIGtleSBoYXMgYmVlbiBzZXQgKHNvIGRvbid0IGRlY3J5cHQpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSAkZHJvcFVSTDsNCgkJCQkJCQkJfQ0KCQkJCQkJCQllbHNlDQoJCQkJCQkJCXsNCgkJCQkJCQkJCSRzZXJtb24tPmRvd25sb2FkX2xpbmtzWyRmaWxlbmFtZV0gPSBydHJpbSgkc2FmZS0+ZGVjcnlwdFN0cmluZygkZHJvcFVSTCksICJcMCIpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCdGSUxFTkFNRScsICRmaWxlbmFtZSwgJG9uY2xpY2spOw0KCQkJCQkJCX0NCgkJCQkJCQkvLyBidWlsZCBkcm9wYm94IHN3aXRjaCBpZiBuZWVkZWQNCgkJCQkJCQlpZiAoMSA9PSAkYWRkVG9CdXR0b24gJiYgJGRyb3BVUkwpDQoJCQkJCQkJew0KCQkJCQkJCQlpZiAoJ2xvY2FsS2V5MzRmZFdFa2wnID09ICRsb2NhbGtleSkgLy8gaG1tbSBubyBnbG9iYWwga2V5IGhhcyBiZWVuIHNldCAoc28gZG9uJ3QgZGVjcnlwdCkNCgkJCQkJCQkJew0KCQkJCQkJCQkJJHNlcm1vbi0+ZHJvcGJveF9idXR0b25zWyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnP2RsPTEnLCAnP2RsPTAnLCAkZHJvcFVSTCk7DQoJCQkJCQkJCX0NCgkJCQkJCQkJZWxzZQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkc2VybW9uLT5kcm9wYm94X2J1dHRvbnNbJGZpbGVuYW1lXSA9IHN0cl9yZXBsYWNlKCc/ZGw9MScsICc/ZGw9MCcsIHJ0cmltKCRzYWZlLT5kZWNyeXB0U3RyaW5nKCRkcm9wVVJMKSwgIlwwIikpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCSRzZXJtb24tPm9uY2xpY2tfZHJvYm94WyRmaWxlbmFtZV0gPSBzdHJfcmVwbGFjZSgnRklMRU5BTUUnLCAkZmlsZW5hbWUsICRvbmNsaWNrKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlIDM6DQoJCQkJLy8gdXJsIGdldCB0aGUgZmlsZSBuYW1lIHVzZSB0aGUgc2FtZSBtZXRob2QgYXMgdGhlIGF1dG8NCgkJCQkkZmlsZW5hbWUgPSBzZWxmOjpnZXREb3dubG9hZEZpbGVOYW1lKCRzZXJtb24sJHNlcm1vbi0+dXJsLCd1cmwnKTsNCgkJCQlpZiAoMSA9PSAkc2VybW9uLT5saW5rX3R5cGUpDQoJCQkJew0KCQkJCQkkbG9ja2VkVVJMID0gJHNhZmUtPmVuY3J5cHRTdHJpbmcoJHNlcm1vbi0+dXJsKTsNCgkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRkb3dubG9hZFVSTC4nJmxpbms9Jy5zZWxmOjpiYXNlNjRfdXJsZW5jb2RlKCRsb2NrZWRVUkwpLicmZmlsZW5hbWU9Jy4kZmlsZW5hbWU7DQoJCQkJCSRzZXJtb24tPm9uY2xpY2tbJGZpbGVuYW1lXSA9ICcnOw0KCQkJCX0NCgkJCQllbHNlaWYgKDIgPT0gJHNlcm1vbi0+bGlua190eXBlKQ0KCQkJCXsNCgkJCQkJJHNlcm1vbi0+ZG93bmxvYWRfbGlua3NbJGZpbGVuYW1lXSA9ICRzZXJtb24tPnVybDsNCgkJCQkJJHNlcm1vbi0+b25jbGlja1skZmlsZW5hbWVdID0gc3RyX3JlcGxhY2UoJ0ZJTEVOQU1FJywgJGZpbGVuYW1lLCAkb25jbGljayk7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQl9DQoJCS8vIHJlbW92ZSB0aGUgdmFsdWVzIG5vIGxvbmdlciBuZWVkZWQNCgkJdW5zZXQoJHNlcm1vbi0+bG9jYWxfZmlsZXMpOw0KCQl1bnNldCgkc2VybW9uLT5tYW51YWxfZmlsZXMpOw0KCQl1bnNldCgkc2VybW9uLT5hdXRvX3Nlcm1vbnMpOw0KCQl1bnNldCgkc2VybW9uLT51cmwpOw0KCQkvLyBzaG91bGQgd2Ugc2V0IHRoZSBsb2NhbCAuaHRhY2Nlc3MgZm9yIHRoZSBkb3dubG9hZCBmb2xkZXINCgkJaWYgKCRzZXRIdGFjY2VzcykNCgkJew0KCQkJLy8gVE9ETyB3ZSBtYXkgbmVlZCB0byBhZGQgdGhpcyBsYXR0ZXIgdG8gZW5mb3JjZSBkb3dubG9hZCBvZiBmaWxlcy4NCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5leHRVcGRhdGVWYWx1ZXMoJGFzQXJyYXkgPSBmYWxzZSkNCgl7DQoJCS8vIGZpbmQgdGhlIG5leHQgdmFsdWUNCgkJJG5leHQgPSBmYWxzZTsNCgkJLy8gZ2V0IGFjdHVhbCB1cGRhdGUgdmFsdWVzDQoJCSR1cGRhdGVzID0gc2VsZjo6Z2V0RXh0ZXJuYWxMaXN0aW5nVXBkYXRlS2V5cygpOw0KCQkvLyBnZXQgbGFzdCB1cGRhdGUNCgkJJHVwZGF0ZVBhdGggPSBTdXBlcl9fX2EyMjNiMzFlX2VhMWRfNGNkZl85MmFlXzVmOWJlY2ZmYWZmMF9fX1Bvd2VyOjpnZXRQYXRoKCdwYXRoJywgJ3VwZGF0ZWxhc3QnLCAndHh0JywgJ3ZEbScsIEpQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SKTsNCgkJaWYgKCgkbGFzdFVwZGF0ZSA9IFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OmdldENvbnRlbnQoJHVwZGF0ZVBhdGgsIEZBTFNFKSkgIT09IEZBTFNFICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR1cGRhdGVzKSkNCgkJew0KCQkJLy8gaXMgaXQgdGltZSB0byB3YXRjaA0KCQkJaWYgKHNlbGY6OiR1cGRhdGVXYXRjaF8gPiAwKQ0KCQkJew0KCQkJCS8vIGluY3JlbWVudCB0aGUgd2F0Y2gsIGFzIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIG5ldyByb3VuZA0KCQkJCXNlbGY6OiR1cGRhdGVXYXRjaCsrOw0KCQkJCS8vIG5ldyByb3VuZCBoYXMgc3RhcnRlZA0KCQkJCXNlbGY6OiR1cGRhdGVXYXRjaF8gPSAwOw0KCQkJfQ0KCQkJLy8gbm93IGNoZWNrIHdoYXQgaXMgbmV4dA0KCQkJJGxhc3RLZXkgPSBhcnJheV9zZWFyY2goJGxhc3RVcGRhdGUsICR1cGRhdGVzKTsNCgkJCWlmICghaXNfbnVsbCgkbGFzdEtleSkpDQoJCQl7DQoJCQkJJG5leHRLZXkgPSAkbGFzdEtleSArIDE7DQoJCQkJaWYgKGlzc2V0KCR1cGRhdGVzWyRuZXh0S2V5XSkpDQoJCQkJew0KCQkJCQkkbmV4dCA9ICR1cGRhdGVzWyRuZXh0S2V5XTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJLy8gbGFzdCBpdGVtIGluIGFycmF5LCBzbyBuZXh0IHJvdW5kIGFib3V0IHRvIHN0YXJ0DQoJCQkJCXNlbGY6OiR1cGRhdGVXYXRjaF8rKzsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gcmVzdCBhbmQgc3RhcnQgd2l0aCB0aGUgZmlyc3Qga2V5DQoJCWlmICghJG5leHQgJiYgU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJHVwZGF0ZXMpKQ0KCQl7DQoJCQkvLyBzYXZlIHRoZSBmaXJzdCBzZXQNCgkJCSRzdGFydCA9IHJlc2V0KCR1cGRhdGVzKTsNCgkJCSRuZXh0ID0gJHN0YXJ0Ow0KCQl9DQoJCS8vIHNhdmUgdG8gZmlsZSBpZiBuZXh0IGlzIGZvdW5kDQoJCWlmICgkbmV4dCkNCgkJew0KCQkJU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6d3JpdGUoJHVwZGF0ZVBhdGgsJG5leHQpOw0KCQkJLy8gY29udmVydCB0byBhcnJheSBvZiBuZWVkZWQNCgkJCWlmICgkYXNBcnJheSkNCgkJCXsNCgkJCQlpZiAoc3RycG9zKCRuZXh0LCAnLCcpICE9PSBmYWxzZSkNCgkJCQl7DQoJCQkJCSRuZXh0ID0gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsICRuZXh0KSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRuZXh0Ow0KCX0NCltDVVNUT01DT0RFPWdldEZpbGVQYXRoXQ0KW0NVU1RPTUNPREU9d3JpdGVGaWxlXQ0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2F2ZUZpbGUoJGRhdGEsICRwYXRoX2ZpbGVuYW1lKQ0KCXsNCgkJcmV0dXJuIFN1cGVyX19fYTIyM2IzMWVfZWExZF80Y2RmXzkyYWVfNWY5YmVjZmZhZmYwX19fUG93ZXI6OndyaXRlKCRwYXRoX2ZpbGVuYW1lLCAkZGF0YSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFeHRlcm5hbExpc3RpbmdVcGRhdGVLZXlzKCRpZCA9IG51bGwsICR1cGRhdGVNZXRob2QgPSAyLCAkcmV0dXJuVHlwZSA9IDEpDQoJew0KCQkvLyBmaXJzdCBjaGVjayBpZiB0aGlzIGZpbGUgYWxyZWFkeSBoYXMgc3RhdGlzdGljcw0KCQkkZGIgPSBGYWN0b3J5OjpnZXREYm8oKTsNCgkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJJHF1ZXJ5LT5zZWxlY3QoJGRiLT5xdW90ZU5hbWUoYXJyYXkoJ2lkJywnc2hhcmVkdXJsJywnZm9sZGVyJywncGVybWlzc2lvbnR5cGUnLCdkcm9wYm94b3B0aW9ucycsJ2J1aWxkJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fZXh0ZXJuYWxfc291cmNlJykpOw0KCQlpZiAoJHVwZGF0ZU1ldGhvZCAmJiBpc19udW1lcmljKCR1cGRhdGVNZXRob2QpKQ0KCQl7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCd1cGRhdGVfbWV0aG9kJykgLiAnID0gJy4gKGludCkgJHVwZGF0ZU1ldGhvZCk7DQoJCX0NCgkJaWYgKCRpZCAmJiBpc19udW1lcmljKCRpZCkpDQoJCXsNCgkJCSRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2lkJykgLiAnID0gJy4gKGludCkgJGlkKTsNCgkJfQ0KCQllbHNlaWYgKCRpZCAmJiBTdXBlcl9fXzBhNTljNjVjXzlkYWZfNGJjOV9iYWY0X2UwNjNmZjllNmE4YV9fX1Bvd2VyOjpjaGVjaygkaWQpKQ0KCQl7DQoJCQkkaWRzID0gaW1wbG9kZSgnLCcsIGFycmF5X21hcCggJ2ludHZhbCcsICRpZCkpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnaWQnKSAuICcgSU4gICgnIC4gJGlkcyAuICcpJyk7DQoJCX0NCgkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgncHVibGlzaGVkJykgLiAnID0gMScpOw0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCSRyZXN1bHRzID0gJGRiLT5sb2FkT2JqZWN0TGlzdCgpOw0KCQkJJHVwZGF0ZXMgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJHJlc3VsdHMgYXMgJHJlc3VsdCkNCgkJCXsNCgkJCQlpZiAoJ2Z1bGwnID09ICRyZXN1bHQtPnBlcm1pc3Npb250eXBlKQ0KCQkJCXsNCgkJCQkJLy8gbG9hZCBmb2xkZXIgb3IgdXJscw0KCQkJCQlzd2l0Y2ggKCRyZXN1bHQtPmRyb3Bib3hvcHRpb25zKQ0KCQkJCQl7DQoJCQkJCQljYXNlIDE6IC8vIHNoYXJlZHVybA0KCQkJCQkJCWlmIChTdXBlcl9fXzRiMjI1YzUxX2QyOTNfNDhlNF9iM2Y2XzUxMzZjZjVjM2YxOF9fX1Bvd2VyOjpjaGVjaygkcmVzdWx0LT5zaGFyZWR1cmwpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHRhcmdldHMgPSBqc29uX2RlY29kZSgkcmVzdWx0LT5zaGFyZWR1cmwpLT50c2hhcmVkdXJsOw0KCQkJCQkJCX0NCgkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAyOiAvLyBmb2xkZXJzDQoJCQkJCQkJaWYgKFN1cGVyX19fNGIyMjVjNTFfZDI5M180OGU0X2IzZjZfNTEzNmNmNWMzZjE4X19fUG93ZXI6OmNoZWNrKCRyZXN1bHQtPmZvbGRlcikpDQoJCQkJCQkJew0KCQkJCQkJCQkkdGFyZ2V0cyA9IGpzb25fZGVjb2RlKCRyZXN1bHQtPmZvbGRlciktPnRmb2xkZXI7DQoJCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQkJaWYgKFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCR0YXJnZXRzKSkNCgkJCQkJew0KCQkJCQkJZm9yZWFjaCAoJHRhcmdldHMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQkJCQl7DQoJCQkJCQkJJG5yID0gJGtleSArIDE7DQoJCQkJCQkJLy8gaWQsIHRhcmdldCwgdHlwZQ0KCQkJCQkJCWlmICgxID09ICRyZXR1cm5UeXBlKQ0KCQkJCQkJCXsNCgkJCQkJCQkJJHVwZGF0ZXNbXSA9ICRyZXN1bHQtPmlkIC4gJywgJy4gJG5yIC4gJywgJyAuICRyZXN1bHQtPmJ1aWxkOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlIC8vIG9ubHkgcmV0dXJuIHRoZSB0YXJnZXRzDQoJCQkJCQkJew0KCQkJCQkJCQkkdXBkYXRlc1tdID0gJG5yOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkvLyBpZCwgdGFyZ2V0LCB0eXBlDQoJCQkJCWlmICgxID09ICRyZXR1cm5UeXBlKQ0KCQkJCQl7DQoJCQkJCQkkdXBkYXRlc1tdID0gJHJlc3VsdC0+aWQgLiAnLCAxLCAnLiAkcmVzdWx0LT5idWlsZDsNCgkJCQkJfQ0KCQkJCQllbHNlIC8vIG9ubHkgcmV0dXJuIHRoZSB0YXJnZXRzDQoJCQkJCXsNCgkJCQkJCSR1cGRhdGVzW10gPSAxOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICR1cGRhdGVzOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEV4dGVybmFsU291cmNlTGluaygkdHlwZSwgJHJldHVybiA9IDcsICRnZXQgPSBmYWxzZSwgJHRhcmdldCA9ICdsaW5rcycpDQoJew0KCQkvLyBtYWtlIHN1cmUgYWxsIGRlZmF1bHRzIGFyZSBzZXQNCgkJJGZvdW5kID0gc2VsZjo6Y2hlY2tFeHRlcm5hbFNvdXJjZUxvY2FsTGlzdGluZygkdHlwZSwgJHRhcmdldCk7DQoJCWlmICgkZm91bmQpDQoJCXsNCgkJCXN3aXRjaCgkcmV0dXJuKQ0KCQkJew0KCQkJCWNhc2UgMToNCgkJCQkJLy8gcmV0dXJuIGEgbGluaw0KCQkJCQlpZiAoaXNzZXQoc2VsZjo6JHskdGFyZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX1bJGdldF0pKQ0KCQkJCQl7DQoJCQkJCQlyZXR1cm4gc2VsZjo6JHskdGFyZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX1bJGdldF07DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAyOg0KCQkJCQkvLyByZXR1cm4gYWxsIGxpbmtzDQoJCQkJCXJldHVybiBzZWxmOjokeyR0YXJnZXQuJ19leHRlcm5hbHNvdXJjZV8nLiR0eXBlfTsNCgkJCQkJYnJlYWs7DQoJCQkJZGVmYXVsdCA6DQoJCQkJCS8vIGp1c3QgY29uZmlybSB0aGF0IGl0IGlzIHNldA0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY291bnREb3dubG9hZCgkY291bnRlciwgJGZpbGVuYW1lKQ0KCXsNCgkJLy8gR2V0IGxvY2FsIGtleQ0KCQkkbG9jYWxrZXkgPSBzZWxmOjpnZXRMb2NhbEtleSgpOw0KCQkkb3BlbmVyID0gbmV3IFN1cGVyX19fOTkxNzVmNmRfZGJhOF80MDg2XzhhNjVfNWM0ZWMxNzVlNjFkX19fUG93ZXIoJGxvY2Fsa2V5LCAxMjgpOw0KCQkkY291bnRlciA9IGpzb25fZGVjb2RlKHJ0cmltKCRvcGVuZXItPmRlY3J5cHRTdHJpbmcoJGNvdW50ZXIpLCAiXDAiKSk7DQoJCWlmIChTdXBlcl9fXzkxMDA0NTI5Xzk0YTlfNDU5MF9iODQyX2U3YzZiNjI0ZWNmNV9fX1Bvd2VyOjpjaGVjaygkY291bnRlcikpDQoJCXsNCgkJCSRjb3VudGVyLT5maWxlbmFtZSA9ICRmaWxlbmFtZTsNCgkJCS8vIHNldCB0aGUgZGF0ZSBvYmplY3QNCgkJCSRkYXRlID0gRmFjdG9yeTo6Z2V0RGF0ZSgpOw0KCQkJLy8gZmlyc3QgY2hlY2sgaWYgdGhpcyBmaWxlIGFscmVhZHkgaGFzIHN0YXRpc3RpY3MNCgkJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdpZCcsJ2NvdW50ZXInKSkpOw0KCQkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnc2VybW9uJykgLiAnID0gJy4gKGludCkgJGNvdW50ZXItPnNlcm1vbik7DQoJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdmaWxlbmFtZScpIC4gJyA9ICcuICRkYi0+cXVvdGUoJGNvdW50ZXItPmZpbGVuYW1lKSk7DQoJCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCQkkZGItPmV4ZWN1dGUoKTsNCgkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkc3RhdGlzdGljID0gJGRiLT5sb2FkT2JqZWN0KCk7DQoJCQkJLy8gYWxyZWFkeSBoYXMgYW4gZW50cnkNCgkJCQkkc3RhdGlzdGljLT5jb3VudGVyKys7DQoJCQkJJHN0YXRpc3RpYy0+bW9kaWZpZWQgPSAkZGF0ZS0+dG9TcWwoKTsNCgkJCQkvLyB1cGRhdGUgdGhlIGVudHJ5DQoJCQkJcmV0dXJuICRkYi0+dXBkYXRlT2JqZWN0KCcjX19bW1tjb21wb25lbnRdXV1fc3RhdGlzdGljJywgJHN0YXRpc3RpYywgJ2lkJyk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IGEgbmV3IGVudHJ5DQoJCQkJJGNvdW50ZXItPmNvdW50ZXIgPSAxOw0KCQkJCSRjb3VudGVyLT5wdWJsaXNoZWQgPSAxOw0KCQkJCSRjb3VudGVyLT5jcmVhdGVkID0gJGRhdGUtPnRvU3FsKCk7DQoJCQkJJGNvdW50ZXItPmFjY2VzcyA9IDE7DQoJCQkJJGNvdW50ZXItPnZlcnNpb24gPSAxOw0KCQkJCS8vIHNldCBhIG5ldyBlbnRyeQ0KCQkJCSRkb25lID0gJGRiLT5pbnNlcnRPYmplY3QoJyNfX1tbW2NvbXBvbmVudF1dXV9zdGF0aXN0aWMnLCAkY291bnRlcik7DQoJCQkJLy8gaWYgZG9uZSByZXR1cm4gbGFzdCB1c2VkIGlkDQoJCQkJaWYgKCRkb25lKQ0KCQkJCXsNCgkJCQkJJG5ld0lkID0gICRkYi0+aW5zZXJ0aWQoKTsNCgkJCQkJLy8gbWFrZSBzdXJlIHRoZSBhY2Nlc3Mgb2YgYXNzZXQgaXMgc2V0DQoJCQkJCXJldHVybiBzZWxmOjpzZXRBc3NldCgkbmV3SWQsJ3N0YXRpc3RpYycpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWxlSW5mbygka2V5KQ0KCXsNCgkJaWYgKFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OmNoZWNrKCRrZXkpICYmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGtleSwgdHJ1ZSkpID09PSAka2V5KSkNCgkJew0KCQkJLy8gR2V0IGxvY2FsIGtleQ0KCQkJJGxvY2Fsa2V5ID0gc2VsZjo6Z2V0TG9jYWxLZXkoKTsNCgkJCSRvcGVuZXIgPSBuZXcgU3VwZXJfX185OTE3NWY2ZF9kYmE4XzQwODZfOGE2NV81YzRlYzE3NWU2MWRfX19Qb3dlcigkbG9jYWxrZXksIDEyOCk7DQoJCQkka2V5ID0gcnRyaW0oJG9wZW5lci0+ZGVjcnlwdFN0cmluZygka2V5KSwgIlwwIik7DQoJCQkvLyBsb2FkIHRoZSBsaW5rcyBmcm9tIHRoZSBkYXRhYmFzZQ0KCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkvLyBDcmVhdGUgYSBuZXcgcXVlcnkgb2JqZWN0Lg0KCQkJJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCgkJCSRxdWVyeS0+c2VsZWN0KCdzaXplJyk7DQoJCQkkcXVlcnktPmZyb20oJGRiLT5xdW90ZU5hbWUoJyNfX1tbW2NvbXBvbmVudF1dXV9sb2NhbF9saXN0aW5nJykpOw0KCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgna2V5JykgLiAnID0gJy4gJGRiLT5xdW90ZSgka2V5KSk7DQogCQkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJGRiLT5leGVjdXRlKCk7DQoJCQlpZiAoJGRiLT5nZXROdW1Sb3dzKCkpDQoJCQl7DQoJCQkJJGluZm8gPSBhcnJheSgpOw0KCQkJCS8vIGdldCB0aGUgc2l6ZSBvZiB0aGUgZmlsZQ0KCQkJCSRpbmZvWydmaWxlc2l6ZSddID0gJGRiLT5sb2FkUmVzdWx0KCk7DQoJCQkJLy8gZ2V0IHRoZSBtaW1lIHR5cGUNCgkJCQkkaW5mb1sndHlwZSddID0gU3VwZXJfX19mMTFkYzc5MF83MTNlXzQ3MDZfOWE4NV9hMzE4ZWQzYWQ1NmVfX19Qb3dlcjo6bWltZVR5cGUoJGtleSk7DQoJCQkJLy8gcmV0dXJuIGluZm8NCgkJCQlyZXR1cm4gJGluZm87DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RG93bmxvYWRGaWxlTmFtZSgmJHNlcm1vbiwgJGZpbGUsICR0eXBlKQ0KCXsNCgkJLy8gZmlyc3QgZ2V0IGZpbGUgbmFtZSBhbmQgZmlsZSB0eXBlDQoJCSRmaWxlID0gc3RyX3JlcGxhY2UoJ1ZETV9wTGVLX2gwdUVyLycsICcnLCAkZmlsZSk7DQoJCSRmaWxlVHlwZSA9IHBhdGhpbmZvKCRmaWxlLCBQQVRISU5GT19FWFRFTlNJT04pOw0KCQlpZiAoJGZpbGVUeXBlKQ0KCQl7DQoJCQkkZmlsZSA9IHN0cl9yZXBsYWNlKCcuJy4kZmlsZVR5cGUsICcnLCAkZmlsZSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkZmlsZVR5cGUgPSAnZXJyb3InOw0KCQl9DQoJCS8vIG5vdyBidWlsZCBkb3dubG9hZCBuYW1lDQoJCSRkb3dubG9hZE5hbWUgPSBhcnJheSgpOw0KCQkvLyBidWlsZCB0aGUgRG93bmxvYWQgRmlsZSBOYW1lIC0gZmlyc3QgYWRkIHRoZSBwcmVhY2hlciBuYW1lIGlmIHNldA0KCQlpZiAoJHNlcm1vbi0+cHJlYWNoZXIpDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+cHJlYWNoZXJfbmFtZSwnVScpOw0KCQl9DQoJCS8vIGFkZCB0aGUgc2VyaWVzIG5hbWUgaWYgc2V0DQoJCWlmICgkc2VybW9uLT5zZXJpZXMpDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+c2VyaWVzX25hbWUsJ0YnKTsNCgkJfQ0KCQkvLyBhZGQgdGhlIGNhdGVnb3J5IG5hbWUgaWYgc2V0DQoJCWlmICgkc2VybW9uLT5jYXRpZCAmJiBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpjaGVjaygkc2VybW9uLT5jYXRlZ29yeSkpDQoJCXsNCgkJCSRkb3dubG9hZE5hbWVbXSA9IFN1cGVyX19fMWYyOGNiNTNfNjBkOV80ZGIxX2I1MTdfM2M3ZGM2YjQyOWVmX19fUG93ZXI6OnNhZmUoJHNlcm1vbi0+Y2F0ZWdvcnksICdGJyk7DQoJCX0NCgkJaWYgKCdkcm9wYm94X21hbnVhbCcgPT0gJHR5cGUgfHwgJ2xvY2FsJyA9PSAkdHlwZSkNCgkJew0KCQkJLy8gYWRkIHRoZSBtYWluIGZpbGUgbmFtZQ0KCQkJJGRvd25sb2FkTmFtZVtdID0gU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6c2FmZSgkc2VybW9uLT5uYW1lLCdGJyk7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRmaWxlLCdGJyk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkZG93bmxvYWROYW1lW10gPSBTdXBlcl9fXzFmMjhjYjUzXzYwZDlfNGRiMV9iNTE3XzNjN2RjNmI0MjllZl9fX1Bvd2VyOjpzYWZlKCRzZXJtb24tPm5hbWUsJ0YnKTsNCgkJCWlmICgnZXJyb3InID09ICRmaWxlVHlwZSB8fCBzdHJwb3MoJz8nLCAkZmlsZVR5cGUpICE9PSBmYWxzZSB8fCBzdHJwb3MoJyYnLCAkZmlsZVR5cGUpICE9PSBmYWxzZSApDQoJCQl7DQoJCQkJJGZpbGVUeXBlID0gJ21wMyc7IC8vIFRPRE8gd2UgZG9uJ3Qga25vdyB0aGUgdXJsIGZpbGV0eXBlIChzZXR0aW5nIHRvIG1wMyBidXQgdGhpcyBjb3VsZCBiZSB3cm9uZykNCgkJCX0NCgkJfQ0KCQkvLyBub3cgYnVpbGQgdGhlIGRvd25sb2FkIGZpbGUgbmFtZQ0KCQlyZXR1cm4gaW1wbG9kZSgnX18nLCAkZG93bmxvYWROYW1lKS4nLicuJGZpbGVUeXBlOw0KCX0NCg0KCS8qKg0KCSogCWNoZWNrIEV4dGVybmFsIFNvdXJjZSBMb2NhbCBMaXN0aW5nIChkbyB3ZSBoYXZlIHRoZSBmaWxlcykNCgkqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrRXh0ZXJuYWxTb3VyY2VMb2NhbExpc3RpbmcoJHR5cGUsICRnZXQgPSAnbGlua3MnKQ0KCXsNCgkJLy8gZ2V0IHRoZSBsb2NhbCBsaW5rcw0KCQlpZiAoaXNzZXQoc2VsZjo6JHskZ2V0LidfZXh0ZXJuYWxzb3VyY2VfJy4kdHlwZX0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR7JGdldC4nX2V4dGVybmFsc291cmNlXycuJHR5cGV9KSkNCgkJew0KCQkJLy8gcmV0dXJuIHRydWUgd2UgaGF2ZSBsaW5rcyBsb2FkZWQNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRhcmdldCA9IGFycmF5KCdsaW5rcycgPT4gJ3VybCcsICdzZWxlY3QnID0+ICduYW1lJyk7DQoJCQkkYnVpbGQgPSBhcnJheSggJ2F1dG8nID0+IDIsICdtYW51YWwnID0+IDEpOw0KCQkJaWYgKGlzc2V0KCRidWlsZFskdHlwZV0pKQ0KCQkJew0KCQkJCS8vIGxvYWQgdGhlIGxpbmtzIGZyb20gdGhlIGRhdGFiYXNlDQoJCQkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCQkJLy8gQ3JlYXRlIGEgbmV3IHF1ZXJ5IG9iamVjdC4NCgkJCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpOw0KCQkJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdrZXknLCAkdGFyZ2V0WyRnZXRdKSkpOw0KCQkJCSRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fW1tbY29tcG9uZW50XV1dX2xvY2FsX2xpc3RpbmcnKSk7DQoJCQkJJHF1ZXJ5LT53aGVyZSgkZGItPnF1b3RlTmFtZSgnYnVpbGQnKSAuICcgPSAnLiAoaW50KSAkYnVpbGRbJHR5cGVdKTsNCgkJCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdwdWJsaXNoZWQnKSAuICcgPSAxJyk7IC8vIFRPRE8gd2UgY2FuIG5vdyBsaW1pdCB0aGUgbGlua3MgdG8gYWNjZXNzIGdyb3Vwcw0KIAkJCQkvLyBSZXNldCB0aGUgcXVlcnkgdXNpbmcgb3VyIG5ld2x5IHBvcHVsYXRlZCBxdWVyeSBvYmplY3QuDQoJCQkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSRkYi0+ZXhlY3V0ZSgpOw0KCQkJCWlmICgkZGItPmdldE51bVJvd3MoKSkNCgkJCQl7DQoJCQkJCXNlbGY6OiR7JGdldC4nX2V4dGVybmFsc291cmNlXycuJHR5cGV9ID0gJGRiLT5sb2FkQXNzb2NMaXN0KCdrZXknLCAkdGFyZ2V0WyRnZXRdKTsNCgkJCQkJLy8gcmV0dXJuIHRydWUgd2UgaGF2ZSBsaW5rcyBsb2FkZWQNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqIAlnZXQgdGhlIGxvY2Fsa2V5DQoJKiovDQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9jYWxrZXkgPSBhcnJheSgpOw0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TG9jYWxLZXkoJHR5cGUgPSAnYmFzaWNfa2V5JykNCgl7DQoJCWlmICghaXNzZXQoc2VsZjo6JGxvY2Fsa2V5WyR0eXBlXSkpDQoJCXsNCgkJCS8vIGdldCB0aGUgbWFpbiBrZXkNCgkJCXNlbGY6OiRsb2NhbGtleVskdHlwZV0gPSBDb21wb25lbnRIZWxwZXI6OmdldFBhcmFtcygnY29tX1tbW2NvbXBvbmVudF1dXScpLT5nZXQoJHR5cGUsICdsb2NhbEtleTM0ZmRXRWtsJyk7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRsb2NhbGtleVskdHlwZV07DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVFeHRlcm5hbFNvdXJjZSgkaWQsICR0YXJnZXQgPSAwLCAkdHlwZSA9IGZhbHNlLCAkZm9yY2UgPSBmYWxzZSwgJHNsZXV0ZWwgPSBudWxsKQ0KCXsNCgkJJHNvdXJjZSA9IHNlbGY6OmdldFZhcignZXh0ZXJuYWxfc291cmNlJywgKGludCkgJGlkLCAnaWQnLCAnZXh0ZXJuYWxzb3VyY2VzJyk7DQoJCWlmICgxID09ICRzb3VyY2UpIC8vIERyb3Bib3ggaXMgdGhlIHNvdXJjZQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBmaWxlDQoJCQlKTG9hZGVyOjppbXBvcnQoJ2Ryb3Bib3h1cGRhdGVyJywgSlBBVEhfQ09NUE9ORU5UX1NJVEUuJy9oZWxwZXJzJyk7DQoJCQkvLyB1cGRhdGUgdHlwZXMNCgkJCSR0eXBlcyA9IGFycmF5KCdtYW51YWwnLCdhdXRvJyk7DQoJCQkvLyBva2F5IG5vdyB1cGRhdGUgdGhpcyB0eXBlDQoJCQlpZiAoU3VwZXJfX18xZjI4Y2I1M182MGQ5XzRkYjFfYjUxN18zYzdkYzZiNDI5ZWZfX19Qb3dlcjo6Y2hlY2soJHR5cGUpICYmIGluX2FycmF5KCR0eXBlLCR0eXBlcykpDQoJCQl7DQoJCQkJJGRyb3Bib3ggPSBuZXcgRHJvcGJveHVwZGF0ZXIoKTsNCgkJCQlpZiAoJGRyb3Bib3gtPnVwZGF0ZSgkaWQsICR0YXJnZXQsICR0eXBlLCAkZm9yY2UsICRzbGV1dGVsKSkNCgkJCQl7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCQlzZWxmOjpzZXRVcGRhdGVFcnJvcigkaWQsICRkcm9wYm94LT5nZXRFcnJvcnMoKSk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJCXNlbGY6OnNldFVwZGF0ZUVycm9yKCRpZCwgYXJyYXkoVGV4dDo6XygnVGhlIGV4dGVybmFsIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQuJykpKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U291cmNlU3RhdHVzKCRpZCkNCgl7DQoJCS8vIGZpc3QgZ2V0IGVycm9ycyBpZiBhbnkgaXMgZm91bmQNCgkJJGVycm9ycyA9IGFycmF5KCk7DQoJCWlmICgkdGFyZ2V0cyA9IHNlbGY6OmdldEV4dGVybmFsTGlzdGluZ1VwZGF0ZUtleXMoJGlkLCBudWxsLCAxKSkNCgkJew0KCQkJZm9yZWFjaCAoJHRhcmdldHMgYXMgJHRhcmdldCkNCgkJCXsNCgkJCQkka2V5ID0gcHJlZ19yZXBsYWNlKCcvWyAsXSsvJywgJycsIHRyaW0oJHRhcmdldCkpOw0KCQkJCWlmICgkZXJyb3IgPSBzZWxmOjpnZXRVcGRhdGVFcnJvcigwLCAka2V5KSkNCgkJCQl7DQoJCQkJCSRlcnJvcnNbXSA9ICRlcnJvcjsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gY2hlY2sgd2hlbiB3YXMgdGhlIGxhc3QgdXBkYXRlDQoJCSR1cGRhdGVJbmZvID0gc2VsZjo6dXBkYXRlSW5mbygkaWQpOw0KCQlpZiAoISR1cGRhdGVJbmZvKQ0KCQl7DQoJCQkkZXJyb3JzW10gPSBUZXh0OjpfKCdUaGlzIHNvdXJjZSBoYXMgbm8gbG9jYWwgbGlzdGluZyBzZXQuJyk7DQoJCX0NCgkJLy8gYnVpbGQgdGhlIHJldHVybiBzdHJpbmcNCgkJaWYgKGlzc2V0KCR1cGRhdGVJbmZvWydsYXN0J10pIHx8IFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKCRlcnJvcnMpKQ0KCQl7DQoJCQkkYm9keSA9IGFycmF5KCk7DQoJCQkvLyBncmVhdCB3ZSBoYXZlIHNvdXJjZSBzdGF0dXMNCgkJCWlmIChpc3NldCgkdXBkYXRlSW5mb1snbGFzdCddKSkNCgkJCXsNCgkJCQkkYm9keVtdID0gJzxoMz4nLiBUZXh0OjpfKCdMaXN0aW5nIEluZm8nKSAuICc8L2gzPic7DQoJCQkJJGJvZHlbXSA9ICc8cD48Yj4nLiBUZXh0OjpfKCdMYXN0IFVwZGF0ZScpIC4gJzo8L2I+IDxlbT4nLiR1cGRhdGVJbmZvWydsYXN0J107DQoJCQkJJGJvZHlbXSA9ICc8L2VtPjxiciAvPjxiPicuIFRleHQ6Ol8oJ051bWJlciBvZiBGaWxlcyBMaXN0ZWQnKSAuICc6PC9iPiA8ZW0+Jy4kdXBkYXRlSW5mb1sncXR5J107DQoJCQkJJGJvZHlbXSA9ICc8L2VtPjwvcD4nOw0KCQkJfQ0KCQkJLy8gbm93IHNldCBhbnkgZXJyb3JzIGZvdW5kDQoJCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGVycm9ycykpDQoJCQl7DQoJCQkJJGJvZHlbXSA9ICc8aDM+Jy4gVGV4dDo6XygnTm90aWNlIScpIC4gJzwvaDM+JzsNCgkJCQkkYm9keVtdID0gaW1wbG9kZSgnJywgJGVycm9ycyk7DQoJCQl9DQoJCQlyZXR1cm4gJzxhIGNsYXNzPSJidG4gYnRuLXNtYWxsIGJ0bi1zdWNjZXNzIiBocmVmPSIjc291cmNlLXN0YXR1cycuJGlkLiciIGRhdGEtdG9nZ2xlPSJtb2RhbCI+Jy5UZXh0OjpfKCdWaWV3IFVwZGF0ZSBTdGF0dXMnKS4nPC9hPicgDQoJCQkJLiBIdG1sOjpfKCdib290c3RyYXAucmVuZGVyTW9kYWwnLCAnc291cmNlLXN0YXR1cycuJGlkLCBhcnJheSgndGl0bGUnID0+IFRleHQ6Ol8oJ1NvdXJjZSBTdGF0dXMgUmVwb3J0LicpKSwgaW1wbG9kZSgnJywgJGJvZHkpKTsNCgkJfQ0KIAkJLy8gbm8gc3RhdHVzIGZvdW5kDQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZUluZm8oJGlkKQ0KCXsNCgkJJGRiID0gRmFjdG9yeTo6Z2V0RGJvKCk7DQoJCS8vIENyZWF0ZSBhIG5ldyBxdWVyeSBvYmplY3QuDQoJCSRxdWVyeSA9ICRkYi0+Z2V0UXVlcnkodHJ1ZSk7DQoJCSRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLmNyZWF0ZWQnLCdhLm1vZGlmaWVkJykpKTsNCgkJJHF1ZXJ5LT5mcm9tKCRkYi0+cXVvdGVOYW1lKCcjX19bW1tjb21wb25lbnRdXV1fbG9jYWxfbGlzdGluZycsICdhJykpOw0KCQkkcXVlcnktPndoZXJlKCRkYi0+cXVvdGVOYW1lKCdhLmV4dGVybmFsX3NvdXJjZScpIC4gJyA9ICcgLiAoaW50KSAkaWQpOw0KIAkJLy8gUmVzZXQgdGhlIHF1ZXJ5IHVzaW5nIG91ciBuZXdseSBwb3B1bGF0ZWQgcXVlcnkgb2JqZWN0Lg0KCQkkZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSRkYi0+ZXhlY3V0ZSgpOw0KCQlpZiAoJHF0eSA9ICRkYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQkkZGF0YSA9ICRkYi0+bG9hZFJvd0xpc3QoKTsNCgkJCSRsYXN0ID0gMDsNCgkJCWZvcmVhY2ggKCRkYXRhIGFzICRkYXRlcykNCgkJCXsNCgkJCQlmb3JlYWNoICgkZGF0ZXMgYXMgJGRhdGUpDQoJCQkJew0KCQkJCQkkdGltZSA9IHN0cnRvdGltZSgkZGF0ZSk7DQoJCQkJCWlmICgkdGltZSA+ICRsYXN0KQ0KCQkJCQl7DQoJCQkJCQkkbGFzdCA9ICR0aW1lOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJJGluZm9bJ3F0eSddID0gKGludCkgJHF0eTsNCgkJCSRpbmZvWydsYXN0J10gPSBzZWxmOjpmYW5jeURhdGUoJGxhc3QpOw0KCQkJcmV0dXJuICRpbmZvOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVwZGF0ZUVycm9yKCRpZCwgJGZpbGVLZXkgPSBudWxsKQ0KCXsNCgkJLy8gZ2V0IHVwZGF0ZSBlcnJvciBmcm9tIGZpbGUNCgkJaWYgKCRmaWxlS2V5KQ0KCQl7DQoJCQkkZmlsZV9wYXRoID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0UGF0aCgncGF0aCcsICd1cGRhdGVlcnJvcicsICd0eHQnLCAkZmlsZUtleSwgSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1IpOw0KCQkJLy8gY2hlY2sgaWYgaXQgaXMgc2V0DQoJCQlpZiAoKCR0ZXh0ID0gU3VwZXJfX19hMjIzYjMxZV9lYTFkXzRjZGZfOTJhZV81ZjliZWNmZmFmZjBfX19Qb3dlcjo6Z2V0Q29udGVudCgkZmlsZV9wYXRoLCBGQUxTRSkpICE9PSBGQUxTRSkNCgkJCXsNCgkJCQkvLyBubyBlcnJvciBvbiBzdWNjZXNzDQoJCQkJaWYgKCdzdWNjZXNzJyAhPSAkdGV4dCkNCgkJCQl7DQoJCQkJCXJldHVybiAkdGV4dDsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJZWxzZWlmIChpc3NldChzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0pICYmIFN1cGVyX19fMGE1OWM2NWNfOWRhZl80YmM5X2JhZjRfZTA2M2ZmOWU2YThhX19fUG93ZXI6OmNoZWNrKHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkpDQoJCXsNCgkJCXJldHVybiAnPHVsPjxsaT4nLmltcGxvZGUoJzwvbGk+PGxpPicsIHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkuJzwvbGk+PC91bD4nOw0KCQl9DQoJCXJldHVybiBUZXh0OjpfKCdVbmtub3duIGVycm9yIGhhcyBvY2N1cnJlZC4nKTsNCgl9DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNldFVwZGF0ZUVycm9yKCRpZCwgJGVycm9yQXJyYXkpDQoJew0KCQlpZiAoU3VwZXJfX18wYTU5YzY1Y185ZGFmXzRiYzlfYmFmNF9lMDYzZmY5ZTZhOGFfX19Qb3dlcjo6Y2hlY2soJGVycm9yQXJyYXkpICYmICRpZCA+IDApDQoJCXsNCgkJCWZvcmVhY2ggKCRlcnJvckFycmF5IGFzICRlcnJvcikNCgkJCXsNCgkJCQlpZiAoIWlzc2V0KHNlbGY6OiR1cGRhdGVFcnJvcnNbJGlkXSkpDQoJCQkJew0KCQkJCQlzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF0gPSBhcnJheSgpOw0KCQkJCX0NCgkJCQlzZWxmOjokdXBkYXRlRXJyb3JzWyRpZF1bXSA9ICRlcnJvcjsNCgkJCX0NCgkJfQ0KCX0NCltDVVNUT01DT0RFPW5pY2VGYW5jeURhdGVdDQpbQ1VTVE9NQ09ERT1jdXJsV29ya2VySGVscGVyXQ0KW0NVU1RPTUNPREU9bG9ja2VyXQ==', '', '', '', '', '', '', '', 'IyAjIyNDb21wb25lbnRfbmFtZSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KICFbIyMjQ29tcG9uZW50X25hbWUjIyMgaW1hZ2VdKGh0dHBzOi8vZ2l0LnZkbS5kZXYvY2hyaXN0aWFuL0pvb21sYS1TZXJtb24tRGlzdHJpYnV0b3IvcmF3L2JyYW5jaC9tYXN0ZXIvYWRtaW4vYXNzZXRzL2ltYWdlcy92ZG0tY29tcG9uZW50LmpwZyAiVGhlICMjI0NvbXBvbmVudF9uYW1lIyMjIikNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KVGhlIGJlc3Qgd2F5IHRvIHNlZSBhbGwgeW91ciBvcHRpb25zIGlzIHRvIGluc3RhbGwgdGhpcyBjb21wb25lbnQgb24geW91IEpvb21sYSB3ZWJzaXRlIGFuZCB0ZXN0IGFsbCBmZWF0dXJlcyB5b3Vyc2VsZi4gSGVyZSBpcyBhIFtkaXJlY3QgZG93bmxvYWQgbGlua10oaHR0cHM6Ly9naXQudmRtLmRldi9jaHJpc3RpYW4vSm9vbWxhLVNlcm1vbi1EaXN0cmlidXRvci9hcmNoaXZlL21hc3Rlci56aXApDQoNCiAqKklmIHlvdSBsaWtlIG91ciBjb21wb25lbnQgcGxlYXNlIHJhdGUgaXQgb24gdGhlIFtKb29tbGEgSW5kZXhdKGh0dHA6Ly9leHRlbnNpb25zLmpvb21sYS5vcmcvZXh0ZW5zaW9ucy9leHRlbnNpb24vbGl2aW5nL3JlbGlnaW9uL3Nlcm1vbi1kaXN0cmlidXRvcikqKg0KDQojIyMgRXhhbXBsZSBXZWJzaXRlLCBUaGF0IEhhcyBPdmVyIDYwMDAgQXVkaW8gRmlsZXMNCg0KW0xvdWRWb2ljZS5vcmddKGh0dHA6Ly93d3cubG91ZHZvaWNlLm9yZykNCltUcnVlQ2hyaXN0aWFuLkNodXJjaF0oaHR0cHM6Ly90cnVlY2hyaXN0aWFuLmNodXJjaC8pDQoNCiMjIyBTb21lIFZpZGVvIERlbW9uc3RyYXRpb25zDQoNCisgW1NldHVwIG92ZXJ2aWV3XShodHRwczovL3lvdXR1LmJlL3lNUHAxQ3AzV18wP3Q9MjBtOHMpDQorIFtTZXR1cCBEcm9wYm94XShodHRwczovL3lvdXR1LmJlL2J0cEtGRGswLWRJKQ0KDQojIEJ1aWxkIERldGFpbHMNCg0KKyAqQ29tcGFueSo6IFsjIyNDT01QQU5ZTkFNRSMjI10oIyMjQVVUSE9SV0VCU0lURSMjIykNCisgKkF1dGhvcio6IFsjIyNBVVRIT1IjIyNdKG1haWx0bzojIyNBVVRIT1JFTUFJTCMjIykNCisgKk5hbWUqOiBbIyMjQ29tcG9uZW50X25hbWUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6ICMjI1ZFUlNJT04jIyMNCisgKkNvcHlyaWdodCo6ICMjI0NPUFlSSUdIVCMjIw0KKyAqTGljZW5zZSo6ICMjI0xJQ0VOU0UjIyMNCg0KIyMgQnVpbGQgVGltZSA6aG91cmdsYXNzOg0KDQoqKiMjI3RvdGFsSG91cnMjIyMgSG91cnMqKiBvciAqKiMjI3RvdGFsRGF5cyMjIyBFaWdodCBIb3VyIERheXMqKiAoYWN0dWFsIHRpbWUgdGhlIGF1dGhvciBzYXZlZCAtDQpkdWUgdG8gW0F1dG9tYXRlZCBDb21wb25lbnQgQnVpbGRlcl0oaHR0cHM6Ly93d3cuam9vbWxhY29tcG9uZW50YnVpbGRlci5jb20pKQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiBuZXZlciBtYWtpbmcgb25lIG1pc3Rha2Ugb3IgdGFraW5nIGFueSBjb2ZmZWUgYnJlYWsuKQ0KDQorICpMaW5lIGNvdW50KjogKiojIyNMSU5FX0NPVU5UIyMjKioNCisgKkZpbGUgY291bnQqOiAqKiMjI0ZJTEVfQ09VTlQjIyMqKg0KKyAqRm9sZGVyIGNvdW50KjogKiojIyNGT0xERVJfQ09VTlQjIyMqKg0KDQoqKiMjI2FjdHVhbEhvdXJzU3BlbnQjIyMgSG91cnMqKiBvciAqKiMjI2FjdHVhbERheXNTcGVudCMjIyBFaWdodCBIb3VyIERheXMqKiAodGhlIGFjdHVhbCB0aW1lIHRoZSBhdXRob3Igc3BlbnQpDQoNCj4gKHdpdGggdGhlIGZvbGxvd2luZyBicmVhayBkb3duOg0KPiAqKmRlYnVnZ2luZyBAIyMjZGVidWdnaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDQ7DQo+ICoqcGxhbm5pbmcgQCMjI3BsYW5uaW5nSG91cnMjIyNob3VycyoqID0gY29kaW5ndGltZSAvIDc7DQo+ICoqbWFwcGluZyBAIyMjbWFwcGluZ0hvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyAxMDsNCj4gKipvZmZpY2UgQCMjI29mZmljZUhvdXJzIyMjaG91cnMqKiA9IGNvZGluZ3RpbWUgLyA2OykNCg0KKiojIyNhY3R1YWxUb3RhbEhvdXJzIyMjIEhvdXJzKiogb3IgKiojIyNhY3R1YWxUb3RhbERheXMjIyMgRWlnaHQgSG91ciBEYXlzKioNCihhIHRvdGFsIG9mIHRoZSByZWFsaXN0aWMgdGltZSBmcmFtZSBmb3IgdGhpcyBwcm9qZWN0KQ0KDQo+IChpZiBjcmVhdGluZyBhIGZvbGRlciBhbmQgZmlsZSB0b29rICoqNSBzZWNvbmRzKiogYW5kIHdyaXRpbmcgb25lIGxpbmUgb2YgY29kZSB0b29rICoqMTAgc2Vjb25kcyoqLA0KPiB3aXRoIHRoZSBub3JtYWwgZXZlcnlkYXkgcmVhbGl0aWVzIGF0IHRoZSBvZmZpY2UsIHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBvbmVudCBwbGFubmluZywgbWFwcGluZyAmIGRlYnVnZ2luZy4pDQoNClByb2plY3QgZHVyYXRpb246ICoqIyMjcHJvamVjdFdlZWtUaW1lIyMjIHdlZWtzKiogb3IgKiojIyNwcm9qZWN0TW9udGhUaW1lIyMjIG1vbnRocyoqDQoNCj4gVGhpcyAqKmNvbXBvbmVudCoqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8p', 1, '', 'A sermon distributor that links to Dropbox.', '', '', 'SermonDistributor (public) J5', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', '', 2, 'https://git.vdm.dev/christian/Joomla-Sermon-Distributor/raw/branch/5.x/sermondistributor_update_server.xml', 'https://www.vdm.io/', '', 'c5rhaxX7uhTwV9PXKN4f17ZBCnqfgXa+m8DRot2YmIA=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"50\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\CMS\\\\Filesystem\\\\File;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\",\"power_site_helper\":[]}}', 1, 5, '', 1, 51), +(89, 1, 1, 1, '', 1, '', '', '', 1, 1, '', 1, '', '', 1, 1, 1, 1, '', 1, '', 1, 1, 1, 1, '', 3, 1, 3, 2, 'Llewellyn van der Merwe', '/var/www/jcb_j4', 'JCB.txt', '', '', 'Vast Development Method', '4.0.0-rc1', 'Copyright (C) 2015 Vast Development Method. All rights reserved.', '2015-04-30 12:04:35', '', 'cpBTiwUUdMl4NaaOtDjZq1+0i8wqscXxjPW2RphsorY=', 'AJHOIg7SdMkXmFuvZ4PJ7SzL+FFFI51zsjU+6JHkhHo=', '', 'uRKIManIX3JIt/6bEDE3kVzH+WiGWQ7lv1VI0kjPCww=', 'LmZpZWxkTWVkaXVtIHsgd2lkdGg6IDEyMHB4OyB9DQouZmllbGRMYXJnZSB7IHdpZHRoOiAzMjBweDsgfQ0KLmZpZWxkTWlkIHsgd2lkdGg6IDgwcHg7IH0NCi5maWVsZEZ1bGwgeyB3aWR0aDogMTAwJTsgfQ0KLmZpZWxkU21hbGwgeyB3aWR0aDogNjBweDsgfQ0KY29kZSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAzcHg7fQ==', '', '', 1, '', 'The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.\r\n\r\nWhether you\'re a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!', 'joomla@vdm.io', '', 'https://vdm.bz/component-builder-self', 'pvFpmPCET6+0v1gpe5YIWYo8OEB0FhESnYmWwRahfiY=', '', '1e25ffd3-3535-4f6c-8cb4-d3418862c952', 'images/vdm/jcb500.jpg', '', 'https://git.vdm.dev/joomla/Component-Builder', 'GNU General Public License version 2 or later; see LICENSE.txt', 1, '✓', '2024-04-27 10:51:26', 2, 'Component Builder', 'Componentbuilder', 'VDM', 4, 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', '', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlckhlbHBlckJvdGhd', '', '', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9ZGF0YWJhc2VTY2hlbWFDaGVja0NhbGwrJHRoaXMtPmFwcF0=', 'W0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskdGhpcy0+YXBwXQ==', 'W0NVU1RPTUNPREU9Y29tcG9uZW50QnVpbGRlclByZWZsaWdodFVwZGF0ZUpmaXZlXQ0KW0NVU1RPTUNPREU9cGhwQ29uZmlndXJhdGlvbkNoZWNrQ2FsbCskdGhpcy0+YXBwXQ==', 'CQkvLyB0aGUgU2Vzc2lvbiBrZWVwcyB0cmFjayBvZiBhbGwgZGF0YSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24gb2YgdGhpcyB1c2VyDQoJCXNlbGY6OmxvYWRTZXNzaW9uKCk7', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlclJlYWRNZV0=', 1, '', 'Builds Complex Joomla Components', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMSW5zdGFsbF0=', 'W0NVU1RPTUNPREU9Y29tcG9uZW50YnVpbGRlck15U1FMVW5pbnN0YWxsXQ==', 'Component Builder (Public) J4', '.git, .github, .gitignore, .idea, .gitea, SECURITY.md, .editorconfig, .octojpack', '', 3, 2, 'https://git.vdm.dev/joomla/Component-Builder/raw/branch/4.x/componentbuilder_update_server.xml', 'https://dev.vdm.io', '', 'GfWpBeuAOZ83sPk5r1IW+rLmnkPElMrAlKHTjwyy4GY=', '', '{\"language_options\":{\"activate\":\"0\",\"use_percentagelanguageadd\":\"1\",\"percentagelanguageadd\":\"0\"},\"joomla_component_headers\":{\"add_admin_component\":\"0\",\"admin_component\":\"\",\"power_admin_component\":[],\"add_site_component\":\"0\",\"site_component\":\"\",\"power_site_component\":[],\"add_admin_helper\":\"1\",\"admin_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\\r\\nuse Joomla\\\\CMS\\\\Session\\\\Session;\",\"power_admin_helper\":[],\"add_site_helper\":\"1\",\"site_helper\":\"use Joomla\\\\Archive\\\\Archive;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Folder;\\r\\nuse Joomla\\\\CMS\\\\Filesystem\\\\Path;\\r\\nuse Joomla\\\\CMS\\\\Session\\\\Session;\",\"power_site_helper\":[]}}', 1, 27, '', 1, 1); -- -- Dumping data for table `#__componentbuilder_joomla_plugin` @@ -2057,9 +2140,30 @@ INSERT INTO `#__componentbuilder_joomla_component` (`id`, `add_admin_event`, `ad INSERT INTO `#__componentbuilder_joomla_plugin` (`id`, `add_head`, `add_php_method_uninstall`, `add_php_postflight_install`, `add_php_postflight_update`, `add_php_preflight_install`, `add_php_preflight_uninstall`, `add_php_preflight_update`, `add_php_script_construct`, `add_sales_server`, `add_sql`, `add_sql_uninstall`, `add_update_server`, `addreadme`, `class_extends`, `description`, `fields`, `guid`, `head`, `joomla_plugin_group`, `method_selection`, `main_class_code`, `name`, `php_method_uninstall`, `php_postflight_install`, `php_postflight_update`, `php_preflight_install`, `php_preflight_uninstall`, `php_preflight_update`, `php_script_construct`, `plugin_version`, `property_selection`, `readme`, `sales_server`, `sql`, `sql_uninstall`, `system_name`, `update_server`, `update_server_target`, `update_server_url`, `params`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES (1, 1, '', '', '', 1, '', '', '', '', '', '', '', 1, 4, 'The plugin to fully integrate componentbuilder with the privacy suite of Joomla.', '{}', '518f7be7-140c-47d3-9fb2-b6717230e0fc', 'dXNlIEpvb21sYVxVdGlsaXRpZXNcQXJyYXlIZWxwZXI7DQoNCkpMb2FkZXI6OnJlZ2lzdGVyKCdQcml2YWN5UGx1Z2luJywgSlBBVEhfQURNSU5JU1RSQVRPUiAuICcvY29tcG9uZW50cy9jb21fcHJpdmFjeS9oZWxwZXJzL3BsdWdpbi5waHAnKTsNCkpMb2FkZXI6OnJlZ2lzdGVyKCdQcml2YWN5UmVtb3ZhbFN0YXR1cycsIEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX3ByaXZhY3kvaGVscGVycy9yZW1vdmFsL3N0YXR1cy5waHAnKTsNCkpMb2FkZXI6OnJlZ2lzdGVyKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCBKUEFUSF9BRE1JTklTVFJBVE9SIC4gJy9jb21wb25lbnRzL2NvbV9bW1tjb21wb25lbnRdXV0vaGVscGVycy9bW1tjb21wb25lbnRdXV0ucGhwJyk7IA==', 10, '{\"method_selection0\":{\"method\":\"51\"},\"method_selection1\":{\"method\":\"52\"},\"method_selection2\":{\"method\":\"53\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICAkYXBwOw0KDQoJLyoqDQoJICogRGF0YWJhc2Ugb2JqZWN0DQoJICoNCgkgKiBAdmFyICAgIERhdGFiYXNlRHJpdmVyDQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgICRkYjsNCg0KCS8qKg0KCSAqIEFmZmVjdHMgY29uc3RydWN0b3IgYmVoYXZpb3IuIElmIHRydWUsIGxhbmd1YWdlIGZpbGVzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuDQoJICoNCgkgKiBAdmFyICAgIGJvb2xlYW4NCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgcmVtb3ZlIGluZm9ybWF0aW9uIHJlcXVlc3QgY2FuIGJlIHByb2Nlc3NlZA0KCSAqDQoJICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgJHJlcXVlc3QgIFRoZSByZXF1ZXN0IHJlY29yZCBiZWluZyBwcm9jZXNzZWQNCgkgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICAkdXNlciAgICAgVGhlIHVzZXIgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0IGlmIGF2YWlsYWJsZQ0KCSAqDQoJICogQHJldHVybiAgUHJpdmFjeVJlbW92YWxTdGF0dXMNCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblByaXZhY3lDYW5SZW1vdmVEYXRhKFByaXZhY3lUYWJsZVJlcXVlc3QgJHJlcXVlc3QsIEpVc2VyICR1c2VyID0gbnVsbCkNCgl7DQoJCSRzdGF0dXMgPSBuZXcgUHJpdmFjeVJlbW92YWxTdGF0dXM7DQoNCgkJLy8gVGhpcyBwbHVnaW4gb25seSBwcm9jZXNzZXMgZGF0YSBmb3IgcmVnaXN0ZXJlZCB1c2VyIGFjY291bnRzDQoJCWlmICghJHVzZXIpDQoJCXsNCgkJCXJldHVybiAkc3RhdHVzOw0KCQl9DQoNCgkJLy8gY2hlY2sgaWYgdGhlIGhlbHBlciBtZXRob2QgaXMgc2V0IGluIHRoZSBjb21wb25lbnQNCgkJaWYgKG1ldGhvZF9leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsICdvblByaXZhY3lDYW5SZW1vdmVEYXRhJykpDQoJCXsNCgkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6b25Qcml2YWN5Q2FuUmVtb3ZlRGF0YSgkdGhpcywgJHN0YXR1cywgJHJlcXVlc3QsICR1c2VyKTsNCgkJfQ0KDQoJCXJldHVybiAkc3RhdHVzOw0KCX0NCg0KCS8qKg0KCSAqIFByb2Nlc3NlcyBhbiBleHBvcnQgcmVxdWVzdCBmb3IgSm9vbWxhIGNvcmUgdXNlciBkYXRhDQoJICoNCgkgKiBAcGFyYW0gICBQcml2YWN5VGFibGVSZXF1ZXN0ICAkcmVxdWVzdCAgVGhlIHJlcXVlc3QgcmVjb3JkIGJlaW5nIHByb2Nlc3NlZA0KCSAqIEBwYXJhbSAgIEpVc2VyICAgICAgICAgICAgICAgICR1c2VyICAgICBUaGUgdXNlciBhY2NvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgaWYgYXZhaWxhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBQcml2YWN5RXhwb3J0RG9tYWluW10NCgkgKg0KCSAqIEBzaW5jZSAgIDEuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBvblByaXZhY3lFeHBvcnRSZXF1ZXN0KFByaXZhY3lUYWJsZVJlcXVlc3QgJHJlcXVlc3QsIEpVc2VyICR1c2VyID0gbnVsbCkNCgl7DQoJCSRkb21haW5zID0gYXJyYXkoKTsNCg0KCQkvLyBUaGlzIHBsdWdpbiBvbmx5IHByb2Nlc3NlcyBkYXRhIGZvciByZWdpc3RlcmVkIHVzZXIgYWNjb3VudHMNCgkJaWYgKCEkdXNlcikNCgkJew0KCQkJcmV0dXJuICRkb21haW5zOw0KCQl9DQoNCgkJLy8gY2hlY2sgaWYgdGhlIGhlbHBlciBtZXRob2QgaXMgc2V0IGluIHRoZSBjb21wb25lbnQNCgkJaWYgKG1ldGhvZF9leGlzdHMoJ1tbW0NvbXBvbmVudF1dXUhlbHBlcicsICdvblByaXZhY3lFeHBvcnRSZXF1ZXN0JykpDQoJCXsNCgkJCVtbW0NvbXBvbmVudF1dXUhlbHBlcjo6b25Qcml2YWN5RXhwb3J0UmVxdWVzdCgkdGhpcywgJGRvbWFpbnMsICRyZXF1ZXN0LCAkdXNlcik7DQoJCX0NCg0KCQlyZXR1cm4gJGRvbWFpbnM7DQoJfQ0KDQoJLyoqDQoJICogUmVtb3ZlcyB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSByZW1vdmUgaW5mb3JtYXRpb24gcmVxdWVzdA0KCSAqDQoJICogQHBhcmFtICAgUHJpdmFjeVRhYmxlUmVxdWVzdCAgJHJlcXVlc3QgIFRoZSByZXF1ZXN0IHJlY29yZCBiZWluZyBwcm9jZXNzZWQNCgkgKiBAcGFyYW0gICBKVXNlciAgICAgICAgICAgICAgICAkdXNlciAgICAgVGhlIHVzZXIgYWNjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0IGlmIGF2YWlsYWJsZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uUHJpdmFjeVJlbW92ZURhdGEoUHJpdmFjeVRhYmxlUmVxdWVzdCAkcmVxdWVzdCwgSlVzZXIgJHVzZXIgPSBudWxsKQ0KCXsNCgkJLy8gVGhpcyBwbHVnaW4gb25seSBwcm9jZXNzZXMgZGF0YSBmb3IgcmVnaXN0ZXJlZCB1c2VyIGFjY291bnRzDQoJCWlmICghJHVzZXIpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCS8vIGNoZWNrIGlmIHRoZSBoZWxwZXIgbWV0aG9kIGlzIHNldCBpbiB0aGUgY29tcG9uZW50DQoJCWlmIChtZXRob2RfZXhpc3RzKCdbW1tDb21wb25lbnRdXV1IZWxwZXInLCAnb25Qcml2YWN5UmVtb3ZlRGF0YScpKQ0KCQl7DQoJCQlbW1tDb21wb25lbnRdXV1IZWxwZXI6Om9uUHJpdmFjeVJlbW92ZURhdGEoJHRoaXMsICRyZXF1ZXN0LCAkdXNlcik7DQoJCX0NCgl9', '[[[Component]]]', 'Ly8gUEhQIE1ldGhvZCAodW5pbnN0YWxsKQ==', 'Ly8gUEhQIFBvc3RmbGlnaHQgKGluc3RhbGwp', 'Ly8gUEhQIFBvc3RmbGlnaHQgKHVwZGF0ZSk=', 'CQkJLy8gY2hlY2sgdGhhdCBbW1tjb21wb25lbnRdXV0gaXMgaW5zdGFsbGVkDQoJCQkkcGF0aFRvQ29yZSA9IEpQQVRIX0FETUlOSVNUUkFUT1IgLiAnL2NvbXBvbmVudHMvY29tX1tbW2NvbXBvbmVudF1dXS9oZWxwZXJzL1tbW2NvbXBvbmVudF1dXS5waHAnOw0KCQkJaWYgKCFKRmlsZTo6ZXhpc3RzKCRwYXRoVG9Db3JlKSkNCgkJCXsNCgkJCQkkYXBwLT5lbnF1ZXVlTWVzc2FnZSgnW1tbY29tcG9uZW50X2Fjcm9ueW1dXV0gbXVzdCBmaXJzdCBiZSBpbnN0YWxsZWQgZnJvbSA8YSBocmVmPSJbW1tnZXRfY29tcG9uZW50X2xpbmtdXV0iIHRhcmdldD0iX2JsYW5rIj5bW1tjb21wb25lbnRfbGlua19uYW1lXV1dPC9hPi4nLCAnZXJyb3InKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9', 'Ly8gUEhQIFByZWZsaWdodCAodW5pbnN0YWxsKQ==', 'Ly8gUEhQIFByZWZsaWdodCAodXBkYXRlKQ==', '', '1.0.0', '{\"property_selection0\":{\"property\":\"31\"},\"property_selection1\":{\"property\":\"32\"},\"property_selection2\":{\"property\":\"33\"}}', 'IyAjIyNQTFVHSU5fTkFNRSMjIyAoIyMjVkVSU0lPTiMjIykNCg0KIyMjREVTQ1JJUFRJT04jIyMNCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbIyMjQ09NUEFOWU5BTUUjIyNdKCMjI0FVVEhPUldFQlNJVEUjIyMpDQorICpBdXRob3IqOiBbIyMjQVVUSE9SIyMjXShtYWlsdG86IyMjQVVUSE9SRU1BSUwjIyMpDQorICpWZXJzaW9uKjogIyMjVkVSU0lPTiMjIw0KKyAqQ29weXJpZ2h0KjogIyMjQ09QWVJJR0hUIyMjDQorICpMaWNlbnNlKjogIyMjTElDRU5TRSMjIw==', '', '', '', 'Global Privacy', '', 1, 'https://www.vdm.io/updates/componentbuilder_global_privacy.xml', '', 1, '2019-07-16 00:49:50', '2020-05-24 22:49:38', 29, '', 1), (21, '', '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'Plugin to autoload the powers of componentbuilder', '{}', '86dd28b5-18d4-437e-8a53-7eaf23478fc8', '', 8, '{}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSBmYWxzZTsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yLg0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAmJHN1YmplY3QgIFRoZSBvYmplY3QgdG8gb2JzZXJ2ZSAtLSBldmVudCBkaXNwYXRjaGVyLg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJGNvbmZpZyAgICBBbiBvcHRpb25hbCBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjb25maWd1cmF0aW9uIHNldHRpbmdzLg0KCSAqDQoJICogQHNpbmNlICAgMS42DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdWJqZWN0LCAkY29uZmlnKQ0KCXsNCgkJcGFyZW50OjpfX2NvbnN0cnVjdCgkc3ViamVjdCwgJGNvbmZpZyk7IyMjUExVR0lOX1BPV0VSX0FVVE9MT0FERVIjIyMNCgl9', '[[[Component]]] Powers Autoloader', '', '', '', 'Ly8gV0hBVD8=', '', '', '', '1.0.1', '{\"property_selection0\":{\"property\":\"25\"},\"property_selection1\":{\"property\":\"27\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Powers Autoloader', '', 1, '', '', 1, '2021-11-11 02:22:02', '2024-03-01 21:18:38', 16, '', 8), -(24, '', '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'Add Access Token to easy update [[[Component]]]', '{}', '29ac30d2-1c1a-4b9e-9cfa-c5fcb08caa01', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw==', 12, '{\"method_selection0\":{\"method\":\"103\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogb25JbnN0YWxsZXJCZWZvcmVQYWNrYWdlRG93bmxvYWQuDQoJICoNCgkgKiBGb3IgbW9kaWZpY2F0aW9uIG9mIFVSTCBhbmQgaGVhZGVycyBiZWZvcmUgcGFja2FnZSBkb3dubG9hZA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uSW5zdGFsbGVyQmVmb3JlUGFja2FnZURvd25sb2FkKCYkdXJsLCAmJGhlYWRlcnMpDQoJew0KCQkvLyBzZXQgdGhlIFVSSSBvYmplY3QNCgkJJHVyaSA9IFxKVXJpOjpnZXRJbnN0YW5jZSgkdXJsKTsNCgkJJHBhcnRzID0gZXhwbG9kZSgnLycsICR1cmktPmdldFBhdGgoKSk7DQoNCgkJLy8gY2hlY2sgdGhhdCB0aGlzIGlzIG91ciBBUEkNCgkJaWYgKCR1cmktPmdldEhvc3QoKSA9PSAnW1tbZ2l0ZWFfdXJsXV1dJyAmJiBpbl9hcnJheSgnW1tbZ2l0ZWFfcGFja2FnZV9uYW1lXV1dJywgJHBhcnRzKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSB0b2tlbiBpZiBzZXQNCgkJCSR0b2tlbiA9IFxKQ29tcG9uZW50SGVscGVyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdnaXRlYV90b2tlbicsIGZhbHNlKTsNCgkJCS8vIG9ubHkgYWRkIGlmIHRva2VuIGlzIHNldA0KCQkJaWYgKCR0b2tlbikNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIHRva2VuDQoJCQkJJHVyaS0+c2V0VmFyKCdhY2Nlc3NfdG9rZW4nLCAkdG9rZW4pOw0KCQkJCS8vIHVwZGF0ZSB0aGUgVVJMDQoJCQkJJHVybCA9ICR1cmktPnRvU3RyaW5nKCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IHRoZSByZXR1cm4gVVJMDQoJCQkJJHJldHVybiA9IHVybGVuY29kZShiYXNlNjRfZW5jb2RlKChzdHJpbmcpIFxKVXJpOjpnZXRJbnN0YW5jZSgpKSk7DQoJCQkJLy8gc2V0IHRoZSB1cmxzDQoJCQkJJGdldF9hY2Nlc3NfdG9rZW5fdXJsID0gJyJodHRwczovL1tbW2dpdGVhX3VybF1dXS91c2VyL3NldHRpbmdzL2FwcGxpY2F0aW9ucyIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSInIC4gVGV4dDo6XygnR2V0IEFjY2VzcyBUb2tlbicpIC4gJyInOw0KCQkJCSRzZXRfYWNjZXNzX3Rva2VuX3VybCA9ICciJyAuIFxKVXJpOjpyb290KCkgLiAnYWRtaW5pc3RyYXRvci9pbmRleC5waHA/b3B0aW9uPWNvbV9jb25maWcmdmlldz1jb21wb25lbnQmY29tcG9uZW50PWNvbV9bW1tjb21wb25lbnRdXV0mcGF0aD0mcmV0dXJuPScgLiAkcmV0dXJuIC4gJyIgdGl0bGU9IicgLiBUZXh0OjpfKCdTZXQgQWNjZXNzIFRva2VuJykgLiAnIic7DQoJCQkJLy8gbG9hZCB0aGUgbWVzc2FnZQ0KCQkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKA0KCQkJCQlUZXh0OjpzcHJpbnRmKCJJZiB0aGVyZSB3YXMgYSBkb3dubG9hZC91cGRhdGUgZXJyb3IsIGl0J3MgcHJvYmFibHkgYmVjYXVzZSB0aGUgPGEgaHJlZj0lcyA+QVBJIEFjY2VzcyBUb2tlbjwvYT4gZm9yIHVwZGF0ZXMgb2YgW1tbY29tcG9uZW50XV1dIGhhcyBub3QgYmVlbiBzZXQsIHlvdSBjYW4gc2V0IHRoaXMgYWNjZXNzIHRva2VuIGluIHRoZSA8YSBocmVmPSVzID5nbG9iYWwgb3B0aW9ucyB0YWI8L2E+LiIsDQoJCQkJCQkkZ2V0X2FjY2Vzc190b2tlbl91cmwsDQoJCQkJCQkkc2V0X2FjY2Vzc190b2tlbl91cmwNCgkJCQkJKSwgJ25vdGljZScpOw0KCQkJfQ0KCQl9DQoJfQ0K', 'componentbuilder', '', '', '', 'Ly8gbmVlZHMgZml4', '', '', '', '1.0.2', '{\"property_selection0\":{\"property\":\"39\"},\"property_selection1\":{\"property\":\"37\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Update (git.vdm.dev)', '', 1, '', '', 1, '2021-12-08 07:42:39', '2024-03-01 21:17:50', 17, '', 9), +(24, '', '', '', '', 1, '', '', '', '', '', '', '', '', 1, 'Add Access Token to easy update [[[Component]]]', '{}', '29ac30d2-1c1a-4b9e-9cfa-c5fcb08caa01', 'dXNlIEpvb21sYVxDTVNcQXBwbGljYXRpb25cQ01TQXBwbGljYXRpb247DQp1c2UgSm9vbWxhXENNU1xQbHVnaW5cQ01TUGx1Z2luOw==', 12, '{\"method_selection0\":{\"method\":\"103\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBBZmZlY3RzIGNvbnN0cnVjdG9yIGJlaGF2aW9yLiBJZiB0cnVlLCBsYW5ndWFnZSBmaWxlcyB3aWxsIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Lg0KCSAqDQoJICogQHZhciAgICBib29sZWFuDQoJICogQHNpbmNlICAxLjAuMA0KCSAqLw0KCXByb3RlY3RlZCAgJGF1dG9sb2FkTGFuZ3VhZ2UgPSB0cnVlOw0KDQoJLyoqDQoJICogb25JbnN0YWxsZXJCZWZvcmVQYWNrYWdlRG93bmxvYWQuDQoJICoNCgkgKiBGb3IgbW9kaWZpY2F0aW9uIG9mIFVSTCBhbmQgaGVhZGVycyBiZWZvcmUgcGFja2FnZSBkb3dubG9hZA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMS4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uSW5zdGFsbGVyQmVmb3JlUGFja2FnZURvd25sb2FkKCYkdXJsLCAmJGhlYWRlcnMpDQoJew0KCQkvLyBzZXQgdGhlIFVSSSBvYmplY3QNCgkJJHVyaSA9IEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpnZXRJbnN0YW5jZSgkdXJsKTsNCgkJJHBhcnRzID0gZXhwbG9kZSgnLycsICR1cmktPmdldFBhdGgoKSk7DQoNCgkJLy8gY2hlY2sgdGhhdCB0aGlzIGlzIG91ciBBUEkNCgkJaWYgKCR1cmktPmdldEhvc3QoKSA9PSAnW1tbZ2l0ZWFfdXJsXV1dJyAmJiBpbl9hcnJheSgnW1tbZ2l0ZWFfcGFja2FnZV9uYW1lXV1dJywgJHBhcnRzKSkNCgkJew0KCQkJLy8gZ2V0IHRoZSB0b2tlbiBpZiBzZXQNCgkJCSR0b2tlbiA9IEpvb21sYV9fX2FlYjhlNDYzXzI5MWZfNDQ0NV85YWM0XzM0YjYzN2MxMmRiZF9fX1Bvd2VyOjpnZXRQYXJhbXMoJ2NvbV9bW1tjb21wb25lbnRdXV0nKS0+Z2V0KCdnaXRlYV90b2tlbicsIGZhbHNlKTsNCgkJCS8vIG9ubHkgYWRkIGlmIHRva2VuIGlzIHNldA0KCQkJaWYgKCR0b2tlbikNCgkJCXsNCgkJCQkvLyBhZGQgdGhlIHRva2VuDQoJCQkJJHVyaS0+c2V0VmFyKCdhY2Nlc3NfdG9rZW4nLCAkdG9rZW4pOw0KCQkJCS8vIHVwZGF0ZSB0aGUgVVJMDQoJCQkJJHVybCA9ICR1cmktPnRvU3RyaW5nKCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJLy8gc2V0IHRoZSByZXR1cm4gVVJMDQoJCQkJJHJldHVybiA9IHVybGVuY29kZShiYXNlNjRfZW5jb2RlKChzdHJpbmcpIEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpnZXRJbnN0YW5jZSgpKSk7DQoJCQkJLy8gc2V0IHRoZSB1cmxzDQoJCQkJJGdldF9hY2Nlc3NfdG9rZW5fdXJsID0gJyJodHRwczovL1tbW2dpdGVhX3VybF1dXS91c2VyL3NldHRpbmdzL2FwcGxpY2F0aW9ucyIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSInIC4gVGV4dDo6XygnR2V0IEFjY2VzcyBUb2tlbicpIC4gJyInOw0KCQkJCSRzZXRfYWNjZXNzX3Rva2VuX3VybCA9ICciJyAuIEpvb21sYV9fX2VlY2MxNDNlX2I1Y2ZfNGMzM19iYTRkXzk3ZGExZGY2MTQyMl9fX1Bvd2VyOjpyb290KCkgLiAnYWRtaW5pc3RyYXRvci9pbmRleC5waHA/b3B0aW9uPWNvbV9jb25maWcmdmlldz1jb21wb25lbnQmY29tcG9uZW50PWNvbV9bW1tjb21wb25lbnRdXV0mcGF0aD0mcmV0dXJuPScgLiAkcmV0dXJuIC4gJyIgdGl0bGU9IicgLiBUZXh0OjpfKCdTZXQgQWNjZXNzIFRva2VuJykgLiAnIic7DQoJCQkJLy8gbG9hZCB0aGUgbWVzc2FnZQ0KCQkJCSR0aGlzLT5hcHAtPmVucXVldWVNZXNzYWdlKA0KCQkJCQlUZXh0OjpzcHJpbnRmKCJJZiB0aGVyZSB3YXMgYSBkb3dubG9hZC91cGRhdGUgZXJyb3IsIGl0J3MgcHJvYmFibHkgYmVjYXVzZSB0aGUgPGEgaHJlZj0lcyA+QVBJIEFjY2VzcyBUb2tlbjwvYT4gZm9yIHVwZGF0ZXMgb2YgW1tbY29tcG9uZW50XV1dIGhhcyBub3QgYmVlbiBzZXQsIHlvdSBjYW4gc2V0IHRoaXMgYWNjZXNzIHRva2VuIGluIHRoZSA8YSBocmVmPSVzID5nbG9iYWwgb3B0aW9ucyB0YWI8L2E+LiIsDQoJCQkJCQkkZ2V0X2FjY2Vzc190b2tlbl91cmwsDQoJCQkJCQkkc2V0X2FjY2Vzc190b2tlbl91cmwNCgkJCQkJKSwgJ25vdGljZScpOw0KCQkJfQ0KCQl9DQoJfQ0K', 'componentbuilder', '', '', '', 'Ly8gbmVlZHMgZml4', '', '', '', '1.0.2', '{\"property_selection0\":{\"property\":\"39\"},\"property_selection1\":{\"property\":\"37\"}}', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', '', '', '', 'Update (git.vdm.dev)', '', 1, '', '', 1, '2021-12-08 07:42:39', '2024-03-01 21:17:50', 17, '', 9), (28, 1, '', '', '', 1, '', '', '', '', '', '', '', 1, 1, 'This plugin is used to load PreUpVer on your website. So it adds https://cdn.jsdelivr.net/gh/Llewellynvdm/PreUpVer@1.0.0/dist/js/preupver.min.js to the header of your website. See: https://git.vdm.dev/Llewellyn/PreUpVer for more details.', '{}', 'dd6580c4-6bbb-4d13-a868-0b38fbb6a66e', 'dXNlIEpvb21sYVxDTVNcUGx1Z2luXENNU1BsdWdpbjsNCnVzZSBKb29tbGFcQ01TXEh0bWxcSFRNTEhlbHBlcjsNCg==', 8, '{\"method_selection0\":{\"method\":\"122\"}}', 'CS8qKg0KCSAqIEFwcGxpY2F0aW9uIG9iamVjdA0KCSAqDQoJICogQHZhciAgICBDTVNBcHBsaWNhdGlvbg0KCSAqIEBzaW5jZSAgMS4wLjANCgkgKi8NCglwcm90ZWN0ZWQgICRhcHA7DQoNCgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBoZWFkIGlzIGNvbXBpbGVkIGFuZCBhbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBoZWFkIGRhdGEuDQoJICogSW4gdGhpcyBjYXNlLCBpdCdzIHVzZWQgdG8gYWRkIGEgSmF2YVNjcmlwdCBmaWxlIHRvIHRoZSBmcm9udCBlbmQgb2YgdGhlIEpvb21sYSBzaXRlLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqDQoJICogQHNpbmNlICAgMy4wLjANCgkgKiBAdGhyb3dzICBFeGNlcHRpb24gb24gZXJyb3IuDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG9uQmVmb3JlQ29tcGlsZUhlYWQoKQ0KCXsNCgkJLy8gQ2hlY2sgaWYgd2UgYXJlIGluIHRoZSBzaXRlIGFwcGxpY2F0aW9uDQoJCWlmICgkdGhpcy0+YXBwLT5pc0NsaWVudCgnc2l0ZScpKSB7DQoJCQlIVE1MSGVscGVyOjpfKCdzY3JpcHQnLCAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL0xsZXdlbGx5bnZkbS9QcmVVcFZlckAxLjAuMC9kaXN0L2pzL3ByZXVwdmVyLm1pbi5qcycsIFsndmVyc2lvbicgPT4gJ2F1dG8nXSk7DQoJCX0NCgl9', 'PreUpVerLoader', '', '', '', 'CQkJJGp2ZXJzaW9uID0gbmV3IEpWZXJzaW9uKCk7DQoJCQlpZiAoISRqdmVyc2lvbi0+aXNDb21wYXRpYmxlKCczLjEwLjAnKSkgew0KCQkJCSRhcHAtPmVucXVldWVNZXNzYWdlKCdQbGVhc2UgdXBncmFkZSB0byBhdCBsZWFzdCBKb29tbGEhIDMuMTAgYmVmb3JlIGNvbnRpbnVpbmchJywgJ2Vycm9yJyk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0K', '', '', '', '1.0.0', '{\"property_selection0\":{\"property\":\"25\"}}', 'IyBQcmVVcFZlciBMb2FkZXIgKFtbW3BsdWdpbi52ZXJzaW9uXV1dKQ0KDQojIyBJbnRyb2R1Y3Rpb24NCg0KUHJlVXBWZXIgaXMgYSB2ZXJzYXRpbGUgSmF2YVNjcmlwdCBsaWJyYXJ5IGRlc2lnbmVkIHRvIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSB2ZXJzaW9uIG51bWJlcnMgb2YgbGlicmFyeSBzY3JpcHRzIGluIHlvdXIgZG9jdW1lbnRhdGlvbi4gSXQgaWRlbnRpZmllcyBzcGVjaWZpYyBgPHByZT5gIHRhZ3Mgb24geW91ciB3ZWJwYWdlIGFuZCB1cGRhdGVzIHRoZW0gd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gdGFnIGZldGNoZWQgZnJvbSBhIHNwZWNpZmllZCByZXBvc2l0b3J5LCBlbnN1cmluZyB5b3VyIGRvY3VtZW50YXRpb24gYWx3YXlzIGRpc3BsYXlzIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24uDQoNCiMjIEhvdyBJdCBXb3Jrcw0KDQpQcmVVcFZlciBvcGVyYXRlcyBieSBzZWFyY2hpbmcgZm9yIGA8cHJlPmAgdGFncyB3aXRoIGEgZGVzaWduYXRlZCBjbGFzcyAoYHByZXVwdmVyYCkgYW5kIHVzaW5nIHRoZWlyIGRhdGEgYXR0cmlidXRlcyB0byBwZXJmb3JtIHZlcnNpb24gdXBkYXRlcy4gSXQgc2ltcGxpZmllcyB0aGUgcHJvY2VzcyBvZiBrZWVwaW5nIHlvdXIgbGlicmFyeSByZWZlcmVuY2VzIHVwLXRvLWRhdGUgaW4gZG9jdW1lbnRhdGlvbi4NCg0KIyMjIEF1dG9tYXRpYyBEZXRlY3Rpb24gYW5kIFVwZGF0aW5nDQoNCldoZW4gdGhlIHdlYnBhZ2UgbG9hZHMsIFByZVVwVmVyIGZpbmRzIGFsbCBgPHByZT5gIHRhZ3MgbWFya2VkIHdpdGggdGhlIGBwcmV1cHZlcmAgY2xhc3MuIEl0IHRoZW4gZXh0cmFjdHMgbmVjZXNzYXJ5IGRldGFpbHMgZnJvbSB0aGVpciBkYXRhIGF0dHJpYnV0ZXMgYW5kIHVwZGF0ZXMgZWFjaCB0YWcgd2l0aCB0aGUgbGF0ZXN0IGxpYnJhcnkgdmVyc2lvbi4NCg0KIyMjIFVzYWdlDQoNCjEuICoqTWFya2luZyBgPHByZT5gIFRhZ3M6KioNCg0KICAgQWRkIHRoZSBgY2xhc3M9InByZXVwdmVyImAgdG8gYDxwcmU+YCB0YWdzIGluIHlvdXIgSFRNTCBhbmQgZGVmaW5lIHRoZSByZXF1aXJlZCBkYXRhIGF0dHJpYnV0ZXMgZm9yIGF1dG9tYXRpYyB1cGRhdGluZzoNCg0KICAgYGBgaHRtbA0KICAgPHByZSBpZD0idW5pcXVlLWlkIiBjbGFzcz0icHJldXB2ZXIiDQogICAgICAgIGRhdGEtYXBpLXVybD0iaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy91c2VybmFtZS9saWJyYXJ5L3RhZ3MiDQogICAgICAgIGRhdGEtZGVzY3JpcHRpb249IkRlc2NyaXB0aW9uIG9mIHRoZSBsaWJyYXJ5IHNjcmlwdCINCiAgICAgICAgZGF0YS11cmw9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC91c2VybmFtZS9saWJyYXJ5QCR7dmVyc2lvbn0vZGlzdC9saWJyYXJ5Lm1pbi5qcyI+DQogICA8L3ByZT4NCiAgIGBgYA0KDQogICBSZXBsYWNlIGB1bmlxdWUtaWRgLCBgdXNlcm5hbWVgLCBgbGlicmFyeWAsIGFuZCBvdGhlciBwbGFjZWhvbGRlcnMgd2l0aCB5b3VyIHNwZWNpZmljIGRldGFpbHMuDQoNCjIuICoqQXR0cmlidXRlcyBFeHBsYWluZWQ6KioNCg0KICAgLSBgaWRgOiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgYDxwcmU+YCB0YWcuDQogICAtIGBkYXRhLWFwaS11cmxgOiBUaGUgQVBJIFVSTCB0byBmZXRjaCB0aGUgbGF0ZXN0IGxpYnJhcnkgdmVyc2lvbi4NCiAgIC0gYGRhdGEtZGVzY3JpcHRpb25gOiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBsaWJyYXJ5IHNjcmlwdC4NCiAgIC0gYGRhdGEtdXJsYDogVGhlIFVSTCBvZiB0aGUgc2NyaXB0LCB3aGVyZSBgJHt2ZXJzaW9ufWAgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBudW1iZXIuDQoNCiMjIyBFeGFtcGxlDQoNCkNoZWNrIG91dCB0aGUgW3Rlc3RzXShodHRwczovL2dpdC52ZG0uZGV2L0xsZXdlbGx5bi9QcmVVcFZlci9zcmMvYnJhbmNoL21hc3Rlci90ZXN0cy8pIGZvbGRlciBmb3IgdGhlIGV4YW1wbGVzIHdlIHVzZSB0byB0ZXN0IGlmIHRoaXMgbGlicmFyeSB3b3JrcyBhcyBleHBlY3RlZC4NCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkF1dGhvcio6IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8pDQorICpOYW1lKjogW1ByZVVwVmVyIExvYWRlcl0oaHR0cHM6Ly9naXQudmRtLmRldi9MbGV3ZWxseW4vUHJlVXBWZXIpDQorICpGaXJzdCBCdWlsZCo6ICMjI0NSRUFUSU9OREFURSMjIw0KKyAqTGFzdCBCdWlsZCo6ICMjI0JVSUxEREFURSMjIw0KKyAqVmVyc2lvbio6IFtbW3BsdWdpbi52ZXJzaW9uXV1dDQorICpDb3B5cmlnaHQqOiAjIyNDT1BZUklHSFQjIyMNCisgKkxpY2Vuc2UqOiAjIyNMSUNFTlNFIyMjDQoNCj4gVGhpcyAqKnBsdWdpbioqIHdhcyBidWlsZCB3aXRoIGEgSm9vbWxhIFtBdXRvbWF0ZWQgQ29tcG9uZW50IEJ1aWxkZXJdKGh0dHBzOi8vd3d3Lmpvb21sYWNvbXBvbmVudGJ1aWxkZXIuY29tKS4NCj4gRGV2ZWxvcGVkIGJ5IFtMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZV0obWFpbHRvOmpvb21sYUB2ZG0uaW8p', '', '', '', 'PreUpVer Loader', '', 1, '', '', 1, '2023-11-28 09:01:02', '2023-11-28 11:27:32', 5, '', 2); +-- +-- Dumping data for table `#__componentbuilder_joomla_power` +-- + +INSERT INTO `#__componentbuilder_joomla_power` (`id`, `description`, `guid`, `settings`, `system_name`, `params`, `published`, `created`, `modified`, `version`, `hits`, `access`, `ordering`) VALUES +(1, 'The Joomla Factory class', '39403062-84fb-46e0-bac4-0023f766e827', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Factory\",\"joomla_version\":\"0\"}}', 'JFactory', '', 1, '2024-04-09 15:00:24', '0000-00-00 00:00:00', 1, '', 1, 1), +(2, 'The core Joomla Text class.', 'ba6326ef-cb79-4348-80f4-ab086082e3c5', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Language\\\\Text\",\"joomla_version\":\"0\"}}', 'JText', '', 1, '2024-04-09 15:01:16', '0000-00-00 00:00:00', 1, '', 1, 2), +(3, 'The Joomla core component helper class.', 'aeb8e463-291f-4445-9ac4-34b637c12dbd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Component\\\\ComponentHelper\",\"joomla_version\":\"0\"}}', 'JComponentHelper', '', 1, '2024-04-09 15:02:09', '0000-00-00 00:00:00', 1, '', 1, 3), +(4, 'The Joomla core session class.', '5ba38513-5c4f-4b0d-935e-49e986a6bce8', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Session\\\\Session\",\"joomla_version\":\"0\"}}', 'JSession', '', 1, '2024-04-09 15:03:18', '0000-00-00 00:00:00', 1, '', 1, 4), +(5, 'The Joomla core uri class.', 'eecc143e-b5cf-4c33-ba4d-97da1df61422', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Uri\\\\Uri\",\"joomla_version\":\"0\"}}', 'JUri', '', 1, '2024-04-09 15:04:32', '0000-00-00 00:00:00', 1, '', 1, 5), +(6, 'HTTP client class.', '8417ac0e-2abd-4452-91fd-4ca6493d55f2', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Http\\\\Http\",\"joomla_version\":\"0\"}}', 'JHttp', '', 1, '2024-04-27 11:59:57', '0000-00-00 00:00:00', 1, '', 1, 6), +(7, 'Route handling class', 'd4c76099-4c32-408a-8701-d0a724484dfd', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Router\\\\Route\",\"joomla_version\":\"0\"}}', 'JRoute', '', 1, '2024-04-27 12:01:46', '0000-00-00 00:00:00', 1, '', 1, 7), +(8, 'Class to create and parse routes', '4efa4c21-5114-472a-b1f8-48aa9bd14900', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Router\\\\Router\",\"joomla_version\":\"0\"}}', 'JRouter', '', 1, '2024-04-27 12:02:16', '0000-00-00 00:00:00', 1, '', 1, 7), +(9, 'This is an abstracted input class used to manage retrieving data from the application environment.', '59106b64-dd51-4280-be0a-1b9b9ebb7161', '{\"settings0\":{\"namespace\":\"Joomla\\\\Input\\\\Input\",\"joomla_version\":\"0\"}}', 'JInput', '', 1, '2024-04-27 12:04:55', '0000-00-00 00:00:00', 1, '', 1, 8), +(10, 'Helper to render a Layout object, storing a base path', '7ab82272-0b3d-4bb1-af35-e63a096cfe0b', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Layout\\\\LayoutHelper\",\"joomla_version\":\"0\"}}', 'JLayoutHelper', '', 1, '2024-04-27 12:06:33', '0000-00-00 00:00:00', 1, '', 1, 9), +(11, 'Utility class for all HTML drawing classes', '34690c75-1090-47eb-8c06-7228dc7eedd6', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\HTML\\\\HTMLHelper\",\"joomla_version\":\"0\"}}', 'JHtml', '', 1, '2024-04-27 12:07:27', '0000-00-00 00:00:00', 1, '', 1, 10), +(12, 'Class that handles all access authorisation routines.', '2d513d69-8c7c-4dab-bb84-c5ecafb91a9d', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Access\",\"joomla_version\":\"0\"}}', 'JAccess', '', 1, '2024-04-27 12:56:41', '0000-00-00 00:00:00', 1, '', 1, 11), +(13, 'Access rules class.', '80425d73-1789-4f59-b49d-1a712611a77a', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Rules\",\"joomla_version\":\"0\"}}', 'JRules', '', 1, '2024-04-27 12:57:12', '0000-00-00 00:00:00', 1, '', 1, 11), +(14, 'Rule class.', 'b07d4be5-bbbe-48c9-a2ab-843090a1c0de', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Access\\\\Rule\",\"joomla_version\":\"0\"}}', 'JRule', '', 1, '2024-04-27 12:57:34', '0000-00-00 00:00:00', 1, '', 1, 11), +(15, 'JDate is a class that stores a date and provides logic to manipulate and render that date in a variety of formats.', '3864fa33-ab10-48d5-98ea-5e1397e6a191', '{\"settings0\":{\"namespace\":\"Joomla\\\\CMS\\\\Date\\\\Date\",\"joomla_version\":\"0\"}}', 'JDate', '', 1, '2024-04-27 12:58:11', '0000-00-00 00:00:00', 1, '', 1, 11); + -- -- Dumping data for table `#__componentbuilder_admin_view` -- @@ -2080,7 +2184,7 @@ INSERT INTO `#__componentbuilder_site_view` (`id`, `add_css_document`, `add_css` -- INSERT INTO `#__componentbuilder_dynamic_get` (`id`, `add_php_after_getitem`, `add_php_before_getitem`, `add_php_after_getitems`, `add_php_before_getitems`, `add_php_getlistquery`, `php_after_getitem`, `php_before_getitem`, `php_before_getitems`, `php_getlistquery`, `php_after_getitems`, `pagination`, `addcalculation`, `db_selection`, `db_table_main`, `filter`, `getcustom`, `gettype`, `global`, `join_db_table`, `join_view_table`, `main_source`, `name`, `order`, `php_calculation`, `php_custom_get`, `view_selection`, `view_table_main`, `where`, `php_router_parse`, `group`, `params`, `published`, `version`, `hits`, `ordering`, `guid`) VALUES -(36, '', '', 1, '', '', '', '', '', '', 'CQkvLyBkbyBhIHF1aWNrIGJ1aWxkIG9mIGFsbCBlZGl0IGxpbmtzIGxpbmtzDQoJCWlmIChpc3NldCgkaXRlbXMpICYmICRpdGVtcykNCgkJew0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRuciA9PiAmJGl0ZW0pDQoJCQl7DQoJCQkJJGNhbkRvID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRBY3Rpb25zKCdsb29rJywkaXRlbSwnbG9va3MnKTsNCgkJCQlpZiAoJGNhbkRvLT5nZXQoJ2xvb2suZWRpdCcpKQ0KCQkJCXsNCgkJCQkJJGl0ZW0tPmVkaXRMaW5rID0gJzxiciAvPjxiciAvPjxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstd2lkdGgtMS0xIiBocmVmPSInOw0KCQkJCQkkaXRlbS0+ZWRpdExpbmsgLj0gXEpSb3V0ZTo6XygnaW5kZXgucGhwP29wdGlvbj1jb21fW1tbY29tcG9uZW50XV1dJnZpZXc9bG9vayZ0YXNrPWxvb2suZWRpdCZpZD0nIC4gJGl0ZW0tPmlkKTsNCgkJCQkJJGl0ZW0tPmVkaXRMaW5rIC49ICciPjxpIGNsYXNzPSJ1ay1pY29uLXBlbmNpbCI+PC9pPjxzcGFuIGNsYXNzPSJ1ay1oaWRkZW4tc21hbGwiPic7DQoJCQkJCSRpdGVtLT5lZGl0TGluayAuPSBUZXh0OjpfKCdFZGl0IExvb2snKTsNCgkJCQkJJGl0ZW0tPmVkaXRMaW5rIC49ICc8L3NwYW4+PC9hPic7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRpdGVtLT5lZGl0TGluayA9ICcnOw0KCQkJCX0NCgkJCX0NCgkJfQ==', 1, '', '', '', '', '', 2, '', '', '', 1, 'Looks', '{\"order0\":{\"table_key\":\"a.name\",\"direction\":\"ASC\"}}', '', '', 'a.*', 109, '{\"where0\":{\"table_key\":\"a.published\",\"operator\":\"1\",\"value_key\":\"1\"}}', '', '', '', 1, 12, '', 13, '32b3ae7d-8aa8-47f1-ab2e-30076ddaa029'), +(36, '', '', 1, '', '', '', '', '', '', 'CQkvLyBkbyBhIHF1aWNrIGJ1aWxkIG9mIGFsbCBlZGl0IGxpbmtzIGxpbmtzDQoJCWlmIChpc3NldCgkaXRlbXMpICYmICRpdGVtcykNCgkJew0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRuciA9PiAmJGl0ZW0pDQoJCQl7DQoJCQkJJGNhbkRvID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRBY3Rpb25zKCdsb29rJywkaXRlbSwnbG9va3MnKTsNCgkJCQlpZiAoJGNhbkRvLT5nZXQoJ2xvb2suZWRpdCcpKQ0KCQkJCXsNCgkJCQkJJGl0ZW0tPmVkaXRMaW5rID0gJzxiciAvPjxiciAvPjxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstd2lkdGgtMS0xIiBocmVmPSInOw0KCQkJCQkkaXRlbS0+ZWRpdExpbmsgLj0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ2aWV3PWxvb2smdGFzaz1sb29rLmVkaXQmaWQ9JyAuICRpdGVtLT5pZCk7DQoJCQkJCSRpdGVtLT5lZGl0TGluayAuPSAnIj48aSBjbGFzcz0idWstaWNvbi1wZW5jaWwiPjwvaT48c3BhbiBjbGFzcz0idWstaGlkZGVuLXNtYWxsIj4nOw0KCQkJCQkkaXRlbS0+ZWRpdExpbmsgLj0gVGV4dDo6XygnRWRpdCBMb29rJyk7DQoJCQkJCSRpdGVtLT5lZGl0TGluayAuPSAnPC9zcGFuPjwvYT4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkaXRlbS0+ZWRpdExpbmsgPSAnJzsNCgkJCQl9DQoJCQl9DQoJCX0=', 1, '', '', '', '', '', 2, '', '', '', 1, 'Looks', '{\"order0\":{\"table_key\":\"a.name\",\"direction\":\"ASC\"}}', '', '', 'a.*', 109, '{\"where0\":{\"table_key\":\"a.published\",\"operator\":\"1\",\"value_key\":\"1\"}}', '', '', '', 1, 12, '', 13, '32b3ae7d-8aa8-47f1-ab2e-30076ddaa029'), (39, '', '', '', '', '', '', '', '', '', '', 1, '', '', '', '{\"filter0\":{\"filter_type\":\"1\",\"state_key\":\"id\",\"operator\":\"1\",\"table_key\":\"a.id\"}}', '', 1, '', '', '', 1, 'Looking', '', '', '', 'a.id AS id\r\na.name AS name\r\na.alias AS alias\r\na.description AS description\r\na.add AS add\r\na.email AS email\r\na.mobile_phone AS mobile_phone\r\na.dateofbirth AS dateofbirth\r\na.image AS image\r\na.website AS website\r\na.published AS published\r\na.hits AS hits\r\na.created_by AS created_by', 109, '', '', '', '', 1, 8, '', '', '98e6ea56-0911-4d89-b1f4-8f0bb1e4aa5a'); -- @@ -2259,3343 +2363,16 @@ INSERT INTO `#__componentbuilder_validation_rule` (`id`, `name`, `php`, `short_d -- INSERT INTO `#__componentbuilder_field` (`id`, `add_css_view`, `add_css_views`, `add_javascript_view_footer`, `add_javascript_views_footer`, `css_view`, `css_views`, `datadefault`, `datadefault_other`, `datalenght`, `datalenght_other`, `datatype`, `indexes`, `javascript_view_footer`, `javascript_views_footer`, `name`, `null_switch`, `store`, `fieldtype`, `xml`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `guid`, `on_get_model_field`, `on_save_model_field`, `initiator_on_get_model`, `initiator_on_save_model`, `params`) VALUES -(1, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 1, '', '', 'Acronym', 'NOT NULL', '', 24, '\"\"', 1, '2015-04-24 07:21:57', '2020-01-16 17:18:27', 44, '', 198, 'c94297cc-340e-484b-af1b-032c244ca78d', '', '', '', '', ''), -(2, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Action Name', 'NOT NULL', '', 11, '\"\"', 1, '2015-03-19 17:30:59', '2019-02-05 22:36:35', 19, '', 200, '3695d0f0-fba2-4e3a-9d0a-915b2403ec8e', '', '', '', '', ''), -(3, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add Access', 'NOT NULL', '', 3, '\"should use access.\\\"\\n\\tclass=\\\"inputbox\\\"\\n\\/>\"', 1, '2015-05-11 23:14:53', '2019-06-11 12:16:57', 11, '', 199, 'a336dc99-c188-45aa-8804-dfa2922d5ec6', '', '', '', '', ''), -(4, '', '', 1, '', '', '', '', '', '', '', 'TEXT', '', 'alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KCWpRdWVyeShkb2N1bWVudCkub24oJ3N1YmZvcm0tcm93LWFkZCcsIGZ1bmN0aW9uKGV2ZW50LCByb3cpew0KCQl2YXIgZ3JvdXBfa2V5ID0galF1ZXJ5KHJvdykuY29udGV4dC5kYXRhc2V0Lmdyb3VwOw0KCQlqUXVlcnkocm93KS5maW5kKCcjamZvcm1fYWRkYWRtaW5fdmlld3NfXycgKyBncm91cF9rZXkgKyAnX19zdWJtZW51JykucHJvcCgnY2hlY2tlZCcsIHRydWUpOw0KCQlqUXVlcnkocm93KS5maW5kKCcjamZvcm1fYWRkYWRtaW5fdmlld3NfXycgKyBncm91cF9rZXkgKyAnX19jaGVja2luJykucHJvcCgnY2hlY2tlZCcsIHRydWUpOw0KCQlqUXVlcnkocm93KS5maW5kKCcjamZvcm1fYWRkYWRtaW5fdmlld3NfXycgKyBncm91cF9rZXkgKyAnX19oaXN0b3J5JykucHJvcCgnY2hlY2tlZCcsIHRydWUpOw0KCQlqUXVlcnkocm93KS5maW5kKCcjamZvcm1fYWRkYWRtaW5fdmlld3NfXycgKyBncm91cF9rZXkgKyAnX19hY2Nlc3MnKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7DQoJCWpRdWVyeShyb3cpLmZpbmQoJyNqZm9ybV9hZGRhZG1pbl92aWV3c19fJyArIGdyb3VwX2tleSArICdfX3BvcnQnKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7DQoJfSkNCn0pOw==', '', 'Add Admin Views', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-09 22:50:20', '2020-11-17 13:47:38', 32, '', 201, '3bac32ec-8dcf-4257-b518-ecaa952140c2', '', '', '', '', ''), -(5, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'Add Conditions', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-09 22:50:20', '2020-05-28 20:11:33', 12, '', 220, '434a8099-51f0-49d1-bbbb-ed7aa5145a3c', '', '', '', '', ''), -(6, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Contributors', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-09 22:50:20', '2017-10-22 00:36:06', 3, '', 197, '8e416ff9-3bd1-4115-a08b-06594978ace6', '', '', '', '', ''), -(7, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add CSS (view)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-11 12:36:14', '2015-08-25 21:15:22', 1, '', 196, '6746d3ba-b120-4918-8bba-2a14260e99c8', '', '', '', '', ''), -(8, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add CSS (views)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-11 12:36:14', '2015-08-25 21:15:22', 1, '', 195, 'a2098911-926a-42b6-8498-d8a453c34d93', '', '', '', '', ''), -(9, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'Add Fields (for views)', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-09 22:50:20', '2020-05-28 18:58:31', 9, '', 194, '15e1f13d-25db-46a4-ae7c-fb616140338e', '', '', '', '', ''), -(10, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Add Icon', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2024-04-22 12:31:19', 2, '', 193, '92ff3e2c-081b-4b84-a10c-e1a9f3245063', '', '', '', '', ''), -(11, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add Javascript (view-file)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-11 12:36:14', '2015-08-25 21:15:22', 1, '', 192, '42991cef-d988-4ad9-b3d2-f29d9809f0b3', '', '', '', '', ''), -(12, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add Javascript (views-file)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-11 12:36:14', '2015-08-25 21:15:22', 1, '', 191, 'e19c4fa4-804f-488b-90d7-1ea827bba52e', '', '', '', '', ''), -(13, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add MySql - (Install)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-11 12:36:14', '2018-05-11 03:28:51', 3, '', 190, '7c652c71-e00e-45ff-8acb-e1bc0344e4c0', '', '', '', '', ''), -(14, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Permissions (to view)', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-09 22:50:20', '2017-10-09 18:26:10', 4, '', 189, '6e7d306a-9210-41bd-b951-6e897fcff773', '', '', '', '', ''), -(15, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (getItem Method)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-11 12:36:14', '2015-08-25 21:15:22', 1, '', 188, '95eb062e-f221-43b4-b4d4-c32e9d70e8a7', '', '', '', '', ''), -(16, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (getItems Method - before translation fix & decryption)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-11 12:36:14', '2016-09-02 15:31:29', 5, '', 187, '1eecc354-f454-48dd-ab12-4cf85b88f97b', '', '', '', '', ''), -(17, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (helper_admin Class)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-11 12:36:14', '2015-08-25 21:15:22', 2, '', 186, 'abc5e604-4a2b-4f4c-9add-9e371249adf8', '', '', '', '', ''), -(18, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (postSaveHook Method)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-11 12:36:14', '2015-08-25 21:15:22', 1, '', 202, '45559d2a-7537-4719-8caa-aa99df171000', '', '', '', '', ''), -(19, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (save Method - after data modeling)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-11 12:36:14', '2017-08-28 15:13:53', 2, '', 203, '5799fcb7-8de8-41bf-9a2a-dcf84cae3949', '', '', '', '', ''), -(20, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Tabs', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-09 22:50:20', '2017-10-22 09:22:20', 3, '', 219, '0c06ec4b-448e-4c8a-8869-d424b6ab1f4a', '', '', '', '', ''), -(21, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Adjustable', 'NOT NULL', '', 3, '\"If not the Value\\/Example will be enforced.\\\" \\r\\n\\tvalue=\\\"1\\\" \\r\\n\\tclass=\\\"inputbox\\\" \\r\\n\\/>\"', 1, '2015-05-10 21:38:22', '2017-09-21 02:03:04', 6, '', 218, '062b7901-ff23-41c6-98f1-209d82dad2e7', '', '', '', '', ''), -(22, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Aims', 'NOT NULL', '', 8, '\"\"', 1, '2015-04-24 11:20:51', '2015-08-25 21:15:22', 2, '', 217, 'e2dbc087-3a13-4fc1-89be-fb61df8a72af', '', '', '', '', ''), (23, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Alias', 'NOT NULL', '', 24, '\"\"', 1, '2015-04-09 13:46:04', '2023-06-27 23:46:54', 3, '', 216, '335866ce-b81b-4329-901d-c20254135c9c', '', '', '', '', ''), -(24, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Alignment', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-11 13:02:32', '2015-08-25 21:15:22', 1, '', 215, '6014463c-9321-4256-afd1-17ac302ee51e', '', '', '', '', ''), -(25, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Answer List', 'NOT NULL', '', 4, '\"\"', '', '2015-04-28 10:48:58', '2015-08-25 21:15:22', 2, '', 214, '0347cd28-ae62-4db3-baec-f06147e00c51', '', '', '', '', ''), -(26, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Answer Type', 'NOT NULL', '', 11, '\"\"', 1, '2015-04-28 10:45:32', '2015-09-11 20:29:40', 2, '', 213, 'c7819436-8c78-43d7-86de-7af3f401e32d', '', '', '', '', ''), -(27, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Answer YesNo', 'NOT NULL', '', 17, '\"\"', 1, '2015-04-28 10:48:58', '2015-08-25 21:15:22', 1, '', 212, '884f6d24-ce44-410f-b52d-f726b9e48b70', '', '', '', '', ''), -(28, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Assessment Type (category)', 'NOT NULL', '', 2, '\"\"', 1, '2015-03-28 06:56:00', '2015-08-25 21:15:22', 1, '', 211, 'ec07f1ba-eb3c-4a11-a1b1-68b4e79ee119', '', '', '', '', ''), -(29, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Assessment Types (show archived also)', 'NOT NULL', '', 6, '\"getQuery(true);\\r\\n$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\r\\n$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\r\\n$query->where($db->quoteName(\'a.published\') . \' >= 1\');\\r\\n$query->order(\'a.###TEXT### ASC\');\\r\\n$db->setQuery((string)$query);\\r\\n$items = $db->loadObjectList();\\r\\n$options = array();\\r\\nif ($items)\\r\\n{\\r\\n\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select a type\');\\r\\n\\\\tforeach($items as $item)\\r\\n\\\\t{\\r\\n\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\r\\n\\\\t}\\r\\n}\\r\\nreturn $options;\\\"\\n\\/>\"', 1, '2015-04-28 10:07:13', '2018-04-14 21:56:00', 6, '', 210, '297e7b2d-e299-415b-9f8b-837658422718', '', '', '', '', ''), -(30, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Assessments', 'NOT NULL', '', 2, '\"\"', 1, '2015-03-28 06:56:00', '2015-08-25 21:15:22', 1, '', 209, '202f0ab6-c508-4406-87d4-e55e2b9f8db7', '', '', '', '', ''), -(31, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Attachment 1', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 208, 'cad8c91f-5092-4115-a071-2c58b9645617', '', '', '', '', ''), -(32, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Attachment 2', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 207, 'dfb9c3c2-b2e7-4db7-8de5-ae79f8e4221f', '', '', '', '', ''), -(33, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Attachment 3', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 206, '9d5b4404-efae-454c-97d0-97200a4a9c6c', '', '', '', '', ''), -(34, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Author', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-05 17:06:17', '2018-02-23 07:54:59', 3, '', 205, 'd4a595fb-2264-4e18-8b80-7affee1a6abf', '', '', '', '', ''), -(35, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Author Email', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-05 23:44:32', '2015-08-25 21:15:22', 1, '', 204, '2a9d2cda-1be7-4ae7-b672-9139a8a62d14', '', '', '', '', ''), -(36, '', '', '', '', '', '', '', '', 255, '', 'CHAR', '', '', '', 'Author Website', 'NOT NULL', '', 27, '\"\"', 1, '2015-04-08 00:36:16', '2015-08-25 21:15:22', 1, '', 185, '9f474240-eb27-40d7-9512-fbb3acf370d5', '', '', '', '', ''), -(37, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Auto Check-in', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-11 23:14:53', '2019-06-11 12:19:37', 4, '', 184, '07882a4a-363e-41ee-83d2-833d946122d7', '', '', '', '', ''), -(38, '', '', 1, '', '', '', '', '', 1, '', 'TINYINT', '', 'Ly8gbGl0dGxlIHNjcmlwdCB0byBjaGVjayB2YWx1ZSBhbmQgZ2l2ZSBub3RpY2UNCmZ1bmN0aW9uIGNoZWNrQWRtaW5CZWhhdmlvdXIoZmllbGQpIHsNCgkvLyBnZXQgdGhlIElEDQoJdmFyIGlkID0galF1ZXJ5KGZpZWxkKS5hdHRyKCdpZCcpOw0KCXZhciB0YXJnZXQgPSBpZC5zcGxpdCgnX18nKTsNCgkvL3NldCB0aGUgc3ViSUQNCgl2YXIgc3ViSUQgPSB0YXJnZXRbMF0rJ19fJyt0YXJnZXRbMV07DQoJLy8gZ2V0IHZhbHVlDQoJdmFyIHZhbHVlID0galF1ZXJ5KCcjJytzdWJJRCsnX19saXN0JykudmFsKCk7DQoJLy8gc2V0IG5vdGljZSBhbmQgZG8gaG91c2UgY2xlYW5pbmcNCglpZiAoMiA9PSB2YWx1ZSkgew0KCQkvLyBubyBkYXRhYmFzZQ0KCQlpZiAodGFyZ2V0WzJdID09ICdsaXN0Jykgew0KCQkJalF1ZXJ5LlVJa2l0Lm5vdGlmeSh7bWVzc2FnZTogSm9vbWxhLkpUZXh0Ll8oJ09ubHkgdXNlIHRoZSA8Yj5Ob25lIERCPC9iPiBvcHRpb24gaWYgeW91IGFyZSBwbGFubmluZyBvbiB0YXJnZXRpbmcgdGhpcyBmaWVsZCB3aXRoIEphdmFTY3JpcHQvQ3VzdG9tIFBIUCB0byBtb3ZlIGl0cyB2YWx1ZSBpbnRvIGFub3RoZXIgZmllbGQgdGhhdCBkb2VzIGdldCBzYXZlZCB0byB0aGUgZGF0YWJhc2UuJyksIHRpbWVvdXQ6IDEwMDAwLCBzdGF0dXM6ICd3YXJuaW5nJywgcG9zOiAndG9wLXJpZ2h0J30pOw0KCQkJalF1ZXJ5LlVJa2l0Lm5vdGlmeSh7bWVzc2FnZTogSm9vbWxhLkpUZXh0Ll8oJ1RoZSA8Yj5Ob25lIERCPC9iPiBvcHRpb24gd2lsbCByZW1vdmUgdGhpcyBmaWVsZCBmcm9tIGJlaW5nIHNhdmVkIGluIHRoZSBkYXRhYmFzZS4nKSwgdGltZW91dDogNTAwMCwgc3RhdHVzOiAncHJpbWFyeScsIHBvczogJ3RvcC1yaWdodCd9KTsNCgkJfSBlbHNlIHsNCgkJCWpRdWVyeS5VSWtpdC5ub3RpZnkoe21lc3NhZ2U6IEpvb21sYS5KVGV4dC5fKCdUaGVzZSBvcHRpb25zIGFyZSBub3QgYXZhaWxhYmxlIHRvIHRoZSBmaWVsZCBpZiA8Yj5Ob25lIERCPC9iPiBvcHRpb24gaXMgc2VsZWN0ZWQuJyksIHRpbWVvdXQ6IDcwMDAsIHN0YXR1czogJ3dhcm5pbmcnLCBwb3M6ICd0b3AtcmlnaHQnfSk7DQoJCX0NCgkJLy8gZG8gc29tZSBob3VzZSBjbGVhbmluZw0KCQlqUXVlcnkoJyMnK3N1YklEKydfX29yZGVyX2xpc3QnKS52YWwoMCkudHJpZ2dlcignbGlzenQ6dXBkYXRlZCcpOw0KCQlqUXVlcnkoJyMnK3N1YklEKydfX2ZpbHRlcicpLnZhbCgnJykudHJpZ2dlcignbGlzenQ6dXBkYXRlZCcpOw0KCQlqUXVlcnkoJyMnK3N1YklEKydfX3RpdGxlJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKS50cmlnZ2VyKCdjaGFuZ2UnKTsNCgkJalF1ZXJ5KCcjJytzdWJJRCsnX19hbGlhcycpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkudHJpZ2dlcignY2hhbmdlJyk7DQoJCWpRdWVyeSgnIycrc3ViSUQrJ19fc29ydCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkudHJpZ2dlcignY2hhbmdlJyk7DQoJCWpRdWVyeSgnIycrc3ViSUQrJ19fc2VhcmNoJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKS50cmlnZ2VyKCdjaGFuZ2UnKTsNCgkJalF1ZXJ5KCcjJytzdWJJRCsnX19saW5rJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKS50cmlnZ2VyKCdjaGFuZ2UnKTsNCgl9IGVsc2UgaWYgKDEgPT0gdmFsdWUgfHwgMyA9PSB2YWx1ZSAgfHwgNCA9PSB2YWx1ZSkgew0KCQkvLyBnZXQgbnVtYmVyIG9mIGl0ZW1zDQoJCXZhciBudW1JdGVtcyA9IGpRdWVyeSgnLmNvdW50LXRoZS1pdGVtczEyMzUnKS5sZW5ndGggKyAxMDsNCgkJLy8gc2hvdyBpbiBsaXN0IHZpZXcNCgkJaWYgKHRhcmdldFsyXSA9PSAnbGlzdCcpIHsNCgkJCWlmICgxID09IHZhbHVlKSB7DQoJCQkJalF1ZXJ5LlVJa2l0Lm5vdGlmeSh7bWVzc2FnZTogSm9vbWxhLkpUZXh0Ll8oJ1RoZSA8Yj5TaG93IGluIEFsbCBMaXN0IFZpZXdzPC9iPiBvcHRpb24gd2lsbCBBZGQgdGhpcyBmaWVsZCB0byBhbGwgbGlzdCB2aWV3cywgYWRtaW4gJmFtcDsgbGlua2VkLicpLCB0aW1lb3V0OiA1MDAwLCBzdGF0dXM6ICdwcmltYXJ5JywgcG9zOiAndG9wLXJpZ2h0J30pOw0KCQkJfSBlbHNlIGlmICgzID09IHZhbHVlKSB7DQoJCQkJalF1ZXJ5LlVJa2l0Lm5vdGlmeSh7bWVzc2FnZTogSm9vbWxhLkpUZXh0Ll8oJ1RoZSA8Yj5Pbmx5IGluIEFkbWluIExpc3QgVmlldzwvYj4gb3B0aW9uIHdpbGwgb25seSBBZGQgdGhpcyBmaWVsZCB0byB0aGUgYWRtaW4gbGlzdCB2aWV3LCBub3QgdG8gYW55IGxpbmtlZCB2aWV3cy4nKSwgdGltZW91dDogNTAwMCwgc3RhdHVzOiAncHJpbWFyeScsIHBvczogJ3RvcC1yaWdodCd9KTsNCgkJCX0gZWxzZSBpZiAoNCA9PSB2YWx1ZSkgew0KCQkJCWpRdWVyeS5VSWtpdC5ub3RpZnkoe21lc3NhZ2U6IEpvb21sYS5KVGV4dC5fKCdUaGUgPGI+T25seSBpbiBMaW5rZWQgTGlzdCBWaWV3czwvYj4gb3B0aW9uIHdpbGwgb25seSBBZGQgdGhpcyBmaWVsZCB0byB0aGUgbGlua2VkIGxpc3QgdmlldywgaWYgdGhpcyB2aWV3IGdldHMgbGlua2VkIHRvIG90aGVyIHZpZXcsIG5vdCB0byB0aGlzIGFkbWluIGxpc3Qgdmlldy4nKSwgdGltZW91dDogNTAwMCwgc3RhdHVzOiAncHJpbWFyeScsIHBvczogJ3RvcC1yaWdodCd9KTsNCgkJCX0NCgkJfQ0KCQkvLyBjaGVjayBpZiB0aGUgb3JkZXIgbGlzdCBhbHJlYWR5IGhhcyBhIHZhbHVlDQoJCXZhciBvcmRlckxpc3QgPSBqUXVlcnkoJyMnK3N1YklEKydfX29yZGVyX2xpc3QnKS52YWwoKTsNCgkJaWYgKG9yZGVyTGlzdCA9PSAwKSB7DQoJCQkvLyBjb3VudCB0aGUgYWxyZWFkeSBzZXQgYW5kIGdldCB0aGUgbmV4dCBudW1iZXIgYXZhaWxhYmxlDQoJCQl2YXIgbGlzdHZpZXdOdW1iZXIgPSBmYW5Bc2dmZFNmZnNOdW1iZXIoc3ViSUQucmVwbGFjZSgvXGQrL2csICcnKSwgbnVtSXRlbXMpOw0KCQkJLy8gdXBkYXRlIHRoZSBwb3NpdGlvbg0KCQkJalF1ZXJ5KCcjJytzdWJJRCsnX19vcmRlcl9saXN0JykudmFsKGxpc3R2aWV3TnVtYmVyKS50cmlnZ2VyKCdsaXN6dDp1cGRhdGVkJyk7DQoJCX0NCgl9IGVsc2Ugew0KCQkvLyBkbyBzb21lIGhvdXNlIGNsZWFuaW5nDQoJCWpRdWVyeSgnIycrc3ViSUQrJ19fb3JkZXJfbGlzdCcpLnZhbCgwKS50cmlnZ2VyKCdsaXN6dDp1cGRhdGVkJyk7DQoJCWpRdWVyeSgnIycrc3ViSUQrJ19fZmlsdGVyJykudmFsKCcnKS50cmlnZ2VyKCdsaXN6dDp1cGRhdGVkJyk7DQoJCWpRdWVyeSgnIycrc3ViSUQrJ19fc29ydCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkudHJpZ2dlcignY2hhbmdlJyk7DQoJCWpRdWVyeSgnIycrc3ViSUQrJ19fbGluaycpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkudHJpZ2dlcignY2hhbmdlJyk7DQoJfQ0KfQ0KDQovLyBjb3VudCB0aGUgYWxyZWFkeSBzZXQgYW5kIGdldCB0aGUgbmV4dCBudW1iZXIgYXZhaWxhYmxlDQpmdW5jdGlvbiBmYW5Bc2dmZFNmZnNOdW1iZXIodGFyZ2V0Rm9ybSwgbnVtSXRlbXMpIHsNCgl2YXIgaTsNCgkvLyBubyBjaGVjayBhbGwgdGhlIG9yZGVyIHZhbHVlcyBhbHJlYWR5IHNldCBzbyB0byBmaWxsIGluIHRoZSBjYXBzDQoJdmFyIG51bWJlcnMgPSBbXTsNCglmb3IgKGkgPSAwOyBpIDwgbnVtSXRlbXM7IGkrKykgeyAvLyBmb3Igbm93IHRoaXMgaXMgdGhlIG51bWJlciBvZiBmaWVsZCB3ZSBzaG91bGQgY2hlY2sNCgkJLy8gYnVpbGQgSUQNCgkJdmFyIGlkX2NoZWNrID0gdGFyZ2V0Rm9ybStpKydfX29yZGVyX2xpc3QnOw0KCQkvLyBmaXJzdCBjaGVjayBpZiBJZCBpcyBvbiBwYWdlDQoJCWlmIChqUXVlcnkoIiMiK2lkX2NoZWNrKS5sZW5ndGgpIHsNCgkJCS8vIGdldCB0aGUgcHJvcGVydHkgdmFsdWUNCgkJCXZhciB0bXAgPSBqUXVlcnkoIiMiK2lkX2NoZWNrKyIgb3B0aW9uOnNlbGVjdGVkIikudmFsKCk7DQoJCQkvLyBub3cgdmFsaWRhdGUNCgkJCWlmICh0bXAgPj0gMSkgew0KCQkJCW51bWJlcnMucHVzaChwYXJzZUludCh0bXApKTsNCgkJCX0NCgkJfQ0KCX0NCgkvLyBjaGVjayB0aGF0IHRoZXJlIGFyZSBhY3R1YWxseSBzb21lIHNldA0KCWlmIChudW1iZXJzLmxlbmd0aCkgew0KCQkvLyBzb3J0IHRoZSBhcnJheQ0KCQludW1iZXJzLnNvcnQoZmFuQXNnZmRTZmZzU29ydCk7DQoJCS8vIGdldCB0aGUgYWJzZW50IHZhbHVlcw0KCQl2YXIgYWJzZW50ID0gZmFuQXNnZmRTZmZzQWJzZW50KG51bWJlcnMpOw0KCQkvLyBjaGVjayBpZiBhbiBhYnNlbnQgdmFsdWUgd2FzIGZvdW5kDQoJCWlmIChhYnNlbnQubGVuZ3RoKSB7DQoJCQkvLyBzb3J0IHRoZSBhcnJheSAoanVzdCB0byBiZSBzYWZlKQ0KCQkJYWJzZW50LnNvcnQoZmFuQXNnZmRTZmZzU29ydCk7DQoJCQkvLyByZXR1cm4gbG93ZXN0IGZvdW5kIHZhbHVlDQoJCQlyZXR1cm4gYWJzZW50WzBdOw0KCQl9DQoJfQ0KCS8vIHNpbmNlIG5vIGFic2VudCB2YWx1ZSB3YXMgZm91bmQgYWRkIHRvIG5leHQgYXZhaWxhYmxlIG9wdGlvbg0KCXZhciB0b3RhbCA9IDA7DQoJZm9yIChpID0gMDsgaSA8IG51bUl0ZW1zOyBpKyspIHsgLy8gZm9yIG5vdyB0aGlzIGlzIHRoZSBudW1iZXIgb2YgZmllbGQgd2Ugc2hvdWxkIGNoZWNrDQoJCS8vIGJ1aWxkIElEDQoJCXZhciBpZF9jaGVjayA9IHRhcmdldEZvcm0raSsnX19saXN0JzsNCgkJLy8gZmlyc3QgY2hlY2sgaWYgSWQgaXMgb24gcGFnZQ0KCQlpZiAoalF1ZXJ5KCIjIitpZF9jaGVjaykubGVuZ3RoKSB7DQoJCQkvLyBnZXQgdGhlIHByb3BlcnR5IHZhbHVlDQoJCQl2YXIgdG1wID0galF1ZXJ5KCIjIitpZF9jaGVjaysiIG9wdGlvbjpzZWxlY3RlZCIpLnZhbCgpOw0KCQkJLy8gbm93IHZhbGlkYXRlDQoJCQlpZiAodG1wID49IDEpIHsNCgkJCQl0b3RhbCsrOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiB0b3RhbDsNCn0NCg0KLy8gc2ltcGxlIHNvcnQgZnVuY3Rpb24NCmZ1bmN0aW9uIGZhbkFzZ2ZkU2Zmc1NvcnQoYSxiKSB7DQogICAgcmV0dXJuIGEgLSBiOw0KfQ0KDQovLyBzaW1wbGUgYWJzZW50IGZ1bmN0aW9uDQpmdW5jdGlvbiBmYW5Bc2dmZFNmZnNBYnNlbnQoYXJyKXsNCiAgICB2YXIgYWJzZW50QXJyYXkgPSBbXSwgbWluPSAxLCBtYXggPSBhcnJbYXJyLmxlbmd0aC0xXTsNCiAgICB3aGlsZShtaW4gPCBtYXgpew0KICAgICAgICBpZihqUXVlcnkuaW5BcnJheShtaW4sIGFycikgPT0gLTEpIHsNCgkJCWFic2VudEFycmF5LnB1c2gobWluKTsNCgkJfQ0KCQltaW4rKzsNCiAgICB9DQogICAgcmV0dXJuIGFic2VudEFycmF5Ow0KfQ==', '', 'Admin Behaviour', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-11 13:02:32', '2020-11-14 02:27:47', 35, '', 183, '49a92e23-180d-4df6-86ef-1157883a4e18', '', '', '', '', ''), -(39, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Admin View (dynamic)', 'NOT NULL', '', 6, '\"\"', 1, '2015-04-28 10:45:32', '2019-07-19 02:24:38', 14, '', 164, '5633c14b-a5cc-4741-9077-b6976af898f6', '', '', '', '', ''), -(40, '', '', '', '', '', '', '', '', 11, '', 'CHAR', '', '', '', 'Background', 'NOT NULL', '', 5, '\"\"', 1, '2015-03-30 11:33:34', '2015-08-25 21:15:22', 1, '', 163, '89d225cd-00c0-4540-a714-056b04f6cf93', '', '', '', '', ''), -(41, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Banner', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 162, '744b4ffc-961c-4e62-adff-495256479798', '', '', '', '', ''), -(42, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Book', 'NOT NULL', '', 6, '\"\"', 1, '2015-04-24 07:50:46', '2018-09-21 00:00:44', 9, '', 161, 'e2bbda81-a6c1-41be-907b-24b9d5b97492', '', '', '', '', ''), -(43, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Category Icon', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2024-04-22 12:31:09', 2, '', 160, '0d2bdd49-7559-4cc1-a25b-56aacb830760', '', '', '', '', ''), -(44, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Company Name (name)', 'NOT NULL', '', 24, '\"\"', 1, '2015-03-19 17:30:59', '2015-08-25 21:15:22', 4, '', 159, 'bb5ba507-fd8d-4a99-950c-a541c3fbeb60', '', '', '', '', ''), -(45, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Completion Point', 'NOT NULL', '', 10, '\"\"', 1, '2015-04-28 10:52:33', '2015-08-25 21:15:22', 1, '', 158, '863482f3-98b7-4db2-a039-c9704a332e9a', '', '', '', '', ''), -(46, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Component Image', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2024-04-22 12:30:50', 4, '', 157, '4003ab3f-70d8-4092-a11b-b23215844ffa', '', '', '', '', ''), -(47, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Component Name', 'NOT NULL', '', 24, '\"\"', 1, '2015-03-19 17:30:59', '2018-03-10 23:46:30', 3, '', 156, 'b607dfed-bb4a-463d-9e14-f1264c67279b', '', '', '', '', ''), -(48, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Component Version', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-06 08:44:48', '2015-08-25 21:15:22', 1, '', 155, 'dde96c4d-1528-402a-bdea-96ec481a11ef', '', '', '', '', ''), -(49, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Content', 'NOT NULL', '', 8, '\"\"', 1, '2015-04-24 11:30:17', '2015-08-25 21:15:22', 1, '', 154, '7c42bee8-73fb-4483-960a-53de4625eda9', '', '', '', '', ''), -(50, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Contributor Show', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-11 23:07:30', '2015-08-25 21:15:22', 1, '', 153, 'dff8b457-9e9d-4976-a77d-bb517b183015', '', '', '', '', ''), -(51, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Contributor Title', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-11 13:02:32', '2015-08-25 21:15:22', 1, '', 152, '30f5a9a8-512a-4aa2-81dc-602a2aa6e6f5', '', '', '', '', ''), -(52, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Contributor Use', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-11 23:05:45', '2015-08-25 21:15:22', 1, '', 151, 'fee57f76-d976-4308-89e2-72a114d37fb1', '', '', '', '', ''), -(53, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Copyright', 'NOT NULL', '', 25, '\"\"', 1, '2015-03-19 18:20:49', '2020-07-29 22:32:31', 2, '', 150, 'd4241cde-3446-4318-9269-905b7ea929f4', '', '', '', '', ''), -(54, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Course', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'c.acronym\'),array(\'program\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'#__###component###_course\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'c\') . \' ON (\' . $db->quoteName(\'a.program\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . $item->program . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-04-24 07:50:46', '2016-02-06 21:42:55', 7, '', 149, '48349cda-448d-43b3-97c1-ced5b6474577', '', '', '', '', ''), -(55, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Course 1', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'c.acronym\'),array(\'program\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'#__###component###_course\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'c\') . \' ON (\' . $db->quoteName(\'a.program\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . $item->program . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-04-24 07:50:46', '2015-08-25 21:15:22', 2, '', 165, '1a4d0599-b066-4537-8a53-08dbd8d950b0', '', '', '', '', ''), -(56, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Course 10', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'c.acronym\'),array(\'program\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'#__###component###_course\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'c\') . \' ON (\' . $db->quoteName(\'a.program\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . $item->program . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-04-24 07:50:46', '2015-08-25 21:15:22', 2, '', 166, '61e485ab-96d9-4c88-a195-b07db8a66bd1', '', '', '', '', ''), -(57, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Course 2', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'c.acronym\'),array(\'program\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'#__###component###_course\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'c\') . \' ON (\' . $db->quoteName(\'a.program\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . $item->program . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-04-24 07:50:46', '2015-08-25 21:15:22', 3, '', 182, 'a4cb9b66-0b43-4f2d-8f69-b0421c67f7e9', '', '', '', '', ''), -(58, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Course 3', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'c.acronym\'),array(\'program\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'#__###component###_course\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'c\') . \' ON (\' . $db->quoteName(\'a.program\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . $item->program . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-04-24 07:50:46', '2015-08-25 21:15:22', 2, '', 181, 'c5913e72-c856-4ffe-83b0-91a3a234faca', '', '', '', '', ''), -(59, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Course 4', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'c.acronym\'),array(\'program\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'#__###component###_course\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'c\') . \' ON (\' . $db->quoteName(\'a.program\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . $item->program . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-04-24 07:50:46', '2015-08-25 21:15:22', 2, '', 180, '890b9521-452f-42da-9798-75e6d829b024', '', '', '', '', ''), -(60, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Course 5', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'c.acronym\'),array(\'program\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'#__###component###_course\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'c\') . \' ON (\' . $db->quoteName(\'a.program\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . $item->program . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-04-24 07:50:46', '2015-08-25 21:15:22', 2, '', 179, '5d6c5f5b-3779-4f8d-8c4f-ff98a3d2a373', '', '', '', '', ''), -(61, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Course 6', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'c.acronym\'),array(\'program\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'#__###component###_course\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'c\') . \' ON (\' . $db->quoteName(\'a.program\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . $item->program . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-04-24 07:50:46', '2015-08-25 21:15:22', 2, '', 178, '85f47d11-ef73-458a-af6d-6738e8a0c15a', '', '', '', '', ''), -(62, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Course 7', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'c.acronym\'),array(\'program\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'#__###component###_course\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'c\') . \' ON (\' . $db->quoteName(\'a.program\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . $item->program . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-04-24 07:50:46', '2015-08-25 21:15:22', 2, '', 177, '4b058cb4-2e8b-4d86-b98b-d7f4a1d3c975', '', '', '', '', ''), -(63, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Course 8', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'c.acronym\'),array(\'program\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'#__###component###_course\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'c\') . \' ON (\' . $db->quoteName(\'a.program\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . $item->program . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-04-24 07:50:46', '2015-08-25 21:15:22', 2, '', 176, 'a1e788e4-ab8d-4590-9c58-5a3531d2145d', '', '', '', '', ''), -(64, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Course 9', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'c.acronym\'),array(\'program\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'#__###component###_course\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'c\') . \' ON (\' . $db->quoteName(\'a.program\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . $item->program . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-04-24 07:50:46', '2015-08-25 21:15:22', 2, '', 175, 'facf920c-9f84-4902-832f-90c99f985b29', '', '', '', '', ''), -(65, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'CSS (view)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-11 12:36:14', '2019-07-08 14:08:52', 3, '', 174, '1ad12721-9ee9-4623-98d2-071ba013a373', '', '', '', '', ''), -(66, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'CSS (views)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-11 12:36:14', '2019-07-08 14:11:27', 3, '', 173, '63d5585f-c9bd-485d-9c1d-4a29a4fbf4b2', '', '', '', '', ''), -(67, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Dashboard (add record)', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-11 23:14:53', '2019-06-11 12:18:56', 3, '', 172, '83be05c9-a5ec-4e50-a4f2-13a784c3ed81', '', '', '', '', ''), -(68, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Dashboard (list of records)', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-11 23:14:53', '2019-06-11 12:19:11', 4, '', 171, '85d0ff42-adf5-41dc-9164-6f249f17b90d', '', '', '', '', ''), -(69, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Data Default', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-10 21:24:57', '2015-08-25 21:15:22', 1, '', 170, '6ba76a0f-55a4-49ce-911a-0a3f05674bef', '', '', '', '', ''), -(70, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Data Length', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-10 21:23:10', '2019-09-12 19:42:19', 3, '', 169, 'b3ea0d94-1029-41d8-9f6b-bcbec6b715f4', '', '', '', '', ''), -(71, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Data Type', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-10 21:23:10', '2019-01-07 07:46:06', 9, '', 168, 'e41e74b2-a265-4269-8ec6-1d890c893798', '', '', '', '', ''), -(72, '', '', '', '', '', '', 'Other', '0000-00-00 00:00:00', '', '', 'DATETIME', '', '', '', 'Date', 'NOT NULL', '', 1, '\"\"', 1, '2015-04-28 23:17:23', '2017-09-21 22:26:50', 7, '', 167, '0679c333-95ed-4408-b75e-30581021e921', '', '', '', '', ''), -(82, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Day', 'NOT NULL', '', 11, '\"\"', 1, '2015-04-24 11:04:31', '2015-09-11 17:14:02', 4, '', 267, 'a794b9bc-3cbc-41ed-b23b-ab07d6be80e5', '', '', '', '', ''), -(83, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'DayClosed', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-04-24 07:50:46', '2015-08-25 21:15:22', 4, '', 266, '29439dc3-d7b6-4a3d-8c2e-389d1b27ae34', '', '', '', '', ''), (84, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Description (full width)', 'NULL', '', 25, '\"\"', 1, '2015-03-19 18:20:49', '2024-03-06 15:53:48', 5, '', 265, '749a9917-90c3-49c4-9e72-aa33b0683a87', '', '', '', '', ''), -(85, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Description (one line)', 'NOT NULL', '', 24, '\"\"', 1, '2015-03-19 18:20:49', '2019-06-26 00:10:46', 4, '', 264, 'a5ef0756-5ecd-49ae-a36c-058b90758988', '', '', '', '', ''), -(86, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Description (small box)', 'NOT NULL', '', 25, '\"\"', 1, '2015-03-19 18:20:49', '2015-08-25 21:15:22', 1, '', 263, 'ee1dbecf-f67e-4db3-a676-7da886536cae', '', '', '', '', ''), -(87, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Details', 'NOT NULL', '', 8, '\"\"', 1, '2015-03-19 18:20:49', '2015-08-25 21:15:22', 1, '', 262, '0b1e25b6-6910-4236-8d6a-76ca069edf41', '', '', '', '', ''), -(88, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Doc 1', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 261, 'aa0df8c6-1cde-447a-b176-89636f5a706f', '', '', '', '', ''), -(89, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Doc 10', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 260, '0d555add-53b2-4777-be4f-dec82c066336', '', '', '', '', ''), -(90, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Doc 11', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 259, '3f468941-377a-46f2-b54c-aaf45c0b2f87', '', '', '', '', ''), -(91, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Doc 12', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 275, '681c4329-7ecc-419c-b7eb-9de6aec72d91', '', '', '', '', ''), -(92, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Doc 2', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 276, '01dc4025-85c3-4bed-a141-c55fac7437e6', '', '', '', '', ''), -(93, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Doc 3', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 286, 'df78ffd1-f3f6-4d24-a0a8-bb9d3ce0df56', '', '', '', '', ''), -(94, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Doc 4', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 287, '5df9dd11-d510-45c2-89cd-51e4f1af94a5', '', '', '', '', ''), -(95, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Doc 5', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 288, '14a0f886-6f6c-43b2-8a6f-6c87e9bf0734', '', '', '', '', ''), -(96, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Doc 6', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 290, 'fd7b27f5-66fb-4b29-86cf-7cabc7ab643a', '', '', '', '', ''), -(97, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Doc 7', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 291, '38e4d645-66b7-4d2e-a976-5769bbf86338', '', '', '', '', ''), -(98, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Doc 8', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 292, 'd5a2dbd1-79fb-45d4-b0ba-0983178500cc', '', '', '', '', ''), -(99, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Doc 9', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 293, '5f14c959-afa3-4223-a684-74f8583e03b5', '', '', '', '', ''), (100, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Email (required)', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-05 23:44:32', '2016-02-07 22:43:18', 4, '', 285, '10c1eccb-b3c3-4325-a056-45a72d116fd8', '', '', '', '', ''), -(101, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'HTML Body', 'NOT NULL', '', 8, '\"\"', 1, '2015-04-07 22:08:34', '2016-05-02 01:45:57', 2, '', 284, '01163773-cdff-474c-8a07-05de21e9c30b', '', '', '', '', ''), -(102, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Event (also show archived)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" type_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'c.acronym\'),array(\'program\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'c\') . \' ON (\' . $db->quoteName(\'a.program\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' >= 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . $item->program . \')\');\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-05-01 21:34:58', '2017-01-25 10:40:48', 8, '', 283, '5e0f843c-cbcd-4d22-8d55-e4dd2ced8dfa', '', '', '', '', ''), -(103, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Facilitator 1', 'NOT NULL', '', 7, '\"\"', 1, '2015-04-23 20:57:19', '2018-09-21 00:07:42', 4, '', 282, 'd38c5c14-4d33-45b0-b621-4aba6f3614fc', '', '', '', '', ''), -(104, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Facilitator 10', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', 1, '2015-04-23 20:57:19', '2015-08-25 21:15:22', 1, '', 281, 'e7fb27c8-085e-441a-86f2-5b184029803a', '', '', '', '', ''), -(105, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Facilitator 2', 'NOT NULL', '', 7, '\"get(\'###type###\');\\r\\nreturn $groups;\\\"\\n\\/>\"', 1, '2015-04-23 20:57:19', '2018-04-14 22:15:32', 2, '', 280, '403900e4-3935-4382-bf3a-66e6952ef988', '', '', '', '', ''), -(106, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Facilitator 3', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', 1, '2015-04-23 20:57:19', '2015-08-25 21:15:22', 1, '', 279, '86468f16-4f2d-4848-87c5-b274ee0bba9a', '', '', '', '', ''), -(107, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Facilitator 4', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', 1, '2015-04-23 20:57:19', '2015-08-25 21:15:22', 1, '', 278, 'e2cf5b8a-68a4-4ee2-aca1-7eaa5a8ac5d6', '', '', '', '', ''), -(108, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Facilitator 5', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', 1, '2015-04-23 20:57:19', '2015-08-25 21:15:22', 1, '', 277, 'b50e99cb-3561-4eb7-827e-72d35988ceb8', '', '', '', '', ''), -(109, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Facilitator 6', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', 1, '2015-04-23 20:57:19', '2015-08-25 21:15:22', 1, '', 258, 'c07c05f1-6732-48ec-99b7-861a8ee76f6e', '', '', '', '', ''), -(110, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Facilitator 7', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', 1, '2015-04-23 20:57:19', '2015-08-25 21:15:22', 1, '', 257, '4b3b94f1-534b-46d4-8d5f-6f471f5895cb', '', '', '', '', ''), -(111, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Facilitator 8', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', 1, '2015-04-23 20:57:19', '2015-08-25 21:15:22', 1, '', 256, '7f59df6e-0f31-425b-90d2-bb10d379162f', '', '', '', '', ''), -(112, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Facilitator 9', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', 1, '2015-04-23 20:57:19', '2015-08-25 21:15:22', 1, '', 237, '4b79041e-42a9-4ead-94a6-819cb1efe94d', '', '', '', '', ''), -(113, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Faculty Members (dynamic)', 'NOT NULL', 1, 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, JFactory::getUser($item->###CODE_TEXT###)->name);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-04-23 20:57:19', '2015-09-11 03:52:23', 5, '', 236, 'bd50fc15-f479-4578-a49b-736b0173ebbb', '', '', '', '', ''), -(114, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 10', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '945a7643-9a8f-43ed-921e-6cb76893d02a', '', '', '', '', ''), -(115, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 11', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', 'e9807509-2a0c-4ac4-b096-16f8f57dc543', '', '', '', '', ''), -(116, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 12', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', 'd479ed7d-4cb9-4610-92b7-ca2bbc62ea85', '', '', '', '', ''), -(117, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 13', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '3c3286d1-e0cb-4b96-91ec-e23c54f6bc5f', '', '', '', '', ''), -(118, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 14', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '7d1a6675-496c-41d4-9424-1873563f3347', '', '', '', '', ''), -(119, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 15', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '0eb62de6-bd4f-4e30-b1a2-6eeab253a928', '', '', '', '', ''), -(120, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 16', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '4d3109a2-745e-4fb6-ab3c-5a3cb4a30b1c', '', '', '', '', ''), -(121, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 17', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', 'ef26b14d-dbae-40ba-8287-d7acb5ec7e50', '', '', '', '', ''), -(122, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 18', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '722149c9-bdc9-4d90-8335-5bfaa4dc301e', '', '', '', '', ''), -(123, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 19', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '30402148-168f-4a42-b7a4-8c34d271dff1', '', '', '', '', ''), -(124, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 2', 'NOT NULL', '', 7, '\"get(\'###view_type###\');\\\" \\r\\n\\ttype_php_4=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '1cb53347-66cd-4733-96e0-9d56244379cc', '', '', '', '', ''), -(125, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 20', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '4e18fadc-2fd5-4252-9ac9-fbc1049bbfe4', '', '', '', '', ''), -(126, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 21', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '41d07c57-86ad-469a-a4a2-3ab4b6ec867f', '', '', '', '', ''), -(127, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 22', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '0bff08d1-a410-4d44-9370-c89749f623ea', '', '', '', '', ''), -(128, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 23', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '8752e2ba-1c8f-4ebc-a707-43a4db4b05f1', '', '', '', '', ''), -(129, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 24', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '438e049c-f07d-4200-a5ce-c9bf6b613210', '', '', '', '', ''), -(130, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 25', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '0c616d62-c292-4c3a-98c3-d15fce10a584', '', '', '', '', ''), -(131, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 26', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', 'b7c47a52-fb88-400f-b9a3-443c21a83fe6', '', '', '', '', ''), -(132, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 27', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '4c82862d-71e7-4178-977f-664ced500a6e', '', '', '', '', ''), -(133, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 28', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', 'f13c3003-e5b6-4244-9670-36a7434b716d', '', '', '', '', ''), -(134, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 29', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', 'd48ac3e2-0187-4267-97a1-2892f0dd5995', '', '', '', '', ''), -(135, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 3', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '4005fc82-12c5-4f9a-b9a1-6d9a88e89e25', '', '', '', '', ''), -(136, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 30', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '760abaf4-acfc-4eb9-b1ff-22390f79a326', '', '', '', '', ''), -(137, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 4', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', 'fe45a56a-d60e-45c1-8c66-bf8b548981b8', '', '', '', '', ''), -(138, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 5', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '038e8bbf-6451-45ca-9ae8-0c1caec74863', '', '', '', '', ''), -(139, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 6', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '2652e31a-f09d-4c7f-a8dd-b6c0b5fb94d4', '', '', '', '', ''), -(140, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 7', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '04f408fe-fd85-4340-8639-a191dcb06d67', '', '', '', '', ''), -(141, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 8', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '63b5b351-d5aa-4ff1-b0c1-7a0424ce476b', '', '', '', '', ''), -(142, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member 9', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', -2, '2015-04-23 20:57:19', '2015-09-11 03:28:16', 1, '', '', '3d740f7b-7d02-428a-864a-7ffa4f49b4e4', '', '', '', '', ''), -(143, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Field (required)', 'NOT NULL', '', 6, '\"\"', 1, '2015-04-28 10:45:32', '2023-10-06 16:03:56', 19, '', 241, 'a6eb2b20-082d-4f86-9a23-952fe0ff8214', '', '', '', '', ''), -(144, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Form - Label', 'NOT NULL', '', 24, '\"\"', 1, '2015-03-19 17:30:59', '2015-12-04 02:18:34', 4, '', 242, 'a1478573-20da-4722-8132-eeafaa66d89d', '', '', '', '', ''), -(145, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Form - Description', 'NOT NULL', '', 25, '\"\"', 1, '2015-05-01 14:57:25', '2015-12-05 05:57:50', 4, '', 243, '438a3d21-d13c-4ebd-a6d1-c67bf39e545d', '', '', '', '', ''), -(146, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Form - Field Type', 'NOT NULL', '', 11, '\"\"', 1, '2015-04-28 10:45:32', '2016-06-11 18:14:11', 10, '', 244, 'a4ddc104-573d-4adc-86f6-c0841109bf81', '', '', '', '', ''), -(147, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Field (Category)', 'NOT NULL', '', 2, '\"\"', 1, '2015-05-10 23:12:22', '2020-05-30 18:13:00', 7, '', 147, 'ef722d2d-0fa0-4aa7-92d2-7783ec1c9f7f', '', '', '', '', ''), -(148, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'FieldType (dynamic)', 'NOT NULL', '', 6, '\"\"', 1, '2015-04-28 10:45:32', '2018-09-21 00:45:12', 7, '', 73, '91a4f538-1383-4ae4-85d8-55ddada7d6cd', '', '', '', '', ''), -(149, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Fieldtypes (Category)', 'NOT NULL', '', 2, '\"\"', 1, '2015-05-10 23:12:22', '2020-05-30 17:07:02', 2, '', 54, '7cc4ab46-0d77-4ef8-a2a7-d5b656546a30', '', '', '', '', ''), -(150, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Email', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-05 23:44:32', '2018-03-11 01:46:36', 6, '', 53, 'ac539a5a-971d-4b4e-9f2f-93fc6d486e58', '', '', '', '', ''), -(151, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'From Name', 'NOT NULL', '', 24, '\"\"', 1, '2015-03-19 17:30:59', '2015-08-25 21:15:22', 1, '', 52, '53ded5f9-2d93-4904-b5f6-eb7f3e1d524e', '', '', '', '', ''), -(152, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Group', 'NOT NULL', '', 29, '\"\"', 1, '2015-04-24 07:46:01', '2018-07-31 07:14:55', 2, '', 51, 'af9a010c-e22c-451c-9118-17c54342fccf', '', '', '', '', ''), -(153, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Student Groups (multi)', 'NOT NULL', 1, 29, '\"\"', 1, '2015-04-24 07:46:01', '2015-09-25 17:03:15', 3, '', 50, '7f25f3f6-86e1-4b99-95a9-4eb40d998ce8', '', '', '', '', ''), -(154, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Has Metadata', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-11 23:14:53', '2019-06-11 12:20:23', 5, '', 49, 'f2028e1b-b4c0-4f73-85a6-a580d1395618', '', '', '', '', ''), -(155, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Form - Hint', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-02 09:31:55', '2015-12-04 03:38:46', 2, '', 48, 'ce6912c7-eb78-4f06-9274-97e599b83d88', '', '', '', '', ''), -(156, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', '', '', '', 'Home Phone', 'NOT NULL', '', 23, '\"\"', 1, '2015-04-07 22:12:58', '2019-09-12 19:44:58', 3, '', 47, '38d7bc98-ccbf-48ee-a0c3-259e51652206', '', '', '', '', ''), -(157, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Icon', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2024-04-22 12:31:42', 2, '', 46, '3b731d0a-3205-4409-a9fd-e74d1db25055', '', '', '', '', ''), (158, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Image', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2020-06-07 02:17:46', 2, '', 45, '0d6970af-b361-4f65-84f6-0eb0c5f09bad', '', '', '', '', ''), -(159, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Implementation', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-10 21:26:50', '2017-10-09 19:03:21', 3, '', 44, 'bc5bed02-8fa3-462e-9c54-c39886fcdfe1', '', '', '', '', ''), -(160, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Indexes Type', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-10 21:26:50', '2020-05-25 00:22:37', 2, '', 43, '63ff758d-a866-4d37-bc2a-a7432bd9bb44', '', '', '', '', ''), -(161, '', '', 1, '', '', '', '', '', 11, '', 'INT', '', 'Ly8gbGl0dGxlIHNjcmlwdCB0byBjaGVjayB0aGF0IG9ubHkgb25lIHRpdGxlIGlzIHNlbGVjdGVkDQpmdW5jdGlvbiBjaGVja0FsaWFzKGZpZWxkKSB7DQoJLy8gZ2V0IHRoZSBJRA0KCXZhciBpZCA9IGpRdWVyeShmaWVsZCkuYXR0cignaWQnKTsNCgl2YXIgdGFyZ2V0ID0gaWQuc3BsaXQoJ19fJyk7DQoJLy9zZXQgdGhlIHN1YklEDQoJdmFyIHN1YklEID0gdGFyZ2V0WzBdKydfXycrdGFyZ2V0WzFdOw0KCXZhciBzdWJJRCA9IHN1YklELnJlcGxhY2UoL1xkKy9nLCAnJyk7DQoJLy8gc2V0IG5vdGljZSBhbmQgZG8gaG91c2UgY2xlYW5pbmcNCglpZiAoalF1ZXJ5KCcjJytpZCkucHJvcCgnY2hlY2tlZCcpKSB7DQoJCS8vIGdldCBudW1iZXIgb2YgaXRlbXMNCgkJdmFyIG51bUl0ZW1zID0galF1ZXJ5KCcuY291bnQtdGhlLWl0ZW1zMTIzNScpLmxlbmd0aCArIDEwOw0KCQlmb3IgKGkgPSAwOyBpIDwgbnVtSXRlbXM7IGkrKykgeyAvLyBmb3Igbm93IHRoaXMgaXMgdGhlIG51bWJlciBvZiBmaWVsZCB3ZSBzaG91bGQgY2hlY2sNCgkJCS8vIGJ1aWxkIElEDQoJCQl2YXIgaWRfY2hlY2sgPSBzdWJJRCtpKydfX2FsaWFzJzsNCgkJCS8vIGZpcnN0IGNoZWNrIGlmIElkIGlzIG9uIHBhZ2UNCgkJCWlmIChqUXVlcnkoIiMiK2lkX2NoZWNrKS5sZW5ndGggJiYgaWRfY2hlY2sgIT09IGlkKSB7DQoJCQkJLy8gdW5jaGVjayBpdA0KCQkJCWpRdWVyeSgiIyIraWRfY2hlY2spLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkudHJpZ2dlcignY2hhbmdlJyk7DQoJCQl9DQoJCX0NCgl9DQp9', '', 'Is Alias', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-11 13:02:32', '2018-04-19 14:22:08', 6, '', 42, '790d2db0-bda5-4e91-996c-3f90b8794004', '', '', '', '', ''), -(162, '', '', 1, '', '', '', '', '', 11, '', 'INT', '', 'Ly8gbGl0dGxlIHNjcmlwdCB0byBjaGVjayB2YWx1ZSBhbmQgZ2l2ZSBub3RpY2UNCmZ1bmN0aW9uIGV4cGxhaW5GaWx0ZXJCZWhhdmlvdXIoZmllbGQpIHsNCgkvLyBnZXQgdGhlIElEDQoJbGV0IGlkID0galF1ZXJ5KGZpZWxkKS5hdHRyKCdpZCcpOw0KCS8vIGdldCB2YWx1ZQ0KCWxldCB2YWx1ZSA9IGpRdWVyeSgnIycraWQpLnZhbCgpOw0KCS8vIHNldCBub3RpY2UgYW5kIGRvIGhvdXNlIGNsZWFuaW5nDQoJaWYgKDIgPT0gdmFsdWUpIHsNCgkJLy8gbWVhbnMgbXVsdGkgb3B0aW9uIGNhbiBiZSBzZWxlY3RlZCBpbiB0aGUgZmlsdGVyLCB0aGlzIGlzIGp1c3QgYXZhaWxhYmxlIHdpdGggdGhlIG5ldyBmaWx0ZXJzDQoJCWpRdWVyeS5VSWtpdC5ub3RpZnkoe21lc3NhZ2U6IEpvb21sYS5KVGV4dC5fKCdUaGUgPGI+bXVsdGkgZmlsdGVyPC9iPiBzZWxlY3Rpb24gb3B0aW9uIGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgbW9yZSB0aGVuIG9uZSB2YWx1ZSBpbiB0aGlzIGZpbHRlci9maWVsZC4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIG9wdGlvbiA8Yj5vbmx5IHdvcmtzPC9iPiB3aXRoIHRoZSA8Yj5uZXc8L2I+IGZpbHRlcnMgdGhhdCBsb2FkIGFib3ZlIHRoZSBhZG1pbiBsaXN0IHZpZXcuIFlvdSBjYW4gc2VsZWN0IHRoZSBuZXcgZmlsdGVyIG9wdGlvbiB3aGVuL3doZXJlIHlvdSBhZGQgdGhlIHZpZXcgdG8gdGhlIGNvbXBvbmVudC4nKSwgdGltZW91dDogMTAwMDAsIHN0YXR1czogJ3ByaW1hcnknLCBwb3M6ICd0b3AtcmlnaHQnfSk7DQoJfSBlbHNlIGlmICgxID09IHZhbHVlKSB7DQoJCS8vIG1lYW5zIHNpbmdsZSBvcHRpb24gY2FuIGJlIHNlbGVjdGVkIGluIHRoZSBmaWx0ZXINCgkJalF1ZXJ5LlVJa2l0Lm5vdGlmeSh7bWVzc2FnZTogSm9vbWxhLkpUZXh0Ll8oJ1RoZSA8Yj5zaW5nbGUgZmlsdGVyPC9iPiBzZWxlY3Rpb24gb3B0aW9uIGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QganVzdCBvbmUgdmFsdWUgaW4gdGhpcyBmaWx0ZXIvZmllbGQuJyksIHRpbWVvdXQ6IDUwMDAsIHN0YXR1czogJ3ByaW1hcnknLCBwb3M6ICd0b3AtcmlnaHQnfSk7DQoJfQ0KfQ==', '', 'Is Filter', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-11 13:02:32', '2020-11-14 02:52:45', 11, '', 41, 'a1cc8554-4816-4cec-87ea-3525c36c8366', '', '', '', '', ''), -(163, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Is Link', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-11 13:02:32', '2018-04-13 14:11:19', 4, '', 40, '0dd43656-cb30-4a0f-a66a-4d4527d8d794', '', '', '', '', ''), -(164, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Is Searchable', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-11 13:02:32', '2018-04-13 14:11:24', 4, '', 39, '01a8932d-2422-416f-bea1-7fd2117dc6a6', '', '', '', '', ''), -(165, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Is Sortable', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-11 13:02:32', '2018-04-13 14:11:29', 4, '', 55, 'cf97c040-e31e-4670-902f-5f03ef797720', '', '', '', '', ''), -(166, '', '', 1, '', '', '', '', '', 1, '', 'TINYINT', '', 'Ly8gbGl0dGxlIHNjcmlwdCB0byBjaGVjayB0aGF0IG9ubHkgb25lIHRpdGxlIGlzIHNlbGVjdGVkDQpmdW5jdGlvbiBjaGVja1RpdGxlKGZpZWxkKSB7DQoJLy8gZ2V0IHRoZSBJRA0KCXZhciBpZCA9IGpRdWVyeShmaWVsZCkuYXR0cignaWQnKTsNCgl2YXIgdGFyZ2V0ID0gaWQuc3BsaXQoJ19fJyk7DQoJLy9zZXQgdGhlIHN1YklEDQoJdmFyIHN1YklEID0gdGFyZ2V0WzBdKydfXycrdGFyZ2V0WzFdOw0KCXZhciBzdWJJRCA9IHN1YklELnJlcGxhY2UoL1xkKy9nLCAnJyk7DQoJLy8gc2V0IG5vdGljZSBhbmQgZG8gaG91c2UgY2xlYW5pbmcNCglpZiAoalF1ZXJ5KCcjJytpZCkucHJvcCgnY2hlY2tlZCcpKSB7DQoJCS8vIGdldCBudW1iZXIgb2YgaXRlbXMNCgkJdmFyIG51bUl0ZW1zID0galF1ZXJ5KCcuY291bnQtdGhlLWl0ZW1zMTIzNScpLmxlbmd0aCArIDEwOw0KCQlmb3IgKGkgPSAwOyBpIDwgbnVtSXRlbXM7IGkrKykgeyAvLyBmb3Igbm93IHRoaXMgaXMgdGhlIG51bWJlciBvZiBmaWVsZCB3ZSBzaG91bGQgY2hlY2sNCgkJCS8vIGJ1aWxkIElEDQoJCQl2YXIgaWRfY2hlY2sgPSBzdWJJRCtpKydfX3RpdGxlJzsNCgkJCS8vIGZpcnN0IGNoZWNrIGlmIElkIGlzIG9uIHBhZ2UNCgkJCWlmIChqUXVlcnkoIiMiK2lkX2NoZWNrKS5sZW5ndGggJiYgaWRfY2hlY2sgIT09IGlkKSB7DQoJCQkJLy8gdW5jaGVjayBpdA0KCQkJCWpRdWVyeSgiIyIraWRfY2hlY2spLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkudHJpZ2dlcignY2hhbmdlJyk7DQoJCQl9DQoJCX0NCgl9DQp9', '', 'Is Title', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-11 13:02:32', '2018-04-19 14:21:03', 7, '', 56, 'fdb1dfd5-1946-463f-9d70-ec2a876a97bb', '', '', '', '', ''), -(167, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Javascript (view-file)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-11 12:36:14', '2019-07-08 14:12:02', 10, '', 72, '5f7479f2-b499-4094-8294-d580e51244a1', '', '', '', '', ''), -(168, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Javascript (views-file)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-11 12:36:14', '2019-07-08 14:12:23', 4, '', 71, 'ec2db8b1-d779-4bf2-b4cd-374a894fdc83', '', '', '', '', ''), -(169, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Keep History', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-11 23:14:53', '2019-06-11 12:19:51', 4, '', 70, 'dd9f51ff-db9c-4c15-9d34-f634a7ffd7f5', '', '', '', '', ''), -(170, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Key Words', 'NOT NULL', '', 25, '\"\"', 1, '2015-04-24 11:33:09', '2015-08-25 21:15:22', 1, '', 69, '003f47e3-7017-489f-83ee-c648cc013232', '', '', '', '', ''), -(171, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Key Words Point', 'NOT NULL', '', 10, '\"\"', 1, '2015-04-28 10:52:33', '2015-08-25 21:15:22', 1, '', 68, 'dc8e3803-b069-4e38-8e7b-78603628066e', '', '', '', '', ''), -(172, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'License', 'NOT NULL', '', 25, '\"\"', 1, '2015-03-19 18:20:49', '2015-08-25 21:15:22', 1, '', 67, 'e5346711-63a0-45b8-a093-06486959a1d0', '', '', '', '', ''), -(173, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'List Point', 'NOT NULL', '', 10, '\"\"', 1, '2015-04-28 10:52:33', '2015-08-25 21:15:22', 1, '', 66, 'aede9923-0aa9-4be7-9f17-102936868ae7', '', '', '', '', ''), -(174, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Location (site,admin.both)', 'NOT NULL', '', 11, '\"\"', 1, '2015-03-19 18:23:52', '2015-08-25 21:15:22', 2, '', 65, 'fc2bbe2b-629d-4ff6-b011-189f76fc90d1', '', '', '', '', ''), -(175, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Main Menu', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-11 23:14:53', '2019-06-11 12:18:37', 4, '', 64, 'e2b4dae2-b179-4d4f-89c9-9dbf11c21156', '', '', '', '', ''), -(176, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Mandatory', 'NOT NULL', '', 3, '\"is mandatory.\\\" \\r\\n\\tvalue=\\\"1\\\" \\r\\n\\tclass=\\\"inputbox\\\" \\r\\n\\/>\"', 1, '2015-05-10 21:38:22', '2017-09-21 02:04:45', 3, '', 63, 'ff561cee-63b4-476a-ad29-38e34100e928', '', '', '', '', ''), -(177, '', '', '', '', '', '', 1, '', 7, '', 'TINYINT', '', '', '', 'Mark', 'NOT NULL', '', 17, '\"\"', 1, '2015-04-07 22:10:47', '2015-08-25 21:15:22', 1, '', 62, 'bc65b952-72ef-4960-9836-396b06e4b4ac', '', '', '', '', ''), -(178, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Markup Presidance', 'NOT NULL', '', 11, '\"\"', 1, '2015-04-07 21:15:11', '2015-08-25 21:15:22', 1, '', 61, '43376c7d-bb54-47dc-b615-01fc8a034fe9', '', '', '', '', ''), -(179, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Match Behavior', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-11 18:49:20', '2020-05-20 12:11:15', 2, '', 60, '1623dfd2-c89e-485b-865d-064bb6554ec8', '', '', '', '', ''), -(180, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Match Options', 'NOT NULL', '', 25, '\"\"', 1, '2015-05-11 18:49:20', '2015-08-25 21:15:22', 1, '', 59, 'da4d7380-431d-437f-97c4-288dac810910', '', '', '', '', ''), -(181, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Match Field (dynamic)', 'NOT NULL', '', 6, '\"\"', 2, '2015-04-28 10:45:32', '2021-01-18 08:58:27', 4, '', 58, '99d6ff45-c209-4739-85de-777f27ca351f', '', '', '', '', ''), -(182, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 57, '85a94073-2597-4446-9329-fe779b563425', '', '', '', '', ''), -(183, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media 1', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 38, '40947bb8-e43b-4101-a3ce-7db94cb48fb1', '', '', '', '', ''), -(184, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media 10', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 37, '4204fb1c-6f1f-4496-b6f1-08d9e02b6ede', '', '', '', '', ''), -(185, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media 11', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 36, '672e144a-1c97-4756-947e-01be600157c5', '', '', '', '', ''), -(186, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media 12', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 17, 'a81c95fe-f2d7-4613-b78f-d7887fcf4ae9', '', '', '', '', ''), -(187, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media 2', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 16, '68ee0d4e-570b-4045-a388-d1b00607a123', '', '', '', '', ''), -(188, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media 3', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 15, 'c18b5951-7b7d-4e5d-9d6e-c6dffb2e26e4', '', '', '', '', ''), -(189, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media 4', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 14, 'ea4ceacd-9b13-40b5-bbd1-9690b160e1c7', '', '', '', '', ''), -(190, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media 5', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 13, '31f937aa-dbad-4bb2-807d-a3f789e52e11', '', '', '', '', ''), -(191, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media 6', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 12, '3d2b4217-1e96-4bdb-b2dd-6fbe599174ff', '', '', '', '', ''), -(192, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media 7', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 11, 'f1c1f404-28eb-4965-b6c9-d6cf34f2126e', '', '', '', '', ''), -(193, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media 8', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 10, '908816f2-336b-45ce-89df-3d4992254e8e', '', '', '', '', ''), -(194, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Media 9', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 9, '08355c02-04c2-4fde-8e50-0aa5caa24541', '', '', '', '', ''), -(195, '', '', '', '', '', '', '', '', 255, '', 'CHAR', '', '', '', 'Meter', 'NOT NULL', '', 13, '\"\"', 1, '2015-05-08 00:07:08', '2015-08-25 21:15:22', 1, '', 8, '7df21d68-709f-4f61-bf47-81dde8b40561', '', '', '', '', ''), (196, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', '', '', '', 'Mobile Phone', 'NOT NULL', '', 23, '\"\"', 1, '2015-04-07 22:12:58', '2016-03-28 14:00:02', 2, '', 7, '65933a19-243a-48b2-aae9-34e2da710051', '', '', '', '', ''), -(197, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Module (show archived also)', 'NOT NULL', '', 6, '\"\"', 1, '2015-04-24 07:50:46', '2020-03-23 20:21:04', 9, '', 6, 'c9369556-2ed2-41ff-886a-1905e1a039e1', '', '', '', '', ''), -(198, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'MySQL - (Install)', 'NOT NULL', 2, 25, '\"\"', 1, '2015-05-11 12:36:14', '2024-04-19 08:14:22', 3, '', 5, '5eb879c0-f6e3-45b6-b220-cb5131422a83', '', '', '', '', ''), (199, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Name (Key - Required)', 'NOT NULL', '', 24, '\"\"', 1, '2015-03-19 17:30:59', '2023-06-19 22:38:40', 10, '', 4, '5d3d34dd-4876-4c6a-86ab-b4e162f22c08', '', '', '', '', ''), -(200, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Name (list of records)', 'NOT NULL', '', 24, '\"\\r\\nNaming Conventions<\\/a><\\/small>\\\"\\n\\tsize=\\\"40\\\"\\n\\tmaxlength=\\\"150\\\"\\n\\tdescription=\\\"The name of the list of records in this view\\\"\\n\\tclass=\\\"inputbox\\\"\\n\\treadonly=\\\"false\\\"\\n\\tdisabled=\\\"false\\\"\\n\\trequired=\\\"true\\\"\\n\\tfilter=\\\"STRING\\\"\\n\\tmessage=\\\"Error! Please add list of records name here.\\\"\\n\\thint=\\\"List of Records Name Here\\\"\\n\\/>\"', 1, '2015-03-19 17:30:59', '2021-08-30 08:31:09', 3, '', 3, 'c73c3033-f4d9-475a-977b-9e447b88272f', '', '', '', '', ''), -(201, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Name (single record)', 'NOT NULL', '', 24, '\"\\r\\nNaming Conventions<\\/a><\\/small>\\\"\\n\\tsize=\\\"40\\\"\\n\\tmaxlength=\\\"150\\\"\\n\\tdescription=\\\"Type null if single record view is not to be set\\\"\\n\\tclass=\\\"inputbox\\\"\\n\\treadonly=\\\"false\\\"\\n\\tdisabled=\\\"false\\\"\\n\\trequired=\\\"true\\\"\\n\\tfilter=\\\"STRING\\\"\\n\\tmessage=\\\"Error! Please add single record name here.\\\"\\n\\thint=\\\"Single Record Name Here\\\"\\n\\/>\"', 1, '2015-03-19 17:30:59', '2021-08-30 08:29:29', 3, '', 2, '7568fcc2-bd06-438c-9666-fe3bde32306f', '', '', '', '', ''), -(202, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Name in Code', 'NOT NULL', '', 24, '\"\\r\\nNaming Conventions<\\/a><\\/small>\\\"\\n\\tsize=\\\"40\\\"\\n\\tmaxlength=\\\"50\\\"\\n\\tdefault=\\\"\\\"\\n\\tdescription=\\\"Add Name in Code Here\\\"\\n\\tclass=\\\"text_area\\\"\\n\\trequired=\\\"true\\\"\\n\\tfilter=\\\"CMD\\\"\\n\\tmessage=\\\"Error! Please add name in code here.\\\"\\n\\thint=\\\"codename\\\"\\n\\/>\"', 1, '2015-05-06 08:44:48', '2021-04-26 13:46:22', 6, '', 18, 'af7b6b08-e8c5-4551-b6e6-cde297e78e40', '', '', '', '', ''), (203, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Not Required', 'NOT NULL', '', 9, '\"\"', 1, '2015-05-08 16:19:16', '2023-09-27 07:57:19', 16, '', 19, 'da5e6901-6958-40e5-a4f5-6822d6fe57ac', '', '', '', '', ''), -(204, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Answer Temp', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-01 21:05:48', '2015-08-25 21:15:22', 1, '', 35, '4a883e7f-b5a9-44ad-b14c-4f398d144a53', '', '', '', '', ''), -(205, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Application Temp', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-01 21:38:16', '2015-08-25 21:15:22', 1, '', 34, '5a5ed948-339e-4b28-8e5f-956659d64153', '', '', '', '', ''), -(206, '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Note - Condition Implementation', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-10 18:12:30', '2018-05-21 20:33:56', 2, '', 33, 'aba8c849-1c17-4c39-a70e-c0fbc14b7d7c', '', '', '', '', ''), -(207, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Doc Embed (notes)', 'NOT NULL', '', 14, '\"Next if the document name is the_document_name.doc then to add this document to the text area below using the following short script {embed the_document_name.doc}<\\/code>\\\" \\r\\n\\theading=\\\"h4\\\" \\r\\n\\tclass=\\\"alert alert-info\\\" \\r\\n\\tclose=\\\"true\\\" \\r\\n\\/>\"', 1, '2015-04-30 14:30:35', '2015-08-25 21:15:22', 1, '', 32, '1569eda0-0f51-4426-be31-1234e3d63192', '', '', '', '', ''), -(208, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Doc Embed (session)', 'NOT NULL', '', 14, '\"Next if the document name is the_document_name.doc then to add this document to the text area below using the following short script {embed the_document_name.doc}<\\/code>\\\" \\r\\n\\theading=\\\"h4\\\" \\r\\n\\tclass=\\\"alert alert-info\\\" \\r\\n\\tclose=\\\"true\\\" \\r\\n\\/>\"', 1, '2015-04-30 14:30:35', '2015-08-25 21:15:22', 1, '', 31, 'ca1ca0c5-7ee3-40e0-b409-6974e57526b2', '', '', '', '', ''), -(209, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Doc Naming Convention', 'NOT NULL', '', 14, '\"ONE: No spaces, all spaces in the document name must be replaced with and underscore like this the_document_name.doc
TWO: Please make sure that all documents added are correctly named, since we will use the name to generate the link. \\\" \\r\\n\\theading=\\\"h4\\\" \\r\\n\\tclass=\\\"alert alert-info\\\" \\r\\n\\tclose=\\\"true\\\" \\r\\n\\/>\"', 1, '2015-04-30 14:14:29', '2015-08-25 21:15:22', 1, '', 30, '2abeb944-e551-4907-8c8e-34d68960a12c', '', '', '', '', ''), -(210, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Fields are added', 'NOT NULL', '', 14, '\"For more help
please watch this tutorial<\\/a>.\\\" \\r\\n\\theading=\\\"h4\\\" \\r\\n\\tclass=\\\"alert alert-info\\\" \\r\\n\\/>\"', 1, '2015-05-10 18:12:30', '2017-11-28 18:16:02', 6, '', 29, '904a9721-ae9c-4917-8f30-76596bd6c2c7', '', '', '', '', ''), -(211, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - More field types', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-10 18:12:30', '2017-10-26 15:45:22', 2, '', 28, 'ded93bf8-1f1e-44ee-83b1-5537590f0300', '', '', '', '', ''), -(212, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Permission Implementation', 'NOT NULL', '', 14, '\"tutorial<\\/a> for more info.\\\" \\r\\n\\theading=\\\"h4\\\" \\r\\n\\tclass=\\\"alert alert-info\\\" \\r\\n\\/>\"', 1, '2015-05-10 18:12:30', '2017-10-26 15:36:24', 3, '', 27, '8b6ed3e7-1c38-463f-a11d-49589f1f1080', '', '', '', '', ''), -(213, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Setting Contributors', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-10 18:12:30', '2017-10-26 15:35:17', 2, '', 26, '99b38f09-d2c4-4c9c-890b-ae2442dfe560', '', '', '', '', ''), -(214, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Setting Admin Views', 'NOT NULL', '', 14, '\"watch this tutorial for more help<\\/a>.\\\" \\r\\n\\theading=\\\"h4\\\" \\r\\n\\tclass=\\\"alert alert-info\\\" \\r\\n\\/>\"', 1, '2015-05-10 18:12:30', '2017-10-23 14:58:18', 4, '', 25, '66a34cf2-5d6b-448e-9f43-ddbcbcd8f612', '', '', '', '', ''), -(215, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Tab Setup Options', 'NOT NULL', '', 14, '\"tutorial<\\/a> for more info.\\\" \\r\\n\\theading=\\\"h4\\\" \\r\\n\\tclass=\\\"alert alert-info\\\" \\r\\n\\/>\"', 1, '2015-05-10 18:12:30', '2017-10-26 15:36:49', 4, '', 24, '1593798f-a2d9-4c06-bb93-b8cb0552165d', '', '', '', '', ''), -(216, '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Note - WHMCS Encryption', 'NOT NULL', '', 14, '\"When using the WHMCS encryption you need to get a WHMCS key from:
https:\\/\\/www.vdm.io<\\/a>, or your own WHMCS<\\/a> install.<\\/p>

Please note that you will need to enable the add-on<\\/b> in the Joomla Component area (Add WHMCS)->Yes.<\\/p>

You can get more info about the WHMCS licensing add-on at the following links.<\\/p>

Helpful Links:<\\/b>
\\r\\n
https:\\/\\/www.whmcs.com\\/software-licensing\\/<\\/a>
\\r\\n
http:\\/\\/docs.whmcs.com\\/Licensing_Addon\\/<\\/a><\\/p>

Support JCB and use our affiliate link (https:\\/\\/www.whmcs.com\\/members\\/aff.php?aff=37513<\\/a>) to sign-up with WHMCS<\\/a>.<\\/p>\\\"\\n\\theading=\\\"h4\\\"\\n\\tclass=\\\"alert alert-success note_whmcs_encryption\\\"\\n\\/>\"', 1, '2015-05-12 13:15:33', '2018-07-08 00:37:00', 8, '', 23, '700f1075-c5c5-4781-bbed-e8eb4d95c627', '', '', '', '', ''), -(217, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Youtube', 'NOT NULL', '', 14, '\"Share<\\/b>, once you click on it there will open an area with three options [Share<\\/b>, embed, email]. Under the Share<\\/b> option you will see a box with an url like (https:\\/\\/youtu.be\\/gWU12DzPTUo) simply copy that url into the box below. Done!<\\/b>\\\" \\r\\n\\theading=\\\"h4\\\" \\r\\n\\tclass=\\\"alert alert-info\\\" \\r\\n\\tclose=\\\"true\\\" \\r\\n\\/>\"', 1, '2015-04-30 14:20:00', '2015-08-25 21:15:22', 1, '', 22, '64f9f319-39ea-4fc7-84d2-57656dc64918', '', '', '', '', ''), -(218, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Null Switch', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-10 21:38:22', '2015-08-25 21:15:22', 1, '', 21, '6a3d21ad-7cb1-4456-a623-20aa71ba0b12', '', '', '', '', ''), -(219, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Number', 'NOT NULL', '', 15, '\"\"', 1, '2015-05-09 18:23:27', '2015-08-25 21:15:22', 1, '', 20, 'c2ce0b7e-e917-40c0-9c63-016425dd11fd', '', '', '', '', ''), -(220, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Objective', 'NOT NULL', '', 8, '\"\"', 1, '2015-04-24 07:58:59', '2015-08-25 21:15:22', 1, '', 1, 'acd5be1f-fecc-4c27-bd8a-bc322bb5c6e7', '', '', '', '', ''), -(221, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Order', 'NOT NULL', '', 10, '\"\"', 1, '2015-05-11 13:15:08', '2015-08-25 21:15:22', 1, '', 146, '6d75ad18-74e3-421f-b6e9-e7f3d3bdf0ac', '', '', '', '', ''), -(222, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Order in Edit', 'NOT NULL', '', 10, '\"\"', 1, '2015-05-11 13:19:19', '2015-08-25 21:15:22', 1, '', 127, '2e9ffee9-b05e-42c3-a497-9d566e52324b', '', '', '', '', ''), -(223, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Order in list views', 'NOT NULL', '', 10, '\"\"', 1, '2015-05-11 13:15:08', '2018-04-13 13:29:41', 10, '', 126, '87056801-539b-43d9-bb53-be49093132d0', '', '', '', '', ''), -(224, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Other Data Length', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-10 21:38:22', '2020-04-19 00:53:32', 4, '', 125, 'fd7ff7b0-a8e9-476c-8e9d-ac4ca338c589', '', '', '', '', ''), -(225, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Other Data Default', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-10 21:38:22', '2019-09-12 19:52:59', 2, '', 124, '6b2277f3-44e1-4bbb-8e55-3315bdba736e', '', '', '', '', ''), -(226, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Outcome', 'NOT NULL', '', 8, '\"\"', 1, '2015-04-24 11:18:50', '2015-08-25 21:15:22', 2, '', 123, 'aece0b93-473f-4822-ac49-c368e625fb0c', '', '', '', '', ''), -(227, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Overview', 'NOT NULL', '', 8, '\"\"', 1, '2015-04-24 11:18:50', '2019-10-10 21:03:58', 3, '', 122, '0a6f6867-afac-440b-b9ff-9eeddf1d3e07', '', '', '', '', ''), -(228, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Period Length', 'NOT NULL', '', 10, '\"\"', 1, '2015-05-05 23:57:28', '2015-09-23 04:00:51', 3, '', 121, '4ed9a470-d2fe-4c7b-93a1-3ed88d50fd8a', '', '', '', '', ''), -(229, '', '', '', '', '', '', 'Other', 3, 1, '', 'TINYINT', 2, '', '', 'Release Period Type (email)', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-05 23:57:28', '2016-02-05 22:58:58', 6, '', 120, 'b5795715-eb89-46f6-8a5f-faddb08b5ca1', '', '', '', '', ''), -(230, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (getItem - JModelForm)', 'NOT NULL', 2, 8, '\"Target (object) $item values.<\\/small>\\\"\\n\\tdescription=\\\"Add PHP Here that should run in the getItem Method. Do not add the php tags.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-05-11 12:36:14', '2019-07-08 14:12:29', 7, '', 119, 'a921c373-45bb-4919-a840-5b13511102cb', '', '', '', '', ''), -(231, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (getItems - JModelAdmin)', 'NOT NULL', 2, 8, '\"Target (array) $items values.<\\/small>\\\"\\n\\tdescription=\\\"Add PHP Here that should run in the getItems Method. Do not add the php tags.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-05-11 12:36:14', '2019-07-08 14:13:10', 6, '', 118, '0ec2dbcd-8acc-438f-ad28-906fc7b6474e', '', '', '', '', ''), -(232, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (helper_admin)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-11 12:36:14', '2024-04-19 08:09:08', 6, '', 117, '16a76125-d200-4bbf-aa00-91da3513a8f8', '', '', '', '', ''), -(233, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (postSaveHook - edit)', 'NOT NULL', 2, 8, '\"Target (object) $model for the data model object and (array) $validData for the validated data.<\\/small>\\\"\\n\\tdescription=\\\"Add PHP Here that should run in the postSaveHook Method. Do not add the php tags.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-05-11 12:36:14', '2019-07-08 14:13:24', 4, '', 116, 'b97daa06-7589-43e1-aaf9-c9506756f7b4', '', '', '', '', ''), -(234, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (save - edit)', 'NOT NULL', 2, 8, '\"Target (array) $data values<\\/small>\\\"\\n\\tdescription=\\\"Add PHP Here that should run in the save Method. Do not add the php tags.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-05-11 12:36:14', '2019-07-08 14:18:48', 4, '', 115, '8ac3beb5-c100-41d6-8d2e-dd3e57f3701a', '', '', '', '', ''), -(235, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Point (answer point)', 'NOT NULL', '', 10, '\"\"', 1, '2015-05-03 00:09:17', '2016-12-08 18:12:42', 5, '', 114, '5145b754-1136-497b-ab9d-4767a1b198e0', '', '', '', '', ''), -(236, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Program', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-04-07 07:54:26', '2015-08-25 21:15:22', 6, '', 113, '52771d2c-977b-4312-af7d-e2cb2b2a3e55', '', '', '', '', ''), -(237, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Program Type', 'NOT NULL', '', 2, '\"\"', 1, '2015-03-28 06:56:00', '2015-09-08 19:05:30', 2, '', 112, 'e855d772-ef2f-46aa-8199-51900a20c982', '', '', '', '', ''), -(238, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Properties', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-09 22:50:20', '2021-12-16 04:47:37', 3, '', 128, 'ddb8f57f-77c8-4cad-a8cb-0cdc799ce4a1', '', '', '', '', ''), -(239, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Question', 'NOT NULL', '', 8, '\"\"', 1, '2015-04-07 22:08:34', '2015-08-25 21:15:22', 1, '', 129, '95f10df0-1f14-4fa9-8876-a217fcb13d30', '', '', '', '', ''), -(240, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Form - Required', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-02 09:34:03', '2015-12-04 03:40:21', 2, '', 145, '2eb9c193-4cd3-41ed-815d-ac1e0d5c1f69', '', '', '', '', ''), -(241, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Requirement', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-04-07 07:54:26', '2015-08-25 21:15:22', 4, '', 144, '11a5f89a-b07b-4233-8306-eeb91190bbb4', '', '', '', '', ''), -(242, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Reviewed', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-03 00:13:32', '2015-08-25 21:15:22', 1, '', 143, 'b54cda53-a114-4213-8cd0-d8d7a5519459', '', '', '', '', ''), -(243, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Select Tab', 'NOT NULL', '', 10, '\"\"', 1, '2015-05-11 13:16:53', '2018-08-23 17:02:50', 3, '', 142, '00c4d921-5517-4bb8-b38a-54740ae36e6c', '', '', '', '', ''), -(244, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Selection', 'NOT NULL', '', 24, '\"\"', 1, '2015-04-28 10:48:58', '2015-09-11 21:01:37', 3, '', 141, '2fc2a804-0388-4bb4-a8cb-a86cd742d8b3', '', '', '', '', ''), -(245, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Selection 10', 'NOT NULL', '', 24, '\"\"', -2, '2015-04-28 10:48:58', '2015-08-25 21:15:22', 1, '', 140, '91679552-5ed1-44b1-b9cb-29488077c4d0', '', '', '', '', ''), -(246, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Selection 2', 'NOT NULL', '', 24, '\"\"', -2, '2015-04-28 10:48:58', '2015-08-25 21:15:22', 1, '', 139, 'c775e966-e8ca-4f06-9e68-3d39407d6e2e', '', '', '', '', ''), -(247, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Selection 3', 'NOT NULL', '', 24, '\"\"', -2, '2015-04-28 10:48:58', '2015-08-25 21:15:22', 1, '', 138, '03a71d7d-b6a3-4d59-aec8-d756d4fe5837', '', '', '', '', ''), -(248, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Selection 4', 'NOT NULL', '', 24, '\"\"', -2, '2015-04-28 10:48:58', '2015-08-25 21:15:22', 1, '', 137, '93afec03-e2e8-463c-b66b-df3ae5e696f5', '', '', '', '', ''), -(249, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Selection 5', 'NOT NULL', '', 24, '\"\"', -2, '2015-04-28 10:48:58', '2015-08-25 21:15:22', 1, '', 136, 'f7c7c1ec-d01a-4a84-ac9a-74633cf681f9', '', '', '', '', ''), -(250, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Selection 6', 'NOT NULL', '', 24, '\"\"', -2, '2015-04-28 10:48:58', '2015-08-25 21:15:22', 1, '', 135, '673c3909-017f-4ba8-acb7-bfc19b8688f7', '', '', '', '', ''), -(251, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Selection 7', 'NOT NULL', '', 24, '\"\"', -2, '2015-04-28 10:48:58', '2015-08-25 21:15:22', 1, '', 134, '4b0f97dc-03b1-42d0-a5ad-189630e4abe1', '', '', '', '', ''), -(252, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Selection 8', 'NOT NULL', '', 24, '\"\"', -2, '2015-04-28 10:48:58', '2015-08-25 21:15:22', 1, '', 133, '59ab407f-799d-4937-836e-37594e7480af', '', '', '', '', ''), -(253, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Selection 9', 'NOT NULL', '', 24, '\"\"', -2, '2015-04-28 10:48:58', '2015-08-25 21:15:22', 1, '', 132, '78dd26c0-72eb-43e5-aefb-1391ef2a15aa', '', '', '', '', ''), -(254, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Session', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')))->select($db->quoteName(array(\'p.acronym\'),array(\'program\')))->select($db->quoteName(array(\'c.name\'),array(\'course\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'))->join(\'LEFT\', $db->quoteName(\'#__###component###_course\', \'c\') . \' ON (\' . $db->quoteName(\'a.course\') . \' = \' . $db->quoteName(\'c.id\') . \')\')->join(\'LEFT\', $db->quoteName(\'#__###component###_program\', \'p\') . \' ON (\' . $db->quoteName(\'c.program\') . \' = \' . $db->quoteName(\'p.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' - \' . $item->course . \' (\' . $item->program . \')\');\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-04-24 07:50:46', '2016-02-06 21:45:16', 6, '', 131, 'c2b386ee-90c2-4c5b-8798-c6766125170c', '', '', '', '', ''), -(255, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Short Description', 'NOT NULL', '', 24, '\"\"', 1, '2015-03-19 18:20:49', '2015-08-25 21:15:22', 1, '', 130, '46503007-43d9-485f-8cd0-8427a6a8bef2', '', '', '', '', ''), -(256, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'SMS Text', 'NOT NULL', '', 25, '\"\"', 1, '2015-04-24 09:35:47', '2015-08-25 21:15:22', 1, '', 111, '9ed10826-ae75-4219-9345-d8d9796b17ce', '', '', '', '', ''), -(257, '', '', '', '', '', '', '', '', 1, '', 'CHAR', '', '', '', 'Spacer hr', 'NOT NULL', '', 20, '\"\"', 1, '2015-04-08 00:33:17', '2015-08-25 21:15:22', 1, '', 110, '1cf7d30a-6af1-41c7-80bc-91a0fcc52ef2', '', '', '', '', ''), -(258, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Field Modelling Method', 'NOT NULL', '', 11, '\"Default<\\/b> is the Joomla basic normal storing way of dealing with this field type.\\\"\\n\\tclass=\\\"list_class\\\"\\n\\tmultiple=\\\"false\\\"\\n\\tfilter=\\\"INT\\\"\\n\\trequired=\\\"true\\\"\\n\\toption=\\\"0|Default,1|JSON,2|base64,3|Basic Encryption (local-DB-key),5|Medium Encryption (local-file-key),4|WHMCS-key Encryption,6|Expert Mode - Custom\\\"\\n\\tdefault=\\\"0\\\"\\n\\/>\"', 1, '2015-05-12 12:40:42', '2023-10-10 07:58:41', 8, '', 109, '48b78ab1-bfb0-44eb-9ec8-4f5cdbf4a32c', '', '', '', '', ''), -(259, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Strength', 'NOT NULL', '', 18, '\"\"', 1, '2015-05-09 16:20:17', '2015-08-25 21:15:22', 1, '', 90, '62ec9ef8-36ad-447e-981b-351ac4854e55', '', '', '', '', ''), -(260, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Strenth Value', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-09 17:39:32', '2015-08-25 21:15:22', 1, '', 89, 'e0cb48a2-f338-4014-b1b0-4c069c654014', '', '', '', '', ''), -(261, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Student (users)', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', 1, '2015-04-13 23:34:55', '2015-09-11 03:35:58', 4, '', 88, '181fe0b4-0199-4b2a-9b5b-5de5935cf2a4', '', '', '', '', ''), -(262, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Subject', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-05 23:30:50', '2020-07-01 22:37:50', 9, '', 87, 'f02ed2fc-949d-4ca9-a18e-2cb8005f3340', '', '', '', '', ''), -(263, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Submenu', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-11 23:14:53', '2019-06-11 12:19:24', 4, '', 86, '74f2e2ca-6f72-4d1a-813a-3355ea997161', '', '', '', '', ''), -(264, '', '', '', '', '', '', '', '', 255, '', 'CHAR', '', '', '', 'Surname', 'NOT NULL', '', 24, '\"\"', 1, '2015-04-13 14:23:12', '2018-09-15 22:41:03', 3, '', 85, '0c0a7421-2160-481e-a080-5d184122ef30', '', '', '', '', ''), -(265, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Tags', 'NOT NULL', '', 22, '\"\"', 1, '2015-04-12 15:05:32', '2017-04-07 06:19:54', 2, '', 84, '83b63e41-afde-4578-af6c-c2010b01faee', '', '', '', '', ''), -(266, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Target Behavior', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-11 18:49:20', '2020-05-20 12:07:44', 4, '', 83, '65d97520-692f-43a7-b2ce-c980f3469384', '', '', '', '', ''), -(267, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Alias Builder', 'NOT NULL', '', 6, '\"\"', 1, '2015-04-28 10:45:32', '2024-03-26 13:25:23', 15, '', 82, '96e3d0e6-e8b5-488f-8758-7cec18bd5858', '', '', '', '', ''), -(268, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Target Relation', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-11 18:49:20', '2020-05-20 12:16:26', 5, '', 81, 'e393e7fe-b0b9-450d-b51f-d89cb53b2165', '', '', '', '', ''), -(269, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Teaser', 'NOT NULL', '', 25, '\"\"', 1, '2015-04-24 09:35:47', '2015-08-25 21:15:22', 1, '', 80, 'aba2f94c-5e2a-48c0-be5a-e6775c90475d', '', '', '', '', ''), -(270, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Text Mark Type', 'NOT NULL', '', 11, '\"\"', 1, '2015-04-28 10:45:32', '2015-08-25 21:15:22', 1, '', 79, '22f4b781-8195-4d7d-a605-da260415731b', '', '', '', '', ''), -(271, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Thumb', 'NOT NULL', '', 12, '\"\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 78, 'b27247a6-663b-4c44-a460-ad40f09db78b', '', '', '', '', ''), -(272, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Release Type (email)', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-05 23:57:28', '2016-02-06 22:43:52', 6, '', 77, '06c3c5d5-a4ac-4d28-9f73-4dcee5623046', '', '', '', '', ''), -(273, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Title', 'NOT NULL', '', 24, '\"\"', 1, '2015-03-19 17:30:59', '2023-06-27 23:45:55', 2, '', 76, 'edda1847-ef2e-4a76-9763-c41c82b08c00', '', '', '', '', ''), -(274, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Toppings', 'NOT NULL', '', 4, '\"\"', 1, '2015-04-23 20:57:19', '2015-08-25 21:15:22', 2, '', 75, '622f395d-84d8-434b-8362-a9f9cde06dd5', '', '', '', '', ''), -(275, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Translatable', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-10 21:38:22', '2017-09-21 02:05:18', 3, '', 91, 'e8038a0c-f819-4e1d-99ed-e4928bea1664', '', '', '', '', ''), -(276, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', '', '', '', 'Use Global From', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-06 00:06:05', '2016-05-02 00:47:45', 3, '', 92, '31af5638-b133-4b54-8bc2-abc49c8f7834', '', '', '', '', ''), -(277, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Value/Example', 'NOT NULL', '', 25, '\"\"', 1, '2015-05-10 21:38:22', '2018-09-26 22:07:18', 4, '', 108, '7f5be0e7-39e8-4938-8ebc-e6ba37a3da53', '', '', '', '', ''), -(278, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'VDM Public Key', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-12 13:17:56', '2015-08-25 21:15:22', 1, '', 107, '57043d50-9ee1-443e-bdf5-9df150d063e5', '', '', '', '', ''), -(279, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'View Type', 'NOT NULL', '', 11, '\"\"', 1, '2015-03-19 18:23:52', '2015-08-25 21:15:22', 1, '', 106, '5f2ddc22-11f5-49a5-bebf-8313d8006e46', '', '', '', '', ''), (280, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Website', 'NOT NULL', '', 27, '\"\"', 1, '2015-04-08 00:36:16', '2018-07-08 00:11:05', 2, '', 105, '6c3a6983-d1bf-4e5e-9e99-deea00b0cefd', '', '', '', '', ''), -(281, '', '', '', '', '', '', '', '', 64, '', 'INT', '', '', '', 'Word Count', 'NOT NULL', '', 24, '\"\"', 1, '2015-04-28 10:45:32', '2015-08-25 21:15:22', 1, '', 104, '7e2e8d03-c15f-4776-b568-456aac735e0a', '', '', '', '', ''), -(282, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Word Count Point', 'NOT NULL', '', 10, '\"\"', 1, '2015-04-28 10:52:33', '2015-08-25 21:15:22', 1, '', 103, '90eb6129-8156-42ea-b92b-b57e1f88b393', '', '', '', '', ''), -(283, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', '', '', '', 'Work Phone', 'NOT NULL', '', 23, '\"\"', 1, '2015-04-07 22:12:58', '2015-08-25 21:15:22', 1, '', 102, 'ac9a313d-2c9b-4a83-a64c-d81683617f52', '', '', '', '', ''), -(284, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'XML Field Definition', 'NOT NULL', 1, 9, '\"\"', 1, '2015-05-10 21:38:22', '2018-04-09 08:45:14', 2, '', 101, '83a3c115-1a4f-44a7-9572-e91043acdbaa', '', '', '', '', ''), -(285, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Yes', 'NOT NULL', '', 3, '\"\"', 1, '2015-04-23 20:56:23', '2015-08-25 21:15:22', 1, '', 100, 'c167f40e-936e-4032-bc5a-ef49a450a710', '', '', '', '', ''), -(286, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'YesNo Point', 'NOT NULL', '', 10, '\"\"', 1, '2015-04-28 10:52:33', '2015-08-25 21:15:22', 1, '', 99, 'd11263b8-2da9-4b12-af6d-47ea3541b7f6', '', '', '', '', ''), -(287, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Youtube', 'NOT NULL', '', 27, '\"\"', 1, '2015-04-30 14:05:30', '2015-08-25 21:15:22', 1, '', 98, '4e3742b4-a8aa-40f5-b400-1736e0e79d74', '', '', '', '', ''), -(288, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add Javascript (view-footer)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-12 19:37:16', '2015-08-25 21:15:22', 1, '', 294, '9405da44-900c-4f7c-823d-734a68f5d6f6', '', '', '', '', ''), -(289, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add Javascript (views-footer)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-12 19:37:29', '2015-08-25 21:15:22', 1, '', 295, '70995b9c-d0a9-4a57-b59b-54d39c379e66', '', '', '', '', ''), -(290, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Javascript (view-footer)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-12 19:37:51', '2019-07-08 14:13:34', 3, '', 296, 'a99c1f40-4b41-4167-ad29-85133375aa7a', '', '', '', '', ''), -(291, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Javascript (views-footer)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-12 19:38:05', '2019-07-08 14:13:40', 3, '', 297, '34bf9926-34a4-49a3-a29e-b602b1e5f9b2', '', '', '', '', ''), -(292, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add CSS', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-12 19:43:43', '2018-01-15 11:50:37', 2, '', 298, '14c857e3-e684-49a3-8b34-1cf7448ed0c4', '', '', '', '', ''), -(293, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'CSS (admin)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-12 19:44:54', '2024-04-19 08:11:54', 6, '', 299, '33c588ca-83b2-419d-b87f-b9f4e5e4ea54', '', '', '', '', ''), -(294, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Licensing Template', 'NOT NULL', '', 30, '\"\"', 1, '2015-05-13 14:50:23', '2018-08-18 06:48:43', 3, '', 302, 'b659c01d-accd-4049-bd4c-083000740d5a', '', '', '', '', ''), -(295, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'File', 'NOT NULL', '', 6, '\"\"', 1, '2015-05-13 15:15:40', '2024-03-20 11:28:57', 4, '', 300, '071ef0b2-94f6-4d75-9fd8-c7fbdce500b5', '', '', '', '', ''), -(296, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Target Path', 'NOT NULL', '', 24, '\"unzip the compiled zip file<\\/b> to see the structure. \\\"\\r\\n\\tsize=\\\"40\\\" \\r\\n\\tmaxlength=\\\"150\\\"\\r\\n\\tclass=\\\"text_area\\\" \\r\\n\\treadonly=\\\"false\\\" \\r\\n\\tdisabled=\\\"false\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\tfilter=\\\"PATH\\\" \\r\\n\\tvalidate=\\\"\\\" \\r\\n\\tmessage=\\\"Error! Please add target path.\\\" \\r\\n\\thint=\\\"Target Path Here\\\" \\r\\n\\/>\"', 1, '2015-05-13 15:19:13', '2018-02-14 21:36:06', 3, '', 303, 'd626e1f0-47b4-4aed-8c75-700a9566488f', '', '', '', '', ''), -(297, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Add Files', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-13 15:24:04', '2017-11-24 23:21:42', 4, '', 307, 'b483276a-db33-4aae-a178-17dc989114f1', '', '', '', '', ''), -(298, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Add Folders', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-13 15:25:04', '2017-11-24 23:22:12', 3, '', 306, 'b79528e9-d7fe-4dc3-90f0-fb90c3b53f9c', '', '', '', '', ''), -(299, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Folder', 'NOT NULL', '', 6, '\"\"', 1, '2015-05-13 15:27:18', '2024-04-07 09:47:43', 3, '', 304, '31f144af-ed45-4c80-85c8-fff4c4e0ca0d', '', '', '', '', ''), -(300, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Files', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-13 15:31:20', '2018-02-16 13:30:03', 3, '', 310, '143f8b3d-5b58-4b26-aaad-a5f14a57865b', '', '', '', '', ''), -(301, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Folder', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-13 15:36:30', '2018-02-16 13:31:40', 3, '', 309, '483f2c40-2348-4168-817b-471f5ba96984', '', '', '', '', ''), -(302, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Field Information', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-13 21:22:14', '2015-08-25 21:15:22', 1, '', 312, '50fb0b10-d6b7-477e-b847-024337dc9de9', '', '', '', '', ''), -(303, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Filter Information', 'NOT NULL', '', 14, '\"\\r\\n\\t

\\r\\n\\t

Filter Information<\\/h1>\\r\\n\\t\\r\\n\\t\\r\\n\\t \\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t
The available values for the filter attribute are:<\\/caption>\\r\\n\\t\\t
Filter<\\/th>\\r\\n\\t\\t\\t\\tDescription<\\/th>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t<\\/thead>\\r\\n\\t\\t
INT<\\/code><\\/td>\\r\\n\\t\\t\\t\\tAn integer<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
UINT<\\/code><\\/td>\\r\\n\\t\\t\\t\\tAn unsigned integer<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
FLOAT<\\/code><\\/td>\\r\\n\\t\\t\\t\\tA floating point number<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
BOOLEAN<\\/code><\\/td>\\r\\n\\t\\t\\t\\tA boolean value<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
WORD<\\/code><\\/td>\\r\\n\\t\\t\\t\\tA string containing A-Z or underscores only (not case sensitive)<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
ALNUM<\\/code><\\/td>\\r\\n\\t\\t\\t\\tA string containing A-Z or 0-9 only (not case sensitive)<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
CMD<\\/code><\\/td>\\r\\n\\t\\t\\t\\tA string containing A-Z, 0-9, underscores, periods or hyphens (not case sensitive)<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
BASE64<\\/code><\\/td>\\r\\n\\t\\t\\t\\tA string containing A-Z, 0-9, forward slashes, plus or equals (not case sensitive)<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
STRING<\\/code><\\/td>\\r\\n\\t\\t\\t\\tA fully decoded and sanitized string (default)<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
HTML<\\/code><\\/td>\\r\\n\\t\\t\\t\\tA sanitized string<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
ARRAY<\\/code><\\/td>\\r\\n\\t\\t\\t\\tAn array<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
PATH<\\/code><\\/td>\\r\\n\\t\\t\\t\\tA sanitized file path<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
USERNAME<\\/code><\\/td>\\r\\n\\t\\t\\t\\tDo not use (use an application specific filter)<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
RAW<\\/code><\\/td>\\r\\n\\t\\t\\t\\tThe raw string is returned with no filtering<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t\\t
unknown<\\/code><\\/td>\\r\\n\\t\\t\\t\\tAn unknown filter will act like STRING. If the input is an array it will return an array of fully decoded and sanitized strings.<\\/td>\\r\\n\\t\\t\\t<\\/tr>\\r\\n\\t\\t<\\/tbody>\\r\\n\\t<\\/table>\\r\\n\\t<\\/div>\\r\\n\\t
\\r\\n\\t\\t

Validation Rules <\\/span><\\/h1>\\r\\n\\t\\t\\r\\n\\t\\t
Searching the system.<\\/span><\\/div>\\r\\n\\t<\\/div>\\r\\n\\t
\\r\\n\\t\\t

Linked To<\\/h1>\\r\\n\\t\\t\\r\\n\\t\\t
Searching the database.<\\/span><\\/div>\\r\\n\\t<\\/div>\\r\\n<\\/div>\\\" \\r\\n\\/>\"', 1, '2015-05-13 21:26:14', '2018-03-27 13:31:14', 19, '', 311, 'a3b96357-7a72-427d-a5b7-4711c86591cb', '', '', '', '', ''), -(304, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Link', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-15 12:15:11', '2015-08-25 21:15:22', 1, '', 313, '4569fcfe-2027-453b-a1b5-615f71347912', '', '', '', '', ''), -(305, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Icon (FileList - images)', 'NOT NULL', '', 30, '\"\"', 1, '2015-05-15 12:19:11', '2015-08-25 21:15:22', 1, '', 301, 'f342ee50-ae2b-4a69-a177-ebd6a68785c0', '', '', '', '', ''), -(306, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Before This Admin View (dynamic)', 'NOT NULL', '', 6, '\"\"', 1, '2015-05-15 12:22:26', '2019-06-11 12:40:36', 10, '', 314, '0f6db2fb-cba1-4584-a7a4-b4ff20ff8516', '', '', '', '', ''), -(307, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Custom Admin Menu', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-15 12:22:52', '2021-12-16 04:48:29', 5, '', 316, '60d68340-14c1-45a9-8240-30f6bdf96345', '', '', '', '', ''), -(308, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Database Tables', 'NOT NULL', '', 6, '\"\"', 1, '2015-05-15 13:26:09', '2024-03-08 19:54:35', 16, '', 329, 'e79d6000-1b3b-4d6c-8183-2153c2f5dc40', '', '', '', '', ''), -(309, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Select MySql Source', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-15 13:31:20', '2024-03-12 13:37:52', 2, '', 331, '21eff77d-da38-4ce1-96c5-e6af26463942', '', '', '', '', ''), -(310, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'MySQL (Source Map)', 'NOT NULL', 2, 25, '\"\\/\\/ First Table Map.<\\/b>
SourceField => viewField
\\/\\/ Other Tables Map.<\\/b>
firstTableKeySourceField == keySourceField
SourceField => viewField
\\/\\/ Remember to add all fields that has no default value, and is not null.<\\/b>\\\"\\n\\tmessage=\\\"Please review the Source Map selection, as it appears that certain mandatory fields have been excluded from the (MySQL -> Tables -> Source Map) selection. These specific fields are designated as \'not null\' and lack default values. This oversight may lead to errors when installing your component on Joomla 5 and above. To address this issue, you are presented with a few options:\\r\\n

\\r\\n1. Assign a default value to the field. This can be done within the specific field settings under the Database Tab.
\\r\\n2. Modify the field\'s Null Switch to \'NULL\'. This adjustment also takes place in the field settings.\\r\\n3. Alternatively, you could add these fields into the MySQL -> Tables -> Source Map<\\/b> selection. This inclusion ensures that all necessary data parameters are correctly mapped in the MySQL (dump) and available during the Joomla component installation process.\\r\\n

\\r\\nBy taking one of these actions, you will prevent potential installation errors and ensure compatibility with the requirements of Joomla 5 and above.\\\"\\n\\tclass=\\\"text_area span4\\\"\\n\\tfilter=\\\"HTML\\\"\\n\\thint=\\\"SourceField => viewField\\\"\\n\\trequired=\\\"false\\\"\\n\\tvalidate=\\\"sourcemapchecker\\\"\\n\\/>\"', 1, '2015-05-15 13:37:38', '2024-02-07 15:36:26', 6, '', 358, '0adf625e-798e-401f-b0b1-d5e1af73ff2a', '', '', '', '', ''), -(311, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Tables', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-15 15:59:32', '2017-10-09 18:20:38', 2, '', 315, '33a9df05-3e39-4cc8-af2b-234653aadb7a', '', '', '', '', ''), -(312, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Config Fields', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-18 12:30:57', '2017-12-05 17:41:30', 3, '', 359, '851d8f15-3ce4-42a3-9041-08c943f61cab', '', '', '', '', ''), -(313, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Config Tabs', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-18 12:42:10', '2015-08-25 21:15:22', 1, '', 360, 'cbe06176-d618-4fe6-bb4b-0852871e2bb6', '', '', '', '', ''), -(314, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Add Config', 'NOT NULL', '', 14, '\"<\\/span>\\\" \\r\\n\\theading=\\\"h4\\\" \\r\\n\\tclass=\\\"alert alert-info\\\" \\r\\n\\/>\"', 1, '2015-05-18 15:53:39', '2017-10-26 15:34:59', 3, '', 305, '9fdfddf4-8618-44cd-8443-bbe3fed8588a', '', '', '', '', ''), -(315, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Add Custom Menus', 'NOT NULL', '', 14, '\"<\\/span>\\\" \\r\\n\\theading=\\\"h4\\\" \\r\\n\\tclass=\\\"alert alert-info\\\" \\r\\n\\/>\"', 1, '2015-05-18 15:55:31', '2017-10-25 18:53:20', 3, '', 308, 'b9d63536-2c8f-47c8-b3a2-817164c56a81', '', '', '', '', ''), -(316, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Minify JS', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-18 17:35:36', '2015-08-25 21:15:22', 1, '', 361, 'c50783bb-a755-45c3-9432-1bf7fcddbec5', '', '', '', '', ''), -(317, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Custom Value', 'NOT NULL', '', 25, '\"\"', 1, '2015-05-18 20:05:44', '2017-11-24 23:15:58', 7, '', 362, 'ed9cd669-f816-4c23-a10b-48ad82bd8faf', '', '', '', '', ''), -(318, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add Empty Contributors', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-18 20:32:42', '2015-08-25 21:15:22', 1, '', 363, '05e16c3f-1f5e-4355-a948-5331546f218c', '', '', '', '', ''), -(319, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Snippet Usage', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-19 09:27:04', '2015-08-25 21:15:22', 1, '', 364, 'b04feeec-bca6-4897-9abe-ac40bd294265', '', '', '', '', ''), -(320, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Layout', 'NOT NULL', 2, 8, '\"$displayData is the Object that is used inside the layout file to build displayed output<\\/small>\\\"\\n\\tdescription=\\\"Add the layout code here.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"html\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-05-19 09:54:01', '2019-07-08 14:13:55', 5, '', 368, '7c9289e1-b326-4596-9dd8-f6ebe861a0ef', '', '', '', '', ''), -(321, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'UIkit Data', 'NOT NULL', 1, 11, '\"\"', 1, '2015-05-19 09:57:07', '2015-08-25 21:15:22', 1, '', 369, '950c79fb-fa75-40c4-ba18-1cff25fbcc76', '', '', '', '', ''), -(322, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP site (view)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-19 14:20:42', '2019-07-08 14:14:03', 7, '', 370, 'e27df414-cf8a-45c3-bc38-cc48e6146fef', '', '', '', '', ''), -(323, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Snippets', 'NOT NULL', 2, 25, '\"\"', 1, '2015-05-19 14:51:31', '2015-08-25 21:15:22', 1, '', 367, '144a1f95-97d5-42b4-be3e-39f21215780e', '', '', '', '', ''), -(324, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'URL', 'NOT NULL', '', 27, '\"\"', 1, '2015-05-19 16:08:22', '2022-06-18 10:23:24', 4, '', 378, 'd29d6854-bb4a-4fa2-83a1-5a1b9c9a0eaf', '', '', '', '', ''), -(325, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Snippet Types', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' >= 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\\r\\n\\/\\/\\/ 1|Layout,2|Navigations,3|Elements,4|Common,5|JavaScript,6|Charts\"', 1, '2015-05-19 16:27:33', '2017-11-19 23:15:02', 5, '', 379, '0cc69ef6-eb4d-4a0d-ad40-84bc1845e48f', '', '', '', '', ''), -(326, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Usage', 'NOT NULL', '', 25, '\"\"', 1, '2015-05-19 16:30:48', '2015-08-25 21:15:22', 1, '', 380, '155d8238-a2cf-446c-91a5-c8322ee1d890', '', '', '', '', ''), -(327, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Heading', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-19 16:51:55', '2015-08-25 21:15:22', 1, '', 381, 'fc671dc8-a9be-43d9-b42a-671750ad869d', '', '', '', '', ''), -(328, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Update (Not New)', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-19 17:58:35', '2019-06-11 12:24:24', 3, '', 382, 'f4aee176-7c3c-4bc2-8b01-52f960525cdc', '', '', '', '', ''), -(329, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Rename', 'NOT NULL', '', 3, '\"\"', 1, '2015-05-19 19:14:30', '2019-06-11 12:24:45', 3, '', 383, 'cf557971-11ed-4ccc-9d28-a3478aaa12ff', '', '', '', '', ''), -(330, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - UIkit Snippet Details', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-19 21:02:29', '2015-08-25 21:15:22', 1, '', 377, 'a056497a-d35f-44e5-b3cb-1cac030fcd3c', '', '', '', '', ''), -(331, 1, '', 1, '', 'I2pmb3JtX3NuaXBwZXRfY2h6biB7DQp3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KfQ0KLmpmb3JtX3NuaXBwZXRfaW5wdXRfd2lkdGggew0Kd2lkdGg6IDkwJSAhaW1wb3J0YW50Ow0KfQ==', '', '', '', 11, '', 'INT', '', 'alF1ZXJ5KCcjamZvcm1fc25pcHBldCcpLmNsb3Nlc3QoJy5pbnB1dC1hcHBlbmQnKS5hZGRDbGFzcygnamZvcm1fc25pcHBldF9pbnB1dF93aWR0aCcpOw==', '', 'Snippet (Dynamic)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\',\'b.name\',\'c.name\'),array(\'###ID###\',\'###CODE_TEXT###\',\'type\',\'library\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\r\\n\\t\\t\\/\\/ From the ###component###_snippet_type table.\\r\\n\\t\\t$query->join(\'LEFT\', $db->quoteName(\'#__###component###_snippet_type\', \'b\') . \' ON (\' . $db->quoteName(\'a.type\') . \' = \' . $db->quoteName(\'b.id\') . \')\');\\r\\n\\t\\t\\/\\/ From the ###component###_library table.\\r\\n\\t\\t$query->join(\'LEFT\', $db->quoteName(\'#__###component###_library\', \'c\') . \' ON (\' . $db->quoteName(\'a.library\') . \' = \' . $db->quoteName(\'c.id\') . \')\');\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' >= 1\');\\\\n\\\\t\\\\t$query->order(\'c.ordering ASC\');\\\\n\\\\t\\\\t$query->order(\'b.name ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t$lib = (isset($item->library) && ###Component###Helper::checkString($item->library)) ? \' (\' . $item->library . \')\' :\'\';\\r\\n\\\\t\\\\t\\\\t\\\\t$type = (isset($item->type) && ###Component###Helper::checkString($item->type)) ? $item->type :JText::_(\'No Type\');\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $type . \' - \' . $item->###CODE_TEXT### . $lib );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-05-19 21:43:35', '2017-11-22 21:34:55', 14, '', 384, 'fc4bc2f3-1a12-4484-88dc-273199fe3b63', '', '', '', '', ''), -(332, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (AJAX)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-20 08:26:25', '2015-08-25 21:15:22', 1, '', 385, '625b65cb-7569-437a-a6dd-b3290c662e18', '', '', '', '', ''), -(333, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (AJAX Model Method)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-20 08:27:44', '2019-07-08 14:14:11', 3, '', 386, 'c731b5f5-5bd3-4ad3-ac3e-9e0281104121', '', '', '', '', ''), -(334, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Task Name', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-20 08:31:55', '2015-08-25 21:15:22', 1, '', 388, '9943a4a2-ef23-4d0d-bda8-af7c28dad726', '', '', '', '', ''), -(335, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Input Filter', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-20 08:39:38', '2021-12-21 14:39:15', 2, '', 389, 'e60e7a4c-1ac9-4f6b-a70c-4af18c28d230', '', '', '', '', ''), -(336, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Default Value', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-20 08:49:57', '2015-08-25 21:15:22', 1, '', 390, '652e3d0d-b2de-4557-91b4-9c8cbf5ab0c0', '', '', '', '', ''), -(337, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Method Name (AJAX)', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-20 08:51:41', '2015-08-25 21:15:22', 1, '', 391, '4c478509-238f-416d-b722-f25d83a82dfe', '', '', '', '', ''), -(338, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Ajax Input', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-20 09:19:33', '2019-04-27 21:26:41', 4, '', 392, 'e407f6f1-e4e9-4f23-a8c7-8ad75e14a820', '', '', '', '', ''), -(339, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Value Name', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-20 09:31:07', '2015-08-25 21:15:22', 1, '', 393, '9ee74269-0624-44d5-91ae-99805b838fa1', '', '', '', '', ''), -(340, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Dynamic Values', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-21 13:20:01', '2015-08-25 21:15:22', 3, '', 394, 'bd250dba-7443-4bef-a94d-5c11a742f799', '', '', '', '', ''), -(341, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Admin View (dynamic - not required)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' >= 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$options[] = Html::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = Html::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-05-21 13:25:23', '2017-10-26 01:49:15', 7, '', 405, '13c70205-e63c-4a6c-bffb-096079a6bcd8', '', '', '', '', ''), -(342, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Get Type', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-21 22:04:46', '2015-08-25 21:15:22', 1, '', 414, '5377a931-8a17-4eed-92dd-8a8808408a5a', '', '', '', '', ''), -(343, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (main)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-05-21 22:07:44', '2016-01-10 16:40:33', 5, '', 400, 'f398a2ca-122e-47ad-8e4e-3ee2ac30bf26', '', '', '', '', ''), -(351, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (main)', 'NOT NULL', '', 6, '\"\"', 1, '2015-05-21 22:15:09', '2024-03-26 13:25:13', 8, '', 327, '4c744096-3d1c-406d-87f4-71169002e85f', '', '', '', '', ''), -(375, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (main)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-21 23:01:59', '2015-08-25 21:15:22', 1, '', 474, '59821262-b8ef-490f-9b1e-efa7e93f858d', '', '', '', '', ''), -(376, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Jount View Table', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-21 23:05:08', '2020-06-05 00:59:22', 6, '', 97, '79ab7f6c-a6b5-4bad-bcdd-c113d49db876', '', '', '', '', ''), -(378, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'View On Field (main)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-21 23:13:35', '2015-05-23 12:07:02', 1, '', 511, 'd82c9cfe-a1de-43c5-8266-aaae6751934f', '', '', '', '', ''), -(379, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'View Equal Field (main)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-21 23:14:04', '2015-05-23 12:07:37', 1, '', 96, '6125988d-386d-4406-9ebb-cde52e161cfb', '', '', '', '', ''), -(380, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'View Select Fields (main)', 'NOT NULL', '', 25, '\"\"', 1, '2015-05-21 23:17:05', '2015-08-25 21:15:22', 1, '', 341, '14f4d49c-7e54-494e-b103-eaccb6428ee8', '', '', '', '', ''), -(381, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (join)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' >= 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-05-22 12:06:57', '2017-10-26 01:56:11', 6, '', 395, 'b970f2d3-be9c-4194-baae-83f18df21ce4', '', '', '', '', ''), -(382, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (c)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select(\'###TABLE###.###ID### as ###ID###, ###TABLE###.###TEXT### as ###CODE_TEXT###\');\\\" \\r\\n\\ttype_php_4=\\\"$query->from(\'###TABLE###\');\\\" \\r\\n\\ttype_php_5=\\\"$query->order(\'###TABLE###.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:08:51', '2015-05-22 16:25:04', 1, '', 401, 'b54a6c40-1459-4498-809c-85632f136771', '', '', '', '', ''), -(383, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (d)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select(\'###TABLE###.###ID### as ###ID###, ###TABLE###.###TEXT### as ###CODE_TEXT###\');\\\" \\r\\n\\ttype_php_4=\\\"$query->from(\'###TABLE###\');\\\" \\r\\n\\ttype_php_5=\\\"$query->order(\'###TABLE###.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:09:05', '2015-05-22 16:25:08', 1, '', 397, 'cf33907d-f058-4f3b-adb8-f33a113b7041', '', '', '', '', ''), -(384, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (e)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select(\'###TABLE###.###ID### as ###ID###, ###TABLE###.###TEXT### as ###CODE_TEXT###\');\\\" \\r\\n\\ttype_php_4=\\\"$query->from(\'###TABLE###\');\\\" \\r\\n\\ttype_php_5=\\\"$query->order(\'###TABLE###.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:09:18', '2015-05-22 16:25:11', 1, '', 407, 'dcac6796-5701-4a02-a555-784cacef17a6', '', '', '', '', ''), -(385, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (f)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select(\'###TABLE###.###ID### as ###ID###, ###TABLE###.###TEXT### as ###CODE_TEXT###\');\\\" \\r\\n\\ttype_php_4=\\\"$query->from(\'###TABLE###\');\\\" \\r\\n\\ttype_php_5=\\\"$query->order(\'###TABLE###.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:09:35', '2015-05-22 16:25:14', 1, '', 409, '5d212e39-41bc-47a1-a9b5-daf4fba4732d', '', '', '', '', ''), -(386, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (g)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select(\'###TABLE###.###ID### as ###ID###, ###TABLE###.###TEXT### as ###CODE_TEXT###\');\\\" \\r\\n\\ttype_php_4=\\\"$query->from(\'###TABLE###\');\\\" \\r\\n\\ttype_php_5=\\\"$query->order(\'###TABLE###.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:09:49', '2015-05-22 16:25:18', 1, '', 411, 'f784baa0-9862-4eed-9fde-1c3f739b553f', '', '', '', '', ''), -(387, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (h)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select(\'###TABLE###.###ID### as ###ID###, ###TABLE###.###TEXT### as ###CODE_TEXT###\');\\\" \\r\\n\\ttype_php_4=\\\"$query->from(\'###TABLE###\');\\\" \\r\\n\\ttype_php_5=\\\"$query->order(\'###TABLE###.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:10:03', '2015-05-22 16:25:20', 1, '', 412, '0b934802-144c-49cb-ac8c-30ee237ca6ad', '', '', '', '', ''), -(388, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (i)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select(\'###TABLE###.###ID### as ###ID###, ###TABLE###.###TEXT### as ###CODE_TEXT###\');\\\" \\r\\n\\ttype_php_4=\\\"$query->from(\'###TABLE###\');\\\" \\r\\n\\ttype_php_5=\\\"$query->order(\'###TABLE###.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:10:17', '2015-05-22 16:25:24', 1, '', 413, 'ef1deb42-7c0d-4580-be26-66cf4ac3fdcb', '', '', '', '', ''), -(389, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (j)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select(\'###TABLE###.###ID### as ###ID###, ###TABLE###.###TEXT### as ###CODE_TEXT###\');\\\" \\r\\n\\ttype_php_4=\\\"$query->from(\'###TABLE###\');\\\" \\r\\n\\ttype_php_5=\\\"$query->order(\'###TABLE###.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:10:33', '2015-05-22 16:25:27', 1, '', 398, 'f215957d-a07d-4895-b350-5be261b3d228', '', '', '', '', ''), -(390, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (k)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select(\'###TABLE###.###ID### as ###ID###, ###TABLE###.###TEXT### as ###CODE_TEXT###\');\\\" \\r\\n\\ttype_php_4=\\\"$query->from(\'###TABLE###\');\\\" \\r\\n\\ttype_php_5=\\\"$query->order(\'###TABLE###.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:10:46', '2015-05-22 16:25:32', 1, '', 408, 'f1f1bd6c-10d3-426f-8acd-9150eac0daa6', '', '', '', '', ''), -(391, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (l)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select(\'###TABLE###.###ID### as ###ID###, ###TABLE###.###TEXT### as ###CODE_TEXT###\');\\\" \\r\\n\\ttype_php_4=\\\"$query->from(\'###TABLE###\');\\\" \\r\\n\\ttype_php_5=\\\"$query->order(\'###TABLE###.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:11:00', '2015-05-22 16:25:36', 1, '', 396, '386b3ea6-1f7d-4900-89d7-245d2ac8b05a', '', '', '', '', ''), -(392, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Table (m)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select(\'###TABLE###.###ID### as ###ID###, ###TABLE###.###TEXT### as ###CODE_TEXT###\');\\\" \\r\\n\\ttype_php_4=\\\"$query->from(\'###TABLE###\');\\\" \\r\\n\\ttype_php_5=\\\"$query->order(\'###TABLE###.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:11:12', '2015-05-22 16:25:39', 1, '', 399, 'ef38bc20-23a0-469d-8b18-8119b1021b42', '', '', '', '', ''), -(393, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (join)', 'NOT NULL', '', 6, '\"\"', 1, '2015-05-22 12:11:47', '2018-10-29 16:15:14', 3, '', 325, 'e7a79ab6-3097-44a5-9699-0a14ceaa47c2', '', '', '', '', ''), -(394, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (p)', 'NOT NULL', '', 6, '\"getTableList();\\\" \\r\\n\\ttype_php_3=\\\"$config = JFactory::getConfig();\\\" \\r\\n\\ttype_php_4=\\\"$options = array();\\\" \\r\\n\\ttype_php_5=\\\"$db = JFactory::getDBO(); $options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_6=\\\"for ($i=0; $i < count($tables); $i++)\\\" \\r\\n\\ttype_php_7=\\\"{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\/\\/only tables with primary key\\\" \\r\\n\\ttype_php_9=\\\"\\\\t$db->setQuery(\'SHOW FIELDS FROM `\'.$tables[$i].\'` WHERE LOWER( `Key` ) = \\\\\'pri\\\\\'\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\tif ($db->loadResult())\\\" \\r\\n\\ttype_php_11=\\\"\\\\t{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t\\\\t$dbprefix = version_compare(JVERSION,\'3.0\',\'lt\') ? $config->getValue(\'config.dbprefix\') : $config->get(\'dbprefix\'); $key = $i+1;\\\" \\r\\n\\ttype_php_13=\\\"\\\\t\\\\t$options[$key] = new stdClass;\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[$key]->value = str_replace($dbprefix, \'\', $tables[$i]);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[$key]->text = $tables[$i];\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:12:00', '2015-05-22 12:11:37', 1, '', 317, '9c960f4d-03b4-4a7f-9d0a-aab70f74e5f4', '', '', '', '', ''), -(395, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (q)', 'NOT NULL', '', 6, '\"getTableList();\\\" \\r\\n\\ttype_php_3=\\\"$config = JFactory::getConfig();\\\" \\r\\n\\ttype_php_4=\\\"$options = array();\\\" \\r\\n\\ttype_php_5=\\\"$db = JFactory::getDBO(); $options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_6=\\\"for ($i=0; $i < count($tables); $i++)\\\" \\r\\n\\ttype_php_7=\\\"{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\/\\/only tables with primary key\\\" \\r\\n\\ttype_php_9=\\\"\\\\t$db->setQuery(\'SHOW FIELDS FROM `\'.$tables[$i].\'` WHERE LOWER( `Key` ) = \\\\\'pri\\\\\'\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\tif ($db->loadResult())\\\" \\r\\n\\ttype_php_11=\\\"\\\\t{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t\\\\t$dbprefix = version_compare(JVERSION,\'3.0\',\'lt\') ? $config->getValue(\'config.dbprefix\') : $config->get(\'dbprefix\'); $key = $i+1;\\\" \\r\\n\\ttype_php_13=\\\"\\\\t\\\\t$options[$key] = new stdClass;\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[$key]->value = str_replace($dbprefix, \'\', $tables[$i]);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[$key]->text = $tables[$i];\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:12:13', '2015-05-22 12:11:37', 1, '', 328, '74486755-963e-4197-a2d8-d9e3cd7c78f0', '', '', '', '', ''), -(396, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (r)', 'NOT NULL', '', 6, '\"getTableList();\\\" \\r\\n\\ttype_php_3=\\\"$config = JFactory::getConfig();\\\" \\r\\n\\ttype_php_4=\\\"$options = array();\\\" \\r\\n\\ttype_php_5=\\\"$db = JFactory::getDBO(); $options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_6=\\\"for ($i=0; $i < count($tables); $i++)\\\" \\r\\n\\ttype_php_7=\\\"{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\/\\/only tables with primary key\\\" \\r\\n\\ttype_php_9=\\\"\\\\t$db->setQuery(\'SHOW FIELDS FROM `\'.$tables[$i].\'` WHERE LOWER( `Key` ) = \\\\\'pri\\\\\'\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\tif ($db->loadResult())\\\" \\r\\n\\ttype_php_11=\\\"\\\\t{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t\\\\t$dbprefix = version_compare(JVERSION,\'3.0\',\'lt\') ? $config->getValue(\'config.dbprefix\') : $config->get(\'dbprefix\'); $key = $i+1;\\\" \\r\\n\\ttype_php_13=\\\"\\\\t\\\\t$options[$key] = new stdClass;\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[$key]->value = str_replace($dbprefix, \'\', $tables[$i]);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[$key]->text = $tables[$i];\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:12:25', '2015-05-22 12:11:37', 1, '', 326, '854aaa26-d1f2-4730-96f0-2734686790fe', '', '', '', '', ''), -(397, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (s)', 'NOT NULL', '', 6, '\"getTableList();\\\" \\r\\n\\ttype_php_3=\\\"$config = JFactory::getConfig();\\\" \\r\\n\\ttype_php_4=\\\"$options = array();\\\" \\r\\n\\ttype_php_5=\\\"$db = JFactory::getDBO(); $options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_6=\\\"for ($i=0; $i < count($tables); $i++)\\\" \\r\\n\\ttype_php_7=\\\"{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\/\\/only tables with primary key\\\" \\r\\n\\ttype_php_9=\\\"\\\\t$db->setQuery(\'SHOW FIELDS FROM `\'.$tables[$i].\'` WHERE LOWER( `Key` ) = \\\\\'pri\\\\\'\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\tif ($db->loadResult())\\\" \\r\\n\\ttype_php_11=\\\"\\\\t{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t\\\\t$dbprefix = version_compare(JVERSION,\'3.0\',\'lt\') ? $config->getValue(\'config.dbprefix\') : $config->get(\'dbprefix\'); $key = $i+1;\\\" \\r\\n\\ttype_php_13=\\\"\\\\t\\\\t$options[$key] = new stdClass;\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[$key]->value = str_replace($dbprefix, \'\', $tables[$i]);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[$key]->text = $tables[$i];\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:12:38', '2015-05-22 12:11:37', 1, '', 330, '527e2a8c-c5e5-4c9a-862f-3b15a3f8da63', '', '', '', '', ''), -(398, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (t)', 'NOT NULL', '', 6, '\"getTableList();\\\" \\r\\n\\ttype_php_3=\\\"$config = JFactory::getConfig();\\\" \\r\\n\\ttype_php_4=\\\"$options = array();\\\" \\r\\n\\ttype_php_5=\\\"$db = JFactory::getDBO(); $options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_6=\\\"for ($i=0; $i < count($tables); $i++)\\\" \\r\\n\\ttype_php_7=\\\"{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\/\\/only tables with primary key\\\" \\r\\n\\ttype_php_9=\\\"\\\\t$db->setQuery(\'SHOW FIELDS FROM `\'.$tables[$i].\'` WHERE LOWER( `Key` ) = \\\\\'pri\\\\\'\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\tif ($db->loadResult())\\\" \\r\\n\\ttype_php_11=\\\"\\\\t{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t\\\\t$dbprefix = version_compare(JVERSION,\'3.0\',\'lt\') ? $config->getValue(\'config.dbprefix\') : $config->get(\'dbprefix\'); $key = $i+1;\\\" \\r\\n\\ttype_php_13=\\\"\\\\t\\\\t$options[$key] = new stdClass;\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[$key]->value = str_replace($dbprefix, \'\', $tables[$i]);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[$key]->text = $tables[$i];\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:12:49', '2015-05-22 12:11:37', 1, '', 324, '5dd13a43-d0db-40bd-8dc6-3e847879ff24', '', '', '', '', ''), -(399, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (u)', 'NOT NULL', '', 6, '\"getTableList();\\\" \\r\\n\\ttype_php_3=\\\"$config = JFactory::getConfig();\\\" \\r\\n\\ttype_php_4=\\\"$options = array();\\\" \\r\\n\\ttype_php_5=\\\"$db = JFactory::getDBO(); $options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_6=\\\"for ($i=0; $i < count($tables); $i++)\\\" \\r\\n\\ttype_php_7=\\\"{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\/\\/only tables with primary key\\\" \\r\\n\\ttype_php_9=\\\"\\\\t$db->setQuery(\'SHOW FIELDS FROM `\'.$tables[$i].\'` WHERE LOWER( `Key` ) = \\\\\'pri\\\\\'\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\tif ($db->loadResult())\\\" \\r\\n\\ttype_php_11=\\\"\\\\t{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t\\\\t$dbprefix = version_compare(JVERSION,\'3.0\',\'lt\') ? $config->getValue(\'config.dbprefix\') : $config->get(\'dbprefix\'); $key = $i+1;\\\" \\r\\n\\ttype_php_13=\\\"\\\\t\\\\t$options[$key] = new stdClass;\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[$key]->value = str_replace($dbprefix, \'\', $tables[$i]);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[$key]->text = $tables[$i];\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:13:01', '2015-05-22 12:11:37', 1, '', 323, '9589965f-952d-4139-bc24-1dc1e94f9a0f', '', '', '', '', ''), -(400, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (v)', 'NOT NULL', '', 6, '\"getTableList();\\\" \\r\\n\\ttype_php_3=\\\"$config = JFactory::getConfig();\\\" \\r\\n\\ttype_php_4=\\\"$options = array();\\\" \\r\\n\\ttype_php_5=\\\"$db = JFactory::getDBO(); $options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_6=\\\"for ($i=0; $i < count($tables); $i++)\\\" \\r\\n\\ttype_php_7=\\\"{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\/\\/only tables with primary key\\\" \\r\\n\\ttype_php_9=\\\"\\\\t$db->setQuery(\'SHOW FIELDS FROM `\'.$tables[$i].\'` WHERE LOWER( `Key` ) = \\\\\'pri\\\\\'\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\tif ($db->loadResult())\\\" \\r\\n\\ttype_php_11=\\\"\\\\t{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t\\\\t$dbprefix = version_compare(JVERSION,\'3.0\',\'lt\') ? $config->getValue(\'config.dbprefix\') : $config->get(\'dbprefix\'); $key = $i+1;\\\" \\r\\n\\ttype_php_13=\\\"\\\\t\\\\t$options[$key] = new stdClass;\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[$key]->value = str_replace($dbprefix, \'\', $tables[$i]);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[$key]->text = $tables[$i];\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:13:13', '2015-05-22 12:11:37', 1, '', 322, '147659e4-5c26-4be9-b90c-a3e1405119ee', '', '', '', '', ''), -(401, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (w)', 'NOT NULL', '', 6, '\"getTableList();\\\" \\r\\n\\ttype_php_3=\\\"$config = JFactory::getConfig();\\\" \\r\\n\\ttype_php_4=\\\"$options = array();\\\" \\r\\n\\ttype_php_5=\\\"$db = JFactory::getDBO(); $options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_6=\\\"for ($i=0; $i < count($tables); $i++)\\\" \\r\\n\\ttype_php_7=\\\"{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\/\\/only tables with primary key\\\" \\r\\n\\ttype_php_9=\\\"\\\\t$db->setQuery(\'SHOW FIELDS FROM `\'.$tables[$i].\'` WHERE LOWER( `Key` ) = \\\\\'pri\\\\\'\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\tif ($db->loadResult())\\\" \\r\\n\\ttype_php_11=\\\"\\\\t{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t\\\\t$dbprefix = version_compare(JVERSION,\'3.0\',\'lt\') ? $config->getValue(\'config.dbprefix\') : $config->get(\'dbprefix\'); $key = $i+1;\\\" \\r\\n\\ttype_php_13=\\\"\\\\t\\\\t$options[$key] = new stdClass;\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[$key]->value = str_replace($dbprefix, \'\', $tables[$i]);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[$key]->text = $tables[$i];\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:13:25', '2015-05-22 12:11:37', 1, '', 321, 'ef841d12-2632-4d58-a5c8-05493c6c106d', '', '', '', '', ''), -(402, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (x)', 'NOT NULL', '', 6, '\"getTableList();\\\" \\r\\n\\ttype_php_3=\\\"$config = JFactory::getConfig();\\\" \\r\\n\\ttype_php_4=\\\"$options = array();\\\" \\r\\n\\ttype_php_5=\\\"$db = JFactory::getDBO(); $options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_6=\\\"for ($i=0; $i < count($tables); $i++)\\\" \\r\\n\\ttype_php_7=\\\"{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\/\\/only tables with primary key\\\" \\r\\n\\ttype_php_9=\\\"\\\\t$db->setQuery(\'SHOW FIELDS FROM `\'.$tables[$i].\'` WHERE LOWER( `Key` ) = \\\\\'pri\\\\\'\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\tif ($db->loadResult())\\\" \\r\\n\\ttype_php_11=\\\"\\\\t{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t\\\\t$dbprefix = version_compare(JVERSION,\'3.0\',\'lt\') ? $config->getValue(\'config.dbprefix\') : $config->get(\'dbprefix\'); $key = $i+1;\\\" \\r\\n\\ttype_php_13=\\\"\\\\t\\\\t$options[$key] = new stdClass;\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[$key]->value = str_replace($dbprefix, \'\', $tables[$i]);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[$key]->text = $tables[$i];\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:13:36', '2015-05-22 12:11:37', 1, '', 320, '3bc4d66c-e7ea-4ec2-a378-cad562f96411', '', '', '', '', ''), -(403, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (y)', 'NOT NULL', '', 6, '\"getTableList();\\\" \\r\\n\\ttype_php_3=\\\"$config = JFactory::getConfig();\\\" \\r\\n\\ttype_php_4=\\\"$options = array();\\\" \\r\\n\\ttype_php_5=\\\"$db = JFactory::getDBO(); $options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_6=\\\"for ($i=0; $i < count($tables); $i++)\\\" \\r\\n\\ttype_php_7=\\\"{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\/\\/only tables with primary key\\\" \\r\\n\\ttype_php_9=\\\"\\\\t$db->setQuery(\'SHOW FIELDS FROM `\'.$tables[$i].\'` WHERE LOWER( `Key` ) = \\\\\'pri\\\\\'\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\tif ($db->loadResult())\\\" \\r\\n\\ttype_php_11=\\\"\\\\t{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t\\\\t$dbprefix = version_compare(JVERSION,\'3.0\',\'lt\') ? $config->getValue(\'config.dbprefix\') : $config->get(\'dbprefix\'); $key = $i+1;\\\" \\r\\n\\ttype_php_13=\\\"\\\\t\\\\t$options[$key] = new stdClass;\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[$key]->value = str_replace($dbprefix, \'\', $tables[$i]);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[$key]->text = $tables[$i];\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:13:48', '2015-05-22 12:11:37', 1, '', 319, 'c6b319e0-9d53-41b0-84ee-11e6e4819cd0', '', '', '', '', ''), -(404, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'DB Table (z)', 'NOT NULL', '', 6, '\"getTableList();\\\" \\r\\n\\ttype_php_3=\\\"$config = JFactory::getConfig();\\\" \\r\\n\\ttype_php_4=\\\"$options = array();\\\" \\r\\n\\ttype_php_5=\\\"$db = JFactory::getDBO(); $options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_6=\\\"for ($i=0; $i < count($tables); $i++)\\\" \\r\\n\\ttype_php_7=\\\"{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\/\\/only tables with primary key\\\" \\r\\n\\ttype_php_9=\\\"\\\\t$db->setQuery(\'SHOW FIELDS FROM `\'.$tables[$i].\'` WHERE LOWER( `Key` ) = \\\\\'pri\\\\\'\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\tif ($db->loadResult())\\\" \\r\\n\\ttype_php_11=\\\"\\\\t{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t\\\\t$dbprefix = version_compare(JVERSION,\'3.0\',\'lt\') ? $config->getValue(\'config.dbprefix\') : $config->get(\'dbprefix\'); $key = $i+1;\\\" \\r\\n\\ttype_php_13=\\\"\\\\t\\\\t$options[$key] = new stdClass;\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[$key]->value = str_replace($dbprefix, \'\', $tables[$i]);\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[$key]->text = $tables[$i];\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-05-22 12:14:23', '2015-05-22 12:11:37', 1, '', 318, 'd5754f88-3ae2-4cd7-8735-5b585e197efc', '', '', '', '', ''), -(405, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (b)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:18:30', '2015-05-22 16:00:47', 1, '', 510, '9aec84ea-2196-42c6-adda-84656a3f80b1', '', '', '', '', ''), -(406, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (c)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:18:43', '2015-05-22 16:00:53', 1, '', 482, '13be4696-8edf-42c1-bf38-afedfb42d88e', '', '', '', '', ''), -(407, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (d)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:18:53', '2015-05-22 16:00:57', 1, '', 473, '80be7858-e18b-405a-b856-509094c9f396', '', '', '', '', ''), -(408, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (e)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:19:03', '2015-05-22 16:01:00', 1, '', 471, '3d78ebda-164f-439e-b05b-af3338b126bb', '', '', '', '', ''), -(409, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (f)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:19:13', '2015-05-22 16:00:35', 1, '', 470, 'bccb502f-6402-44cd-a9bb-649399ae2d5b', '', '', '', '', ''), -(410, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (g)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:19:25', '2015-05-22 16:01:09', 1, '', 469, '4ec231c8-0329-4ad0-9ef0-2af042461019', '', '', '', '', ''), -(411, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (h)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:19:36', '2015-05-22 16:01:20', 1, '', 466, '969ff034-51b0-49c5-98e1-9bb14f74df9e', '', '', '', '', ''), -(412, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (i)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:19:46', '2015-05-22 16:01:25', 1, '', 448, '57c8047b-59da-469a-92ef-b1c64fa2554e', '', '', '', '', ''), -(413, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (j)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:19:58', '2015-05-22 16:01:32', 1, '', 467, '53e123f6-33b3-44fb-aca9-cf45dc558681', '', '', '', '', ''), -(414, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (k)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:20:12', '2015-05-22 16:01:39', 1, '', 468, '49676b47-c5e8-4332-8129-eeb65ba14f3e', '', '', '', '', ''), -(415, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (l)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:20:22', '2015-05-22 16:01:46', 1, '', 472, '7f5b6c6f-6109-4caf-912c-98ed1445b131', '', '', '', '', ''), -(416, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add View Table (m)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:20:36', '2015-05-22 16:01:55', 1, '', 475, '3498064f-a575-4834-9644-833a561cd752', '', '', '', '', ''), -(417, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (main)', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-22 12:23:23', '2015-08-25 21:15:22', 1, '', 476, 'f440af91-9956-444c-995d-b66a9d263359', '', '', '', '', ''), -(418, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (o)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:23:44', '2015-05-22 16:02:08', 1, '', 477, '8087cd69-cd21-4d73-92ab-2ee189aaf0a3', '', '', '', '', ''), -(419, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (p)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:23:57', '2015-05-22 16:02:14', 1, '', 478, 'fbe839c1-f458-41a8-bbc9-38fa30413d52', '', '', '', '', ''), -(420, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (q)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:24:07', '2015-05-22 16:02:21', 1, '', 479, '74ee6124-8d7a-4c6f-a7fa-0ae402f54f5c', '', '', '', '', ''), -(421, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (r)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:24:18', '2015-05-22 16:02:29', 1, '', 480, '00b24817-7857-4b69-b01b-a16d49e13c4a', '', '', '', '', ''), -(422, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (s)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:24:32', '2015-05-22 16:02:35', 1, '', 465, '31c814f1-cceb-4d9a-89f4-2ec46e33e096', '', '', '', '', ''), -(423, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (t)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:24:42', '2015-05-22 16:02:41', 1, '', 464, 'ba3db7d1-dcce-4bbd-9d11-f1c670d2bc7a', '', '', '', '', ''), -(424, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (u)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:24:59', '2015-05-22 16:02:48', 1, '', 449, '52074b56-5f3c-487b-b297-b2d5a1c427eb', '', '', '', '', ''), -(425, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (v)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:25:09', '2015-05-22 16:02:58', 1, '', 450, '16221a14-82b1-44ca-ab41-87c828690ec3', '', '', '', '', ''), -(426, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (w)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:25:18', '2015-05-22 16:03:06', 1, '', 451, 'b58b4f07-fafb-4d4f-9b7b-97f94cd6d784', '', '', '', '', ''), -(427, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (x)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:25:29', '2015-05-22 16:03:17', 1, '', 452, '3594cabd-378e-4108-b123-248af555f940', '', '', '', '', ''), -(428, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (y)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:25:40', '2015-05-22 16:03:23', 1, '', 453, '796bb13a-17b5-4a75-9d4a-207f2dd67c55', '', '', '', '', ''), -(429, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add DB Table (z)', 'NOT NULL', '', 17, '\"\"', -2, '2015-05-22 12:25:51', '2015-05-22 16:03:31', 1, '', 454, 'e44c62ec-8782-4438-8d3f-779967081644', '', '', '', '', ''), -(430, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (join)', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-22 12:35:25', '2015-08-25 21:15:22', 1, '', 455, 'ee777081-87d6-447a-8f43-99ed565459da', '', '', '', '', ''), -(431, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (c)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:35:35', '2015-05-22 16:16:34', 1, '', 456, '76274887-ac07-4f67-b4f0-0e4806760390', '', '', '', '', ''), -(432, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (d)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:35:46', '2015-05-22 16:16:38', 1, '', 457, '2bd5d76f-124a-495d-b171-af9995aa03d4', '', '', '', '', ''), -(433, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (e)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:36:00', '2015-05-22 16:16:41', 1, '', 458, '7222a79e-cced-47fd-a879-9e4568e73abe', '', '', '', '', ''), -(434, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (f)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:36:16', '2015-05-22 16:16:45', 1, '', 459, '9ddad4f9-c2aa-46bf-ba12-51c3ef9049ad', '', '', '', '', ''), -(435, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (g)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:36:27', '2015-05-22 16:16:49', 1, '', 460, '4058c0d1-ecd7-4e3d-9756-0c1fa55dcabf', '', '', '', '', ''), -(436, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (h)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:36:39', '2015-05-22 16:16:52', 1, '', 461, 'c0f18876-4640-4368-aed6-070d83b3cfd0', '', '', '', '', ''), -(437, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (j)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:37:02', '2015-05-22 16:16:56', 1, '', 462, '7242a8a1-e763-41cd-95f8-42428d401df1', '', '', '', '', ''), -(438, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (k)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:37:12', '2015-05-22 16:17:01', 1, '', 463, 'b03e9321-b14d-4040-b340-a33d76004aa3', '', '', '', '', ''), -(439, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (l)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:37:25', '2015-05-22 16:17:05', 1, '', 481, '5f2fbf64-82cc-49d3-a1fd-1b7814d93c7c', '', '', '', '', ''), -(440, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (m)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:37:37', '2015-05-22 16:17:09', 1, '', 500, '381a778d-9c8c-4be3-b1ab-3819bee00491', '', '', '', '', ''), -(441, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (n)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:37:48', '2015-05-22 16:17:13', 1, '', 501, '1fbe45f5-c7f0-4f02-b7e6-eeb35dd2a969', '', '', '', '', ''), -(442, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (o)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:37:57', '2015-05-22 16:17:19', 1, '', 502, 'a151c74d-bf88-4273-83af-02e9fa5311a8', '', '', '', '', ''), -(443, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (p)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:38:11', '2015-05-22 16:17:23', 1, '', 503, '358f8810-3bc1-4809-bdeb-e31880159a2a', '', '', '', '', ''), -(444, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (q)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:38:29', '2015-05-22 16:17:55', 1, '', 504, '860fc142-fec2-4794-8a3b-f3fe1406986f', '', '', '', '', ''), -(445, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (r)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:38:40', '2015-05-22 16:18:00', 1, '', 505, '1186e591-d414-4ee0-9856-a69377a355a4', '', '', '', '', ''), -(446, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (s)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:38:56', '2015-05-22 16:18:04', 1, '', 506, '96254caf-8097-4f4f-8297-3d2d9a1ab47d', '', '', '', '', ''), -(447, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (t)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:39:11', '2015-05-22 16:18:09', 1, '', 507, 'b6f70511-3bf1-4d88-a403-89db0d0ebf7c', '', '', '', '', ''), -(448, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (u)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:39:23', '2015-05-22 16:18:14', 1, '', 508, 'ebf336c8-0a0b-436d-aea3-6a3fd162428e', '', '', '', '', ''), -(449, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (v)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:39:34', '2015-05-22 16:18:18', 1, '', 509, '1f0e491e-186f-4ee9-bc2c-f047cd10566e', '', '', '', '', ''), -(450, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (w)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:39:48', '2015-05-22 16:18:22', 1, '', 426, '9a2fbd5d-8c82-452e-962a-94a711280a45', '', '', '', '', ''), -(451, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (x)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:40:00', '2015-05-22 16:18:27', 1, '', 512, '089d9677-0e27-4a45-b8b7-7b858c48efe7', '', '', '', '', ''), -(452, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (y)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:40:11', '2015-05-22 16:18:31', 1, '', 513, '0186a14a-6b6a-4404-89d5-2cb849044244', '', '', '', '', ''), -(453, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (z)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:40:23', '2015-05-22 16:18:35', 1, '', 514, '147f172a-a06d-4bb6-bccf-14e2a81c8441', '', '', '', '', ''), -(454, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'On Field (i)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:45:14', '2015-05-22 16:18:39', 1, '', 499, '35543bd7-7327-476e-9050-a4e68d6ddeba', '', '', '', '', ''), -(455, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Join Field (join)', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-22 12:45:15', '2020-05-20 11:59:45', 2, '', 498, '753f632a-755b-4a44-ae7a-68b42a6d91cd', '', '', '', '', ''), -(456, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (c)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:45:17', '2015-05-22 16:18:49', 1, '', 483, '8305d6a3-7930-4f83-82c1-27d33a66392b', '', '', '', '', ''), -(457, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (d)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:45:19', '2015-05-22 16:18:53', 1, '', 484, 'f67f06a4-6061-4505-be08-b9d752b0856c', '', '', '', '', ''), -(458, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (e)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:45:22', '2015-05-22 16:18:58', 1, '', 485, '40f62816-e89b-404a-828c-38cba3e7051b', '', '', '', '', ''), -(459, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (f)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:50:58', '2015-05-22 16:19:03', 1, '', 486, 'fecbeb4a-d19b-46d2-a735-0ccc0400e291', '', '', '', '', ''), -(460, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (g)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:51:07', '2015-05-22 16:19:07', 1, '', 487, '168e8eac-acba-4df5-ad95-e812da21cbf3', '', '', '', '', ''), -(461, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (h)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:51:14', '2015-05-22 16:19:12', 1, '', 423, 'cf04bf21-1be6-4ca1-8b2d-71fbafff9687', '', '', '', '', ''), -(462, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (i)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:51:24', '2015-05-22 16:19:20', 1, '', 488, '226761d7-4e8e-43d8-bfb1-9bd404e9204f', '', '', '', '', ''), -(463, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (j)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:51:38', '2015-05-22 16:19:24', 1, '', 489, 'deae1fed-d4ad-4c98-8872-8776f1e23d0e', '', '', '', '', ''), -(464, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (k)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:51:47', '2015-05-22 16:19:28', 1, '', 490, '7125e9c4-4420-41f1-855c-a244036b4696', '', '', '', '', ''), -(465, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (l)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:51:55', '2015-05-22 16:19:31', 1, '', 491, '0efca137-de6d-4326-b0b0-0b02606e048e', '', '', '', '', ''), -(466, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (m)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:52:04', '2015-05-22 16:19:36', 1, '', 492, 'c6b2772a-72ac-404c-8fa8-4a005f1273b6', '', '', '', '', ''), -(467, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (n)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:52:14', '2015-05-22 16:19:43', 1, '', 493, '762b47cc-1dc6-44cf-9f82-0dee5661c9df', '', '', '', '', ''), -(468, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (o)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:52:23', '2015-05-22 16:19:47', 1, '', 494, 'c6160caa-1969-4ce9-8015-8095e76d06ea', '', '', '', '', ''), -(469, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (p)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:52:33', '2015-05-22 16:19:51', 1, '', 495, 'a34f6bd3-8682-4eb3-8640-06e210d45a6c', '', '', '', '', ''), -(470, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (q)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:52:41', '2015-05-22 16:19:55', 1, '', 496, 'ec2d6163-675b-4e1d-907d-d0aeb0663a10', '', '', '', '', ''), -(471, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (r)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:52:51', '2015-05-22 16:19:59', 1, '', 497, '8c1b4a6f-5731-4d91-a423-f42355034442', '', '', '', '', ''), -(472, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (s)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:53:01', '2015-05-22 16:20:04', 1, '', 515, '01becaf5-25c8-4ace-9353-07b367e5a830', '', '', '', '', ''), -(473, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (t)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:53:10', '2015-05-22 16:20:08', 1, '', 447, '9d540325-05bf-4ce4-9884-2f7da6bad26c', '', '', '', '', ''), -(474, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (u)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:53:22', '2015-05-22 16:20:13', 1, '', 416, 'eddbee05-33a6-41ee-a71d-a4fbd2aa7dca', '', '', '', '', ''), -(475, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (v)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:53:31', '2015-05-22 16:20:18', 1, '', 418, 'd1fd7796-e44f-4e04-b29a-ec6c807a9f43', '', '', '', '', ''), -(476, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (w)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:53:39', '2015-05-22 16:20:23', 1, '', 419, '85498f9a-a805-434e-8f12-e6ef45973328', '', '', '', '', ''), -(477, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (x)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:53:47', '2015-05-22 16:20:28', 1, '', 420, '2f426aa0-75c0-4c40-a075-77516da18df3', '', '', '', '', ''), -(478, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (y)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:53:56', '2015-05-22 16:20:32', 1, '', 422, '246e0ab2-144f-4cd6-8471-c1ab0cdc250f', '', '', '', '', ''), -(479, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Equal Field (z)', 'NOT NULL', '', 24, '\"\"', -2, '2015-05-22 12:54:07', '2015-05-22 16:20:38', 1, '', 424, '90d27dac-8d1b-4719-966b-a0183c9efb33', '', '', '', '', ''), -(480, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (join)', 'NOT NULL', '', 25, '\"\"', 1, '2015-05-22 12:58:37', '2017-09-25 20:41:03', 2, '', 354, 'e80df791-9e30-47ac-a45e-8dfc493fde42', '', '', '', '', ''), -(481, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (c)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 12:58:51', '2015-05-22 13:03:04', 1, '', 353, '7a040e89-6fd7-4bd0-8d11-d0071d83b155', '', '', '', '', ''), -(482, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (d)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 12:59:05', '2015-05-22 13:03:14', 1, '', 352, '87be8d07-e333-4c30-8f2c-6efac5fccf32', '', '', '', '', ''), -(483, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (e)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 12:59:19', '2015-05-22 13:03:28', 1, '', 351, '439b1413-b54e-4da0-af46-3dcfa43f35bb', '', '', '', '', ''), -(484, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (f)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 12:59:28', '2015-05-22 13:03:35', 1, '', 350, '9e4f9831-775d-46c8-8988-4154f5551aad', '', '', '', '', ''), -(485, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (g)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 12:59:38', '2015-05-22 13:03:47', 1, '', 357, '9f909da0-64d6-4f6d-9a89-b2c5d6376ab7', '', '', '', '', ''), -(486, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (h)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 12:59:47', '2015-05-22 13:03:58', 1, '', 348, 'b8be0723-08d0-4be5-b4a6-55f7d810f65e', '', '', '', '', ''), -(487, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (i)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 12:59:56', '2015-05-22 13:05:52', 1, '', 347, '82e039f3-988a-4e17-a3f3-e74192abc222', '', '', '', '', ''), -(488, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (j)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:00:08', '2015-05-22 13:04:38', 1, '', 346, '01a441f6-b8f2-430d-84c0-c57674038e66', '', '', '', '', ''), -(489, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (k)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:00:17', '2015-05-22 13:04:32', 1, '', 356, 'afb6ea40-50fd-40e4-ba4c-411e239c3d47', '', '', '', '', ''), -(490, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (l)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:00:26', '2015-05-22 13:04:50', 1, '', 332, '57be6c4e-37a0-4bd3-a1d7-ff8dfa36785f', '', '', '', '', ''), -(491, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (m)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:00:36', '2015-05-22 13:06:01', 1, '', 345, '595445eb-9965-431a-96fb-df5b2f6f58a4', '', '', '', '', ''), -(492, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'DB Select Fields (main)', 'NOT NULL', '', 25, '\"\"', 1, '2015-05-22 13:00:45', '2015-08-25 21:15:22', 1, '', 349, '661c16f9-71be-41e2-8428-efd5509e6291', '', '', '', '', ''), -(493, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (o)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:01:15', '2015-05-22 13:06:13', 1, '', 337, '9ce22415-8dcc-4a7e-9e65-49a055a00e02', '', '', '', '', ''), -(494, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (p)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:06:28', '2015-05-22 13:06:13', 1, '', 355, '541bafda-94b3-4d1e-861b-f546327c44a8', '', '', '', '', ''), -(495, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (q)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:06:38', '2015-05-22 13:06:13', 1, '', 344, '8b8b1f5c-01cf-420b-b0de-30db8e612cde', '', '', '', '', ''), -(496, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (r)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:06:51', '2015-05-22 13:06:13', 1, '', 343, '1276ac67-a9f8-4e91-aa43-84c933b54e99', '', '', '', '', ''), -(497, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (s)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:07:03', '2015-05-22 13:06:13', 1, '', 342, 'cb5051c0-e3a5-42a0-b9bc-a9e65f95d4bd', '', '', '', '', ''), -(498, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (t)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:07:14', '2015-05-22 13:06:13', 1, '', 333, 'a8dbedb3-47ae-40f1-9d16-3d8831725574', '', '', '', '', ''), -(499, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (u)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:07:26', '2015-05-22 13:06:13', 1, '', 334, '1f413830-7870-4e96-bcc9-f35dbb5a9c3d', '', '', '', '', ''), -(500, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (v)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:07:38', '2015-05-22 13:06:13', 1, '', 335, '5b324b01-5ee4-4ee2-b058-6b0ee4662a11', '', '', '', '', ''), -(501, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (w)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:07:50', '2015-05-22 13:06:13', 1, '', 336, 'a2d7ce0a-8d5b-4ca2-9e0f-832f8e5aad7f', '', '', '', '', ''), -(502, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (x)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:08:00', '2015-05-22 13:06:13', 1, '', 338, '717cce83-c321-4f05-b54e-501c566711e7', '', '', '', '', ''), -(503, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (y)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:08:11', '2015-05-22 13:06:13', 1, '', 339, 'f4f14188-efcc-41c8-a297-2e323b5e30bc', '', '', '', '', ''), -(504, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Select Fields (z)', 'NOT NULL', '', 25, '\"\"', -2, '2015-05-22 13:08:23', '2015-05-22 13:06:13', 1, '', 340, '0d0f66eb-c551-488b-a54a-13bd895a0c6b', '', '', '', '', ''), -(505, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (join)', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-22 13:25:50', '2015-08-25 21:15:22', 1, '', 437, '69f3381d-21b2-460a-9bfc-28db39b4c9dd', '', '', '', '', ''), -(506, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (c)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:25:59', '2015-05-22 16:07:11', 1, '', 438, '349626b2-9c18-48d7-a881-8c2a97488b7c', '', '', '', '', ''), -(507, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (d)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:26:08', '2015-05-22 16:07:17', 1, '', 439, 'e8db334d-c382-41c7-9734-aa92c9d6e9c5', '', '', '', '', ''), -(508, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (e)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:26:17', '2015-05-22 16:07:21', 1, '', 421, '1bb17422-7656-44b2-992c-d235b6b9d339', '', '', '', '', ''), -(509, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (f)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:26:26', '2015-05-22 16:07:25', 1, '', 440, '0e2143b9-da10-440c-89f8-f8159c1b8f0a', '', '', '', '', ''), -(510, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (g)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:26:34', '2015-05-22 16:07:30', 1, '', 441, '93fcf7d9-7dcb-4344-bd29-53d5676aa169', '', '', '', '', ''), -(511, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (h)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:26:43', '2015-05-22 16:07:35', 1, '', 442, '942b152c-8480-482b-b9b5-b37ae5c01062', '', '', '', '', ''), -(512, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (i)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:26:53', '2015-05-22 16:07:38', 1, '', 443, 'e2b18167-058d-4f36-9576-28ca15a6af17', '', '', '', '', ''), -(513, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (j)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:28:58', '2015-05-22 16:07:42', 1, '', 444, '0b0eb245-4c36-440b-82ea-c28501384871', '', '', '', '', ''), -(514, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (k)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:29:13', '2015-05-22 16:07:46', 1, '', 445, '21ba090b-448a-40c5-b4a7-5fcd12b1de78', '', '', '', '', ''), -(515, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (l)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:29:22', '2015-05-22 16:07:50', 1, '', 436, 'ed1208fb-a1ff-409d-9656-c7518892c884', '', '', '', '', ''), -(516, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (m)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:29:35', '2015-05-22 16:07:54', 1, '', 435, '048d2d76-505c-4cc9-b2d7-219d4b3f0bff', '', '', '', '', ''), -(517, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (join)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:29:57', '2015-05-23 12:03:02', 1, '', 94, '9f78bdc9-0297-409a-b877-78749b864e92', '', '', '', '', ''), -(518, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (o)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:30:22', '2015-05-23 12:02:28', 1, '', 95, 'f3313652-2750-4911-81d9-3356b232822d', '', '', '', '', ''), -(519, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (p)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:30:33', '2015-05-22 16:08:07', 1, '', 427, '7e0b4649-0d0d-4933-aa6f-5c9f9a29ad79', '', '', '', '', ''), -(520, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (q)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:30:42', '2015-05-22 16:08:11', 1, '', 428, '132d5599-ae8e-4901-bfdd-85f6e4380234', '', '', '', '', ''), -(521, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (r)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:30:55', '2015-05-22 16:08:15', 1, '', 429, 'b5352477-9cd5-43b4-9913-cd5193e26172', '', '', '', '', ''), -(522, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (s)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:31:05', '2015-05-22 16:08:19', 1, '', 430, 'a1219c9a-3efc-487e-aa3b-8351d1983c7e', '', '', '', '', ''), -(523, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (t)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:31:13', '2015-05-22 16:08:23', 1, '', 425, '89c310ce-a577-44c6-bd6a-2da097f2f495', '', '', '', '', ''), -(524, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (u)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:31:26', '2015-05-22 16:08:27', 1, '', 431, '35c853bd-8d75-4d69-ac0c-31b7717bb8f2', '', '', '', '', ''), -(525, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (v)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:31:35', '2015-05-22 16:08:31', 1, '', 432, 'be6e8d01-6205-4c56-b193-96082e4ea59b', '', '', '', '', ''), -(526, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (w)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:31:43', '2015-05-22 16:08:36', 1, '', 433, '6e3f2029-0183-4d7c-bfa6-3a3a9b1bc60e', '', '', '', '', ''), -(527, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (x)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:31:52', '2015-05-22 16:08:40', 1, '', 434, '164e8a30-d61f-4c62-80ec-901e6f9c14f7', '', '', '', '', ''), -(528, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (y)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:32:00', '2015-05-22 16:08:45', 1, '', 417, 'ee8ef284-028c-42de-b74a-ce74dc5fb602', '', '', '', '', ''), -(529, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (z)', 'NOT NULL', '', 11, '\"\"', -2, '2015-05-22 13:32:09', '2015-05-22 16:08:50', 1, '', 446, '5cc1efdd-6674-48f3-bcd1-6af54d8566df', '', '', '', '', ''), -(530, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (get Calculation)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-22 14:56:07', '2019-07-08 14:14:17', 4, '', 387, '9b6768ae-8d6a-461e-9b41-61d49431a401', '', '', '', '', ''), -(531, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add Calculation', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-22 15:05:18', '2024-04-22 12:23:02', 2, '', 516, '6e7bb46d-fda5-46b8-b08e-31a2e6884e24', '', '', '', '', ''), -(532, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'get Custom Name', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-22 20:00:51', '2015-08-25 21:15:22', 1, '', 517, '6c486f71-abfd-49c7-91e2-165f594fa658', '', '', '', '', ''), -(533, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Storing Type', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-23 09:32:42', '2015-09-10 12:04:00', 3, '', 415, 'ec5cdd76-9272-4659-a38d-2bcead2253b9', '', '', '', '', ''), -(534, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Filter Type', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-23 11:22:17', '2015-09-13 03:09:50', 5, '', 518, 'e95e58dd-5b30-4b49-ac87-7960f6a0a740', '', '', '', '', ''), -(535, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'State Key', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-23 11:25:28', '2015-08-25 21:15:22', 3, '', 524, 'd705fb25-b0e9-4be3-9278-d9d88b8a3053', '', '', '', '', ''), -(536, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Table Key', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-23 11:26:47', '2015-08-25 21:15:22', 1, '', 520, '95fad76d-0b02-4fcf-b0cd-1feba80942e1', '', '', '', '', ''), -(537, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'AS Keys (b to zz)', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-23 12:44:47', '2015-08-25 21:15:22', 2, '', 526, '160e0e73-b8c4-4f97-9685-83c50cbc60e7', '', '', '', '', ''), -(538, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Jount DB Table', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-23 12:50:59', '2020-06-05 00:59:40', 4, '', 93, '6c75d3ff-93aa-493b-b25c-733e78408fa2', '', '', '', '', ''), -(539, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Filter Query', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-23 12:54:41', '2020-07-26 15:42:12', 5, '', 74, 'bf2293c7-5c8b-4b77-a880-c63ca4777e3e', '', '', '', '', ''), -(540, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Main Data Source', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-23 14:26:09', '2015-08-25 21:15:22', 2, '', 527, '1709c1a3-b26a-4e78-82f9-ff05a08738c9', '', '', '', '', ''), -(541, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Comparison Operators (sql)', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-24 00:11:11', '2015-08-25 21:15:22', 2, '', 528, '4a0047f4-c51c-40f7-875b-501d507b2880', '', '', '', '', ''), -(542, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Calculation (item)', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-25 13:03:02', '2015-08-25 21:15:22', 1, '', 529, '255d7bc4-6516-4ec1-af26-3d135dcb231d', '', '', '', '', ''), -(543, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Calculation (items)', 'NOT NULL', '', 14, '\"\"', 1, '2015-05-25 13:05:03', '2015-08-25 21:15:22', 2, '', 530, 'a8d7033a-d0a4-416e-b0f3-c3e0436076eb', '', '', '', '', ''), -(544, 1, '', 1, '', 'I2pmb3JtX2R5bmFtaWNfZ2V0X2Noem4gew0Kd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCn0NCi5qZm9ybV9keW5hbWljX2dldF9pbnB1dF93aWR0aCB7DQp3aWR0aDogOTAlICFpbXBvcnRhbnQ7DQp9', '', '', '', 11, '', 'INT', 2, 'alF1ZXJ5KCcjamZvcm1fZHluYW1pY19nZXQnKS5jbG9zZXN0KCcuaW5wdXQtYXBwZW5kJykuYWRkQ2xhc3MoJ2pmb3JtX2R5bmFtaWNfZ2V0X2lucHV0X3dpZHRoJyk7', '', 'Dynamic Get (dynamic - not required)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\',\'a.gettype\'),array(\'###ID###\',\'###CODE_TEXT###\',\'type\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\\n\\\\t\\\\t\\\\t$model = ###Component###Helper::getModel(\'dynamic_gets\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t$type = $model->selectionTranslation($item->type,\'gettype\');\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . JText::_($type) . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\"\\r\\n\\/>\"', 1, '2015-05-26 12:29:44', '2017-11-22 21:42:37', 12, '', 410, '5087f379-710b-4e76-9b9d-86b842933991', '', '', '', '', ''), -(545, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Value Key', 'NOT NULL', '', 24, '\"fieldvalue\\\"\\n\\/>\"', 1, '2015-05-27 12:59:02', '2019-06-29 21:07:59', 3, '', 523, 'b05cb6a3-0404-49b4-a9e1-dc35df986c27', '', '', '', '', ''), -(546, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Where Query', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-27 12:59:39', '2017-09-25 11:15:00', 3, '', 532, '81466df0-3571-45cf-b520-cee2a9f5e03b', '', '', '', '', ''), -(547, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Return Row Type', 'NOT NULL', '', 11, '\"\"', 1, '2015-05-27 15:41:41', '2015-08-25 21:15:22', 2, '', 534, '00f0eb0d-83e8-4dc7-bf56-e069382df691', '', '', '', '', ''), -(548, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Variable Name', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-27 16:02:09', '2015-08-25 21:15:22', 1, '', 519, '561075ec-b48d-45de-8885-59fc2a666222', '', '', '', '', ''), -(549, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Table Key Name', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-27 16:30:50', '2015-08-25 21:15:22', 4, '', 522, 'f4114d7b-927b-44e5-9fa4-b13a0602e5a1', '', '', '', '', ''), -(550, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Set Type', 'NOT NULL', '', 17, '\"\"', 1, '2015-05-27 16:33:02', '2019-04-26 00:48:56', 4, '', 521, 'a922f078-c085-4005-85ff-001e9f4369bf', '', '', '', '', ''), -(551, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Globals', 'NOT NULL', '', 35, '\"\"', 1, '2015-05-27 16:34:43', '2017-09-25 11:16:58', 4, '', 533, 'fa2f73d6-8427-47de-abd8-4290da426b49', '', '', '', '', ''), -(552, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (custom get)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-27 16:49:50', '2019-07-08 14:14:24', 4, '', 535, '8aba2f06-8fd1-4256-add5-1e233e581315', '', '', '', '', ''), -(553, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Template', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-28 19:48:10', '2019-07-08 14:14:31', 5, '', 366, '7b57c7ca-f4e8-4358-948a-987b1f36b3fb', '', '', '', '', ''), -(554, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Name in Code (alias)', 'NOT NULL', '', 24, '\"\"', 1, '2015-05-28 21:14:01', '2017-02-03 23:33:38', 3, '', 536, '477832a1-7a25-4774-ad1a-4ff69ed4b374', '', '', '', '', ''), -(555, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'Default Tmpl', 'NOT NULL', 2, 8, '\"\"', 1, '2015-05-29 23:03:51', '2020-08-18 05:34:43', 5, '', 365, '6e214a72-6c96-40c0-abf3-5f09116d3018', '', '', '', '', ''), -(556, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Site Views', 'NOT NULL', '', 35, '\"\"', 1, '2015-06-01 11:40:11', '2020-05-28 20:12:17', 9, '', 537, '8e225dcd-4e2b-464b-a9f3-b7d39d67de84', '', '', '', '', ''), -(557, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Site View (dynamic)', 'NOT NULL', '', 6, '\"\"', 1, '2015-06-01 11:44:48', '2024-01-26 09:39:26', 8, '', 538, 'c93bcce5-7c16-4cd6-bede-61d8c1da9e9c', '', '', '', '', ''), -(558, 1, '', 1, '', 'I2pmb3JtX21haW5fZ2V0X2Noem4gew0Kd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCn0NCi5qZm9ybV9tYWluX2dldF9pbnB1dF93aWR0aCB7DQp3aWR0aDogOTAlICFpbXBvcnRhbnQ7DQp9', '', '', '', 11, '', 'INT', 2, 'alF1ZXJ5KCcjamZvcm1fbWFpbl9nZXQnKS5jbG9zZXN0KCcuaW5wdXQtYXBwZW5kJykuYWRkQ2xhc3MoJ2pmb3JtX21haW5fZ2V0X2lucHV0X3dpZHRoJyk7', '', 'Main Get (dynamic)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\',\'a.gettype\'),array(\'###ID###\',\'###CODE_TEXT###\',\'type\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n\\\\t\\\\t$query->where(\'( \'.$db->quoteName(\'a.gettype\') . \' = 1 OR \' . $db->quoteName(\'a.gettype\') . \' = 2 )\');\\\\n\\\\t\\\\t$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$model = ###Component###Helper::getModel(\'dynamic_gets\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t$type = $model->selectionTranslation($item->type,\'gettype\');\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . JText::_($type) . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\"\\r\\n\\/>\"', 1, '2015-06-01 22:00:07', '2017-11-22 21:38:11', 10, '', 402, 'd20027fe-4e74-4261-9bf2-7e573a3e883b', '', '', '', '', ''), -(559, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Custom Get (dynamic)', 'NOT NULL', '', 6, '\"\"', 1, '2015-06-01 22:02:10', '2024-03-26 13:25:02', 11, '', 403, 'bed7693b-ccd1-4803-b065-5e20fac13881', '', '', '', '', ''), -(560, 1, '', 1, '', 'I2pmb3JtX2R5bmFtaWNfZ2V0X2Noem4gew0Kd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCn0NCi5qZm9ybV9keW5hbWljX2dldF9pbnB1dF93aWR0aCB7DQp3aWR0aDogOTAlICFpbXBvcnRhbnQ7DQp9', '', '', '', 11, '', 'INT', 2, 'alF1ZXJ5KCcjamZvcm1fZHluYW1pY19nZXQnKS5jbG9zZXN0KCcuaW5wdXQtYXBwZW5kJykuYWRkQ2xhc3MoJ2pmb3JtX2R5bmFtaWNfZ2V0X2lucHV0X3dpZHRoJyk7', '', 'Dynamic Get (snippet)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\',\'a.gettype\'),array(\'###ID###\',\'###CODE_TEXT###\',\'type\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$model = ###Component###Helper::getModel(\'dynamic_gets\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t$type = $model->selectionTranslation($item->type,\'gettype\');\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . JText::_($type) . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_17=\\\"\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\"\\r\\n\\/>\"', 1, '2015-06-01 22:51:20', '2017-11-22 21:42:34', 6, '', 404, 'c37aa662-719c-4ed5-bbf2-e36672a3ce33', '', '', '', '', ''), -(561, '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Note - Add PHP Language String', 'NOT NULL', '', 14, '\"<?php echo Text::_('Text'); ?><\\/code>
\\r\\n<?php echo Text::sprintf('Hello %s', $this->user->name); ?><\\/code>
\\r\\nJust get UPPERCASE language string:<\\/b>
\\r\\n<?php echo JustTEXT::_('Text'); ?><\\/code>\\\"\\n\\theading=\\\"h4\\\"\\n\\/>\"', 1, '2015-06-03 15:23:13', '2024-04-08 07:54:26', 16, '', 539, 'edaac8c1-d2df-4e51-9d48-e1d7259984a3', '', '', '', '', ''), -(562, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (helper_site)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-06-07 22:39:33', '2024-04-19 08:09:34', 5, '', 540, 'f4134f92-7dc5-4729-9a16-bfaa51de27f9', '', '', '', '', ''), -(563, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (helper_site Class)', 'NOT NULL', '', 17, '\"\"', 1, '2015-06-07 22:39:54', '2015-08-25 21:15:22', 2, '', 548, 'ff624860-89db-4465-97f1-962bf09dcc9f', '', '', '', '', ''), -(564, '', '', '', '', '', '', '', '', 11, '', 'TINYINT', 2, '', '', 'Site Menu', 'NOT NULL', '', 3, '\"\"', 1, '2015-06-09 19:58:37', '2019-06-11 12:15:59', 3, '', 549, '5ad1beb3-ad4c-4704-a1fd-be7045e3478a', '', '', '', '', ''), -(565, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (custom view script)', 'NOT NULL', '', 17, '\"\"', 1, '2015-06-10 14:53:09', '2015-08-25 21:15:22', 2, '', 547, '8b09aaf9-546c-4f03-8b1f-3170ba4b5491', '', '', '', '', ''), -(566, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (custom HtmlView display)', 'NOT NULL', '', 17, '\"\"', 1, '2015-06-10 14:54:17', '2015-08-25 21:15:22', 4, '', 541, '32564da8-5599-4577-bd93-fd425179612f', '', '', '', '', ''), -(567, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP site (JViewLegacy)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-06-10 14:58:22', '2019-07-08 14:14:49', 4, '', 373, 'ffecfa82-c326-4703-9cc3-69d6f313bd32', '', '', '', '', ''), -(568, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP site (JViewLegacy display)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-06-10 14:59:59', '2019-07-08 14:14:54', 3, '', 374, '96963615-e3bb-4d37-83df-4ad3fca74536', '', '', '', '', ''), -(569, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (custom HtmlView methods)', 'NOT NULL', '', 17, '\"\"', 1, '2015-06-10 15:02:24', '2015-08-25 21:15:22', 1, '', 542, '6ce6e81e-5cdf-4ea2-83b5-acde779f4297', '', '', '', '', ''), -(570, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Dynamic Form Defaults', 'NOT NULL', 2, 25, '\"\"', 1, '2015-06-10 15:05:19', '2015-09-10 20:52:04', 7, '', 375, 'ca21f915-1d35-4f68-9879-80e391bbd3e7', '', '', '', '', ''), -(571, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'AS Keys (a to zz)', 'NOT NULL', '', 11, '\"\"', 1, '2015-06-17 22:44:24', '2015-08-25 21:15:22', 1, '', 525, '8f757b39-5e0e-4831-8a71-1457db9e2e95', '', '', '', '', ''), -(572, '', '', '', '', '', '', '', '', 10, '', 'CHAR', '', '', '', 'Order Direction', 'NOT NULL', '', 11, '\"\"', 1, '2015-06-17 22:50:44', '2020-05-20 12:46:58', 3, '', 550, '01abb509-e141-4032-bdbd-07984e9c9185', '', '', '', '', ''), -(573, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Ordering Query', 'NOT NULL', '', 35, '\"\"', 1, '2015-06-17 22:52:36', '2017-09-25 11:10:54', 3, '', 531, '007dc9f8-9b06-4211-83c9-4134b23d6561', '', '', '', '', ''), -(574, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (add_php_document (use))', 'NOT NULL', '', 17, '\"\"', 1, '2015-06-18 23:29:38', '2016-04-22 21:02:33', 3, '', 546, '46fa9c1e-5aa3-41ff-8f02-e9a80252ad9f', '', '', '', '', ''), -(575, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add CSS (custom document script)', 'NOT NULL', '', 17, '\"\"', 1, '2015-06-18 23:30:49', '2015-08-25 21:15:22', 1, '', 545, '4a8003fa-7458-405e-90d3-7728b1af9e86', '', '', '', '', ''), -(576, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add JS (custom document script)', 'NOT NULL', '', 17, '\"\"', 1, '2015-06-18 23:31:10', '2015-08-25 21:15:22', 1, '', 544, 'f76ffc06-f4c9-417e-8584-bc2f65184d18', '', '', '', '', ''), -(577, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (php_document)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-06-18 23:33:02', '2019-07-08 14:15:00', 4, '', 371, 'e4d3c22b-1297-450b-8108-c389f834e354', '', '', '', '', ''), -(578, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'CSS site (Document)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-06-18 23:38:14', '2019-07-08 14:15:05', 4, '', 372, 'fd03122f-8c74-468a-8f8c-704e927c3b65', '', '', '', '', ''), -(579, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'JS site (Document)', 'NOT NULL', 2, 8, '\"add custom JS script to the document method. You can add in PHP like this: ".$var."<\\/small>\\\"\\n\\tdescription=\\\"JS script to the document method.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"javascript\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-06-18 23:38:47', '2019-07-08 14:15:12', 4, '', 376, 'ccb3cb86-8403-4494-a284-ce1fb782f0af', '', '', '', '', ''), -(580, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (add_php_document)', 'NOT NULL', '', 17, '\"\"', 1, '2015-06-18 23:48:18', '2016-04-22 21:02:04', 2, '', 543, '15c8ad75-bf8e-47d7-9677-0db134def495', '', '', '', '', ''), -(581, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'View Link', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' >= 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-07-07 16:54:38', '2017-10-26 01:55:42', 4, '', 406, '2bbfc15f-0aad-4f00-a433-bc44d9e58710', '', '', '', '', ''), -(582, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Worldzone', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-09 13:59:48', '2015-08-25 21:15:22', 1, '', 562, '2a224445-e487-4993-81b0-2c336340e10b', '', '', '', '', ''), -(583, '', '', '', '', '', '', '', '', 7, '', 'CHAR', 2, '', '', 'Code Three (country)', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-09 14:03:26', '2015-08-25 21:15:22', 5, '', 561, '95f46f99-0909-4a47-879b-ede06ef35fb8', '', '', '', '', ''), -(584, '', '', '', '', '', '', '', '', 7, '', 'CHAR', 2, '', '', 'Code Two (country)', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-09 14:05:40', '2015-08-25 21:15:22', 4, '', 560, '2039d1c3-162c-401c-96fe-f127683ee3fe', '', '', '', '', ''), -(585, '', '', '', '', '', '', '', '', 7, '', 'CHAR', 2, '', '', 'Currency (dynamic)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-07-09 14:15:44', '2015-08-25 21:15:22', 4, '', 559, '4b89a17d-d15e-4817-9318-9c23cc959315', '', '', '', '', ''), -(586, '', '', '', '', '', '', '', '', 7, '', 'CHAR', 1, '', '', 'Code Three (currency)', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-09 14:33:44', '2015-08-25 21:15:22', 1, '', 558, '59f0d051-768e-41de-87a0-f47551f7d0d1', '', '', '', '', ''), -(587, '', '', '', '', '', '', '', '', 10, '', 'INT', 2, '', '', 'Numeric Code (currency)', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-09 14:40:52', '2015-08-25 21:15:22', 3, '', 557, '40da896f-5054-4bb2-aa58-1cdfb391f544', '', '', '', '', ''), -(588, '', '', '', '', '', '', '', '', 11, '', 'CHAR', '', '', '', 'Symbol (currency)', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-09 14:44:24', '2015-08-25 21:15:22', 1, '', 556, 'c9a4c765-a0f9-42da-8fa9-df41ab70c448', '', '', '', '', ''), -(589, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Decimalplace (currency)', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-09 14:48:07', '2015-08-25 21:15:22', 2, '', 551, '09fec39d-831c-4070-9c3e-3e28c6479941', '', '', '', '', ''), -(590, '', '', '', '', '', '', '', '', 7, '', 'CHAR', '', '', '', 'Decimalsymbol (currency)', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-09 14:50:01', '2015-08-25 21:15:22', 1, '', 552, '38272246-7bae-413a-99fb-80ac67129596', '', '', '', '', ''), -(591, '', '', '', '', '', '', '', '', 7, '', 'CHAR', '', '', '', 'Thousands (currency)', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-09 14:53:46', '2015-08-25 21:15:22', 1, '', 553, '345acfce-8f6d-4e31-b36b-2edd500edd25', '', '', '', '', ''), -(592, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Positivestyle (currency)', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-09 14:59:38', '2015-08-25 21:15:22', 2, '', 554, 'bb56bfa9-ed4d-4285-9706-afb487f54e46', '', '', '', '', ''), -(593, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Negativestyle (currency)', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-09 15:01:22', '2015-08-25 21:15:22', 1, '', 555, '9fc08beb-c861-4af4-997d-58a2c4874271', '', '', '', '', ''), -(594, '', '', '', '', '', '', '', '', 1, '', 'INT', 2, '', '', 'Causes/Risk Categories', 'NOT NULL', '', 2, '\"\"', 1, '2015-07-09 18:16:52', '2015-08-25 21:15:22', 4, '', 563, '840cd7a1-9664-4599-867b-0a790b76e750', '', '', '', '', ''), -(595, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Import Name', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-09 18:22:10', '2015-08-25 21:15:22', 1, '', 564, '677c13a8-4630-4466-9a53-0e4e63be6262', '', '', '', '', ''), -(597, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Articles (joomla)', 'NOT NULL', '', 6, '\"\"', 1, '2015-07-13 22:43:55', '2024-03-26 13:24:30', 6, '', 565, 'f312a8f7-34b9-4731-af00-3ff2092c65b9', '', '', '', '', ''), -(598, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Help Content', 'NOT NULL', '', 8, '\"\"', 1, '2015-07-13 23:06:24', '2019-07-08 14:15:33', 2, '', 122, '8b9665d1-f1d9-4d7e-bc2c-72479bf4686f', '', '', '', '', ''), -(599, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Groups (multi)', 'NOT NULL', 1, 29, '\"\"', 1, '2015-07-13 23:10:19', '2015-09-25 17:03:00', 5, '', 50, '59a0cad6-26cc-43b6-8af8-2242eb595d76', '', '', '', '', ''), -(600, '', '', '', '', '', '', '', '', 255, '', 'CHAR', '', '', '', 'List of Admin Views', 'NOT NULL', '', 31, '\"\"', 1, '2015-07-13 23:21:47', '2015-08-25 21:15:22', 3, '', 566, '9c49e1b0-2083-432e-a837-c8c7ef790cbf', '', '', '', '', ''), -(601, '', '', '', '', '', '', '', '', 255, '', 'CHAR', '', '', '', 'List of Site Views', 'NOT NULL', '', 31, '\"\"', 1, '2015-07-13 23:22:25', '2015-08-25 21:15:22', 3, '', 566, 'f3de6de1-8f27-4cec-ab59-27d145c4cc91', '', '', '', '', ''), -(602, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Help Type', 'NOT NULL', '', 11, '\"\"', 1, '2015-07-13 23:24:51', '2015-08-25 21:15:22', 3, '', 244, '8487b70c-4a32-46ba-aacb-ea07a1e3d278', '', '', '', '', ''), -(603, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Location (site,admin)', 'NOT NULL', '', 17, '\"\"', 1, '2015-07-13 23:34:24', '2015-08-25 21:15:22', 3, '', 244, '0d06a4f6-acd5-4acc-8a3f-28813de178ac', '', '', '', '', ''), -(604, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Target Options', 'NOT NULL', '', 17, '\"\"', 1, '2015-07-14 20:16:12', '2015-08-25 21:15:22', 2, '', 70, '5810dc57-35ac-436e-88ff-117e1f501e67', '', '', '', '', ''), -(605, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Country (dynamic - giz)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n\\\\t\\\\tif (!$user->authorise(\'core.options\', \'com_###component###\'))\\\\n\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t$countries = ###Component###Helper::hisCountries($user->id);\\\" \\r\\n\\ttype_php_6=\\\"\\\\tif (###Component###Helper::checkArray($countries))\\\\n\\\\t\\\\t\\\\t{\\\" \\r\\n\\ttype_php_7=\\\"\\\\t\\\\t$countries = implode(\',\',$countries);\\\\n\\\\t\\\\t\\\\t\\\\t\\/\\/ only load this users companies\\\\n\\\\t\\\\t\\\\t\\\\t$query->where(\'a.id IN (\' . $countries . \')\');\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\\\t\\/\\/ dont allow user to see any countries\\\" \\r\\n\\ttype_php_9=\\\"\\\\t\\\\t$query->where(\'a.id = -4\');\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\" \\r\\n\\ttype_php_10=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_11=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_12=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_13=\\\"$options = array();\\\" \\r\\n\\ttype_php_14=\\\"if ($items)\\\" \\r\\n\\ttype_php_15=\\\"{\\\\n\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select a country\');\\\"\\r\\n\\ttype_php_16=\\\"\\\\tforeach($items as $item)\\\\n\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_17=\\\"\\\\t}\\\\n\\\\t\\\\t}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-07-15 23:44:46', '2016-01-13 15:32:22', 9, '', 567, '93a3a939-fccb-433f-8e87-9a44bae1983c', '', '', '', '', ''), -(606, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Public Name', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-15 23:52:33', '2015-08-25 21:15:22', 2, '', 4, 'e6b9fbda-c7db-4346-adc1-5724b3c0e3b3', '', '', '', '', ''), -(607, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Public Email', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-15 23:56:49', '2015-08-25 21:15:22', 1, '', 204, 'c05f5279-99ca-47b3-9400-c7f7ef7b115a', '', '', '', '', ''), -(608, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', '', '', '', 'Public Phone', 'NOT NULL', '', 23, '\"\"', 1, '2015-07-15 23:59:29', '2018-06-22 21:16:00', 4, '', 7, '866534e1-c9a3-41b0-bfa3-12c04d131200', '', '', '', '', ''), -(609, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Public Address', 'NOT NULL', '', 8, '\"\"', 1, '2015-07-16 00:02:01', '2015-08-25 21:15:22', 1, '', 568, 'f675cb18-7a5f-4659-8044-575d7c895b77', '', '', '', '', ''), -(610, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Public Contact Details', 'NOT NULL', '', 14, '\"\"', 1, '2015-07-16 00:04:50', '2015-08-25 21:15:22', 1, '', 35, '3db01427-c7a0-4137-aa3e-6010f527387d', '', '', '', '', ''), -(611, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Country Default Values', 'NOT NULL', '', 14, '\"\"', 1, '2015-07-16 00:06:13', '2015-08-25 21:15:22', 1, '', 35, '9fc869ac-fd44-4a39-85ce-8d0f4b43cf2a', '', '', '', '', ''), -(612, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Profile Status', 'NOT NULL', '', 17, '\"\"', 1, '2015-07-16 00:16:20', '2015-08-25 21:15:22', 3, '', 569, 'fc740ac5-8e3a-4fd3-b3ec-a9ae9bfbea68', '', '', '', '', ''), -(613, '', '', '', '', '', '', '', '', 7, '', 'CHAR', 2, '', '', 'Data Year (list 2010-2024)', 'NOT NULL', '', 11, '\"\"', 1, '2015-07-16 00:38:15', '2015-08-25 21:15:22', 2, '', 570, '39c9d15c-9ec3-41c4-9640-6edc9d74d933', '', '', '', '', ''), -(614, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Causes/Risks (dynamic)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\',\'a.ref\'),array(\'###ID###\',\'###CODE_TEXT###\',\'ref\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.ref ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t$ref = explode(\'.\',$item->ref);\\\\n\\\\t\\\\t\\\\t\\\\t$key = explode(\'.0\',$item->ref);\\\\n\\\\t\\\\t\\\\t\\\\t$key = implode(\'.\',$key);\\\\n\\\\t\\\\t\\\\t\\\\t$spacer = array();\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\tforeach ($ref as $nr => $space)\\\\n\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tif ($nr > 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t$spacer[] = \'|—\';\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\tif (###Component###Helper::checkArray($spacer))\\\\n\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, implode(\'\',$spacer).\' \'.$item->###CODE_TEXT###.\' (\'.$key.\')\');\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###.\' (\'.$key.\')\');\\\\n\\\\t\\\\t\\\\t\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-07-16 00:44:33', '2015-09-27 05:47:40', 12, '', 571, '743bb947-6d5a-4f95-be1c-654e14a66d4d', '', '', '', '', ''), -(615, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Age Group (list)', 'NOT NULL', '', 11, '\"\"', 1, '2015-07-16 00:50:00', '2015-08-25 21:15:22', 2, '', 572, '9b738cea-f897-425c-ad47-bc1705f75bea', '', '', '', '', ''), -(616, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Number', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-16 00:58:20', '2015-08-25 21:15:22', 1, '', 573, '6cf71246-7b9c-4f45-b526-21976d14cc92', '', '', '', '', ''), -(617, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Males Death', 'NOT NULL', '', 19, '\"\"', 1, '2015-07-16 01:02:03', '2015-08-25 21:15:22', 3, '', 533, '31b8d5a1-64a6-45e6-878e-11ecaa6b469f', '', '', '', '', ''), -(618, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Females Death', 'NOT NULL', '', 19, '\"\"', 1, '2015-07-16 01:03:00', '2015-08-25 21:15:22', 2, '', 533, 'fab04e1c-009b-4e7b-8eba-2dc23bfb14fd', '', '', '', '', ''), -(619, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Females YLD', 'NOT NULL', '', 19, '\"\"', 1, '2015-07-16 01:03:43', '2015-08-25 21:15:22', 2, '', 533, '013e054a-26d0-483f-ba40-fe266ed3e6ef', '', '', '', '', ''), -(620, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Males YLD', 'NOT NULL', '', 19, '\"\"', 1, '2015-07-16 01:04:38', '2015-08-25 21:15:22', 2, '', 533, '12cc3049-2f26-4bf2-89a4-237d6a844756', '', '', '', '', ''), -(621, '', '', '', '', '', '', 1, '', 7, '', 'CHAR', '', '', '', 'Absenteeism scaling factor Males', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-16 01:27:03', '2016-04-04 17:18:02', 5, '', 574, '06d755d3-c18c-47a2-9509-69174d63876b', '', '', '', '', ''), -(622, '', '', '', '', '', '', 1, '', 7, '', 'CHAR', '', '', '', 'Absenteeism scaling factor Females', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-16 01:27:52', '2016-04-04 17:18:28', 4, '', 574, 'da82cdf5-15f0-45b2-b5e7-0678780a50f0', '', '', '', '', ''), -(623, '', '', '', '', '', '', 1, '', 7, '', 'CHAR', '', '', '', 'mortality scaling factor Males', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-16 01:29:40', '2015-10-01 20:21:18', 3, '', 574, 'd1e0c4ca-2326-493b-85a2-77397b18d9fe', '', '', '', '', ''), -(624, '', '', '', '', '', '', 1, '', 7, '', 'CHAR', '', '', '', 'mortality scaling factor Females', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-16 01:30:20', '2015-10-01 20:21:26', 3, '', 574, '39267dbf-fb69-47b7-8a47-d689d4bb520c', '', '', '', '', ''), -(625, '', '', '', '', '', '', 1, '', 7, '', 'CHAR', '', '', '', 'presenteeism scaling factor Females', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-16 01:31:17', '2015-10-01 20:21:34', 3, '', 574, '37a35938-6951-4d07-9afa-2151a8f16794', '', '', '', '', ''), -(626, '', '', '', '', '', '', 1, '', 7, '', 'CHAR', '', '', '', 'presenteeism scaling factor Males', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-16 01:31:58', '2015-10-01 20:21:41', 3, '', 574, '0bfb7418-decf-4efc-8542-9ae5e6c77e5f', '', '', '', '', ''), -(627, 1, '', 1, '', 'LnRleHRfYXJlYXsNCgloZWlnaHQ6IDIwMHB4Ow0KCXdpZHRoOiAxMDAlOw0KfQ==', '', '', '', 255, '', 'VARCHAR', '', 'Ly8gYWRkIHRoZSBjYWxjdWxhdG9yIGJ1dHRvbg0KdmFyIGNhbF9idXR0b24gPSAnPGJyIC8+PGJyIC8+PGEgY2xhc3M9ImJ0biBidG4tc21hbGwgYnRuLXN1Y2Nlc3MiIGhyZWY9Imh0dHBzOi8vd3d3LnN0YWZmaGVhbHRoY2JwLmNvbS9kb3dubG9hZC9TY2FsaW5nX0ZhY3Rvcl9DYWxjdWxhdG9yX0NCUFRfM18wLnhsc3giPiA8c3BhbiBjbGFzcz0iaWNvbi1kb3dubG9hZCBpY29uLXdoaXRlIj48L3NwYW4+IENhbGN1bGF0b3IgPC9hPic7DQpqUXVlcnkoJyNqZm9ybV9jYXVzZXJpc2snKS5jbG9zZXN0KCcuY29udHJvbHMnKS5hcHBlbmQoY2FsX2J1dHRvbik7', '', 'Reference (scaling factors)', 'NOT NULL', '', 25, '\"\"', 1, '2015-07-16 01:46:08', '2016-08-16 11:43:25', 5, '', 575, 'eb0456b5-c2f1-4d7f-9ca3-70f1ea5e1d46', '', '', '', '', ''), -(628, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', 2, '', '', 'Causes/Risks (ref)', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-16 02:01:46', '2015-08-25 21:15:22', 2, '', 576, '86b3f745-a30b-4c8f-9482-a4cf0b14279c', '', '', '', '', ''), -(629, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Member Data Year (dynamic)', 'NOT NULL', '', 6, '\"input;\\\\n\\\\t\\\\t$client = $jinput->get(\'id\', 0, \'INT\');\\\\n\\\\t\\\\t$countries = ###Component###Helper::hisCountries(null,$client,\'company\');\\\\n\\\\t\\\\t$db = JFactory::getDBO();\\\" \\r\\n\\ttype_php_2=\\\"$query = $db->getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n\\\\t\\\\tif (###Component###Helper::checkArray($countries)) \\\\n\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t$query->where($db->quoteName(\'a.country\') . \' IN (\' . implode(\',\',$countries) . \')\');\\\\n\\\\t\\\\t}\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$years = array();\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\tif (!###Component###Helper::checkArray($years) || !in_array($item->###ID###.\'_\'.$item->###TEXT###,$years))\\\\n\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tif (!###Component###Helper::checkArray($countries) || $client == 0)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t$countryName = \' (\'. ###Component###Helper::getCountryName($item->###TEXT###).\')\';\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t$countryName = \'\';\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###ID### .$countryName);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t$years[$item->###ID###] = $item->###ID###.\'_\'.$item->###TEXT###;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-07-16 12:45:29', '2015-08-25 21:15:22', 21, '', 577, '5a2a586f-1521-40ef-ad40-c729c63a1c84', '', '', '', '', ''), -(630, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Users (Member)', 'NOT NULL', '', 7, '\"\\ttype=\\\"memberuser\\\" \\r\\n\\tname=\\\"user\\\" \\r\\n\\tlabel=\\\"User (Member)\\\" \\r\\n\\tdescription=\\\"\\\" \\r\\n\\tclass=\\\"\\\" \\r\\n\\trequired=\\\"false\\\" \\r\\n\\treadonly=\\\"\\\" \\r\\n\\tdisabled=\\\"\\\" \\r\\n\\tdefault=\\\"\\\" \\r\\n\\thint=\\\"select a member\\\" \\r\\n\\textends=\\\"user\\\" \\r\\n\\ttable=\\\"#__users\\\" \\r\\n\\tcomponent=\\\"com_users\\\" \\r\\n\\tview=\\\"###view###\\\" \\r\\n\\tviews=\\\"###views###\\\" \\r\\n\\tvalue_field=\\\"name\\\" \\r\\n\\tkey_field=\\\"id\\\" \\r\\n\\ttype_php_1=\\\"\\/\\/ set the groups array\\\" \\r\\n\\ttype_php_2=\\\"$groups = JComponentHelper::getParams(\'com_###component###\')->get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\/>\"', 1, '2015-07-16 16:58:35', '2015-08-25 21:15:22', 15, '', 578, '7e7e79f7-d610-4da7-8aed-9cf384be8455', '', '', '', '', ''), -(631, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'User (County)', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\" \\r\\n\\ttype_phpx_1=\\\"\\/\\/ To ensure that there is only one record per user\\\" \\r\\n\\ttype_phpx_2=\\\"\\/\\/ Get a db connection.\\\" \\r\\n\\ttype_phpx_3=\\\"$db = JFactory::getDbo();\\\" \\r\\n\\ttype_phpx_4=\\\"\\/\\/ Create a new query object.\\\" \\r\\n\\ttype_phpx_5=\\\"$query = $db->getQuery(true);\\\" \\r\\n\\ttype_phpx_6=\\\"\\/\\/ Select all records from the #__###component###_###view### table from ###CODE### column\\\".\\\" \\r\\n\\ttype_phpx_7=\\\"$query->select($db->quoteName(\'###CODE###\'));\\\" \\r\\n\\ttype_phpx_8=\\\"$query->from($db->quoteName(\'#__###component###_###view###\'));\\\" \\r\\n\\ttype_phpx_9=\\\"$db->setQuery($query);\\\" \\r\\n\\ttype_phpx_10=\\\"$db->execute();\\\" \\r\\n\\ttype_phpx_11=\\\"$found = $db->getNumRows();\\\" \\r\\n\\ttype_phpx_12=\\\"if ($found)\\\" \\r\\n\\ttype_phpx_13=\\\"{\\\" \\r\\n\\ttype_phpx_14=\\\"\\\\t\\/\\/ return all users already used\\\" \\r\\n\\ttype_phpx_15=\\\"\\\\treturn array_unique($db->loadColumn());\\\" \\r\\n\\ttype_phpx_16=\\\"}\\\" \\r\\n\\ttype_phpx_17=\\\"return null;\\\" \\r\\n\\/>\"', 1, '2015-07-16 17:02:05', '2015-08-25 21:15:22', 8, '', 578, 'aa51ead7-a208-4641-a15c-39d26f2d9874', '', '', '', '', ''), -(632, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'User (Service Provider)', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\" \\r\\n\\ttype_phpx_1=\\\"\\/\\/ To ensure that there is only one record per user\\\" \\r\\n\\ttype_phpx_2=\\\"\\/\\/ Get a db connection.\\\" \\r\\n\\ttype_phpx_3=\\\"$db = JFactory::getDbo();\\\" \\r\\n\\ttype_phpx_4=\\\"\\/\\/ Create a new query object.\\\" \\r\\n\\ttype_phpx_5=\\\"$query = $db->getQuery(true);\\\" \\r\\n\\ttype_phpx_6=\\\"\\/\\/ Select all records from the #__###component###_###view### table from ###CODE### column\\\".\\\" \\r\\n\\ttype_phpx_7=\\\"$query->select($db->quoteName(\'###CODE###\'));\\\" \\r\\n\\ttype_phpx_8=\\\"$query->from($db->quoteName(\'#__###component###_###view###\'));\\\" \\r\\n\\ttype_phpx_9=\\\"$db->setQuery($query);\\\" \\r\\n\\ttype_phpx_10=\\\"$db->execute();\\\" \\r\\n\\ttype_phpx_11=\\\"$found = $db->getNumRows();\\\" \\r\\n\\ttype_phpx_12=\\\"if ($found)\\\" \\r\\n\\ttype_phpx_13=\\\"{\\\" \\r\\n\\ttype_phpx_14=\\\"\\\\t\\/\\/ return all users already used\\\" \\r\\n\\ttype_phpx_15=\\\"\\\\treturn array_unique($db->loadColumn());\\\" \\r\\n\\ttype_phpx_16=\\\"}\\\" \\r\\n\\ttype_phpx_17=\\\"return null;\\\" \\r\\n\\/>\"', 1, '2015-07-16 17:03:34', '2015-08-25 21:15:22', 10, '', 578, '3de6761a-40e7-4098-a572-50a8c0fcf4cc', '', '', '', '', ''), -(633, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Member Departments', 'NOT NULL', '', 11, '\"\"', 1, '2015-07-16 17:09:36', '2015-08-25 21:15:22', 3, '', 579, 'cf502973-249c-4ddd-bf13-33955750a5a5', '', '', '', '', ''), -(634, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Departments (company)', 'NOT NULL', '', 17, '\"\"', 1, '2015-07-16 17:43:22', '2015-08-25 21:15:22', 3, '', 579, 'f7f2f504-80f0-4c8e-8d88-0fa71dd62866', '', '', '', '', ''), -(635, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Items (dynamic)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an item\');\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-07-16 21:10:16', '2015-08-25 21:15:22', 1, '', 580, '32eafdc4-2724-4036-b2e7-0789ab272af9', '', '', '', '', ''), -(636, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Warehouses (dynamic)', 'NOT NULL', '', 6, '\"getQuery(true);\\\"\\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\"\\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\"\\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\"\\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\"\\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-07-16 21:23:51', '2015-08-25 21:15:22', 1, '', 581, 'dac24e2a-9b75-4e0d-ba84-299b49da6b77', '', '', '', '', ''), -(637, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Supplier (default)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select a supplier\');\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-07-16 21:29:43', '2016-09-01 20:22:59', 8, '', 582, '9d858080-7adc-40c9-87ca-7b1585e58f87', '', '', '', '', ''), -(638, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Service Provider (dynamic)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"if (!$user->authorise(\'core.options\', \'com_###component###\'))\\\\n\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t$serviceProviders = ###Component###Helper::hisServiceProviders($user->id);\\\" \\r\\n\\ttype_php_7=\\\"\\\\tif (###Component###Helper::checkArray($serviceProviders))\\\\n\\\\t\\\\t\\\\t{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\\\t$serviceProviders = implode(\',\',$serviceProviders);\\\\n\\\\t\\\\t\\\\t\\\\t\\/\\/ only load this users service providers\\\" \\r\\n\\ttype_php_9=\\\"\\\\t\\\\t$query->where(\'a.id IN (\' . $serviceProviders . \')\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\t}\\\\n\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t\\\\t\\/\\/ don\'t allow user to see any service providers\\\\n\\\\t\\\\t\\\\t\\\\t$query->where(\'a.id = -4\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\t}\\\\n\\\\t\\\\t}\\\" \\r\\n\\ttype_php_13=\\\"$query->order(\'a.###TEXT### ASC\');\\\\n\\\\t\\\\t$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_14=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_15=\\\"$options = array();\\\\n\\\\t\\\\tif ($items)\\\" \\r\\n\\ttype_php_16=\\\"{\\\" \\r\\n\\ttype_php_17=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_18=\\\"\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, JFactory::getUser($item->###CODE_TEXT###)->name);\\\" \\r\\n\\ttype_php_19=\\\"\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn $options;\\\" \\r\\n\\/>\"', 1, '2015-07-18 12:35:41', '2016-02-19 20:38:06', 14, '', 578, '5e664e13-8d9d-4ec8-b78e-134304e56d20', '', '', '', '', ''), -(639, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Company (dynamic)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"if (!$user->authorise(\'core.options\', \'com_###component###\'))\\\\n\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t$companies = ###Component###Helper::hisCompanies($user->id);\\\" \\r\\n\\ttype_php_7=\\\"\\\\tif (###Component###Helper::checkArray($companies))\\\\n\\\\t\\\\t\\\\t{\\\" \\r\\n\\ttype_php_8=\\\"\\\\t\\\\t$companies = implode(\',\',$companies);\\\\n\\\\t\\\\t\\\\t\\\\t\\/\\/ only load this users companies\\\" \\r\\n\\ttype_php_9=\\\"\\\\t\\\\t$query->where(\'a.id IN (\' . $companies . \')\');\\\" \\r\\n\\ttype_php_10=\\\"\\\\t}\\\\n\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t\\\\t\\/\\/ dont allow user to see any companies\\\\n\\\\t\\\\t\\\\t\\\\t$query->where(\'a.id = -4\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\t}\\\\n\\\\t\\\\t}\\\" \\r\\n\\ttype_php_13=\\\"$query->order(\'a.###TEXT### ASC\');\\\\n\\\\t\\\\t$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_14=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_15=\\\"$options = array();\\\\n\\\\t\\\\tif ($items)\\\\n\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t$userIs = ###Component###Helper::userIs($user->id);\\\\n\\\\t\\\\t\\\\tif (3 == $userIs || $user->authorise(\'core.options\', \'com_###component###\'))\\\" \\r\\n\\ttype_php_16=\\\"\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', 0, \'-- \'.JText::_(\'A Country\').\' --\');\\\\n\\\\t\\\\t\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_18=\\\"\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_19=\\\"\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn $options;\\\" \\r\\n\\/>\"', 1, '2015-07-18 12:39:27', '2016-03-22 10:29:07', 14, '', 578, 'fad8c5aa-5885-4ae8-9f1d-755279d749c0', '', '', '', '', ''), -(640, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Work Days per/year', 'NOT NULL', '', 10, '\"\"', 1, '2015-07-20 11:02:48', '2015-08-25 21:15:22', 2, '', 583, 'a6080cb9-6284-4e85-a129-7bb1f3305307', '', '', '', '', ''), -(641, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Total Salary', 'NOT NULL', 4, 24, '\"\"', 1, '2015-07-20 11:05:25', '2015-08-25 21:15:22', 5, '', 584, 'd2d6ec71-f816-4aa0-aa72-30716a4f9582', '', '', '', '', ''), -(642, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Total Healthcare', 'NOT NULL', 4, 24, '\"\"', 1, '2015-07-20 11:08:51', '2015-08-25 21:15:22', 3, '', 584, 'e5172ff3-9e8f-4833-9ecc-9cacd9f25ac1', '', '', '', '', ''), -(643, '', '', 1, '', '', '', '', '', 64, '', 'VARCHAR', 2, 'Ly8gYWRkIHRoZSBjYWxjdWxhdG9yIGJ1dHRvbg0KdmFyIGNhbF9idXR0b24gPSAnIDxhIGNsYXNzPSJidG4gYnRuLXNtYWxsIGJ0bi1zdWNjZXNzIiBocmVmPSJodHRwczovL3d3dy5zdGFmZmhlYWx0aGNicC5jb20vZG93bmxvYWQvUHJvZHVjdGl2aXR5X0xvc3Nlc19DYWxjdWxhdG9yX1YxLnhsc3giPiA8c3BhbiBjbGFzcz0iaWNvbi1kb3dubG9hZCBpY29uLXdoaXRlIj48L3NwYW4+IENhbGN1bGF0b3IgPC9hPic7DQpqUXVlcnkoJyNqZm9ybV9wcm9kdWN0aXZpdHlfbG9zc2VzJykuY2xvc2VzdCgnLmNvbnRyb2xzJykuYXBwZW5kKGNhbF9idXR0b24pOw==', '', 'Medical Turnover Cost Factor', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-20 11:13:52', '2016-06-29 08:04:48', 6, '', 584, '98484d64-c651-43e5-bf2f-ec05b3cc1f84', '', '', '', '', ''), -(644, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Males', 'NOT NULL', 4, 24, '\"\"', 1, '2015-07-20 11:16:54', '2015-08-25 21:15:22', 2, '', 584, '7157e523-ea6b-4991-94fe-b3033f76bbea', '', '', '', '', ''), -(645, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Females', 'NOT NULL', 4, 24, '\"\"', 1, '2015-07-20 11:18:25', '2015-08-25 21:15:22', 2, '', 584, '7aad4891-0fe8-4978-a872-f1457b46ee18', '', '', '', '', ''), -(646, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Medical Turnovers Male', 'NOT NULL', 4, 24, '\"\"', 1, '2015-07-20 11:22:11', '2016-05-24 10:31:17', 4, '', 584, 'ee7cdf2c-c39f-48b5-ae6c-dd6947686da7', '', '', '', '', ''), -(647, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Medical Turnovers Female', 'NOT NULL', 4, 24, '\"\"', 1, '2015-07-20 11:22:47', '2016-05-24 10:30:48', 4, '', 584, '345d6961-a0ed-4900-9417-a923fc6a972f', '', '', '', '', ''), -(648, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Sick Leave Days Males', 'NOT NULL', 4, 24, '\"\"', 1, '2015-07-20 11:24:48', '2015-08-25 21:15:22', 2, '', 584, '0e6d8551-4b24-40f1-ab12-cd7ba0f3df47', '', '', '', '', ''), -(649, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Sick Leave Days Females', 'NOT NULL', 4, 24, '\"\"', 1, '2015-07-20 11:25:31', '2015-08-25 21:15:22', 2, '', 584, 'c6371e85-9819-4a32-b911-deafaae1fadc', '', '', '', '', ''), -(650, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Female Age Groups Percent', 'NOT NULL', '', 19, '\"\"', 1, '2015-07-20 11:50:47', '2015-08-25 21:15:22', 2, '', 533, 'f6074d4d-1497-4b5e-9fb1-5af5a18309f6', '', '', '', '', ''), -(651, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Male Age Groups Percent', 'NOT NULL', '', 19, '\"\"', 1, '2015-07-20 11:52:36', '2015-08-25 21:15:22', 2, '', 533, 'b3febc09-5825-4cdf-9cd1-63994baef3af', '', '', '', '', ''), -(652, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Cause/Risk only Advanced', 'NOT NULL', '', 14, '\"\"', 1, '2015-07-20 16:59:34', '2015-08-25 21:15:22', 2, '', 35, '8b4369b4-b384-43ea-8a2c-f8c827b5ff39', '', '', '', '', ''), -(653, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Member Data Year (dynamic)', 'NOT NULL', '', 6, '\"input;\\\\n\\\\t\\\\t$client = $jinput->get(\'id\', 0, \'INT\');\\\\n\\\\t\\\\t$country = ###Component###Helper::getClientCountryId($client);\\\\n\\\\t\\\\t$db = JFactory::getDBO();\\\" \\r\\n\\ttype_php_2=\\\"$query = $db->getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n\\\\t\\\\tif ($country) \\\\n\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t$query->where($db->quoteName(\'a.country\') . \' = \' . (int) $country);\\\\n\\\\t\\\\t}\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\\n\\\\t\\\\t\\\\t$years = array();\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\tif (!###Component###Helper::checkArray($years) || !in_array($item->###ID###,$years))\\\\n\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tif ($country)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t$countryName = \' (\'. ###Component###Helper::getCountryName($item->###TEXT###).\')\';\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t$countryName = \'\';\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###ID### .$countryName);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t$years[$item->###ID###] = $item->###ID###;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"$options = array_merge(parent::getOptions(), $options);\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', -2, '2015-07-20 17:09:51', '2015-07-19 21:29:32', 1, '', 577, 'ad2875e6-9578-48fb-b72c-5d7184009b29', '', '', '', '', ''), -(654, 1, '', 1, '', 'aW5wdXRbdHlwZT0iY2hlY2tib3giXSB7DQogICAgbWFyZ2luOiAgMCAhaW1wb3J0YW50Ow0KfQ==', '', '', '', '', '', 'TEXT', '', 'alF1ZXJ5KCcjYWRtaW5Gb3JtJykub24oJ2NoYW5nZScsICcjamZvcm1fY2F1c2Vzcmlza3MnLGZ1bmN0aW9uIChlKQ0Kew0KCS8vIGZpcnN0IHdlIGJ1aWxkIHRoZSBjaGVja2VkIGFycmF5DQoJY2hlY2tlZEFycmF5ID0gW107DQoJalF1ZXJ5KCcjamZvcm1fY2F1c2Vzcmlza3MgaW5wdXRbdHlwZT1jaGVja2JveF0nKS5lYWNoKGZ1bmN0aW9uKCkNCgl7DQoJCWlmIChqUXVlcnkodGhpcykuaXMoJzpjaGVja2VkJykpDQoJCXsNCgkJCWNoZWNrZWRBcnJheS5wdXNoKGpRdWVyeSgibGFiZWxbZm9yPSciK2pRdWVyeSh0aGlzKS5wcm9wKCdpZCcpKyInXSA+IHNwYW4iKS5wcm9wKCdpZCcpKTsNCgkJfQ0KCX0pOw0KCS8vIG5vdyB3ZSBjaGVjayBpZiBjaGlsZCBpcyBjaGVja2VkIGFuZCB1bmNoZWNrIHBlcmFudA0KCWpRdWVyeSgnI2pmb3JtX2NhdXNlc3Jpc2tzIGlucHV0W3R5cGU9Y2hlY2tib3hdJykuZWFjaChmdW5jdGlvbigpDQoJew0KCQlpZiAoalF1ZXJ5KHRoaXMpLmlzKCc6Y2hlY2tlZCcpKQ0KCQl7DQoJCQl2YXIgY2hlY2luZyA9IGpRdWVyeSgibGFiZWxbZm9yPSciK2pRdWVyeSh0aGlzKS5wcm9wKCdpZCcpKyInXSA+IHNwYW4iKS5wcm9wKCdpZCcpOw0KCQkJLy8gZmlyc3QgcmVtb3ZlIHRoaXMgY2hlY2tkIGl0ZW0gZnJvbSBhcnJheQ0KCQkJY2hlY2tlZEFycmF5Q2hlY2tlciA9IGpRdWVyeS5ncmVwKGNoZWNrZWRBcnJheSwgZnVuY3Rpb24odmFsdWUpIHsNCgkJCQlyZXR1cm4gdmFsdWUgIT0gY2hlY2luZzsNCgkJCX0pOw0KCQkJDQoJCQkvLyBub3cgdW5jaGVjayB0aGUgcGVyYW50IGNoZWNrYm94ZXMNCgkJCWpRdWVyeS5lYWNoKCBjaGVja2VkQXJyYXlDaGVja2VyLGZ1bmN0aW9uKGluZGV4LHZhbHVlKQ0KCQkJew0KCQkJCWlmIChjaGVjaW5nLmluZGV4T2YodmFsdWUpID49IDApDQoJCQkJew0KCQkJCQl2YXIgYmxvY2sgPSBqUXVlcnkoJyMnK3ZhbHVlKS5jbG9zZXN0KCdsYWJlbCcpLmZpbmQoJ2lucHV0JykucHJvcCgnaWQnKTsNCgkJCQkJalF1ZXJ5KCcjJytibG9jaykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTsNCgkJCQl9DQoJCQl9KTsNCgkJfQ0KCX0pOw0KfSk7', '', 'Causes/Risks (CheckBoxes)', 'NOT NULL', 1, 6, '\"getQuery(true);\\r\\n\\\\t\\\\t$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\',\'a.ref\'),array(\'###ID###\',\'###CODE_TEXT###\',\'ref\')));\\r\\n\\\\t\\\\t$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\r\\n\\\\t\\\\t$query->where($db->quoteName(\'a.published\') . \' = 1\');\\r\\n\\\\t\\\\t$query->order(\'a.ref ASC\');\\r\\n\\\\t\\\\t$db->setQuery((string)$query);\\r\\n\\\\t\\\\t$items = $db->loadObjectList();\\r\\n\\\\t\\\\t$options = array(); $counter = 0;\\r\\n\\\\t\\\\tif ($items)\\r\\n\\\\t\\\\t{\\r\\n\\\\t\\\\t\\\\tforeach($items as $item)\\r\\n\\\\t\\\\t\\\\t{\\r\\n\\\\t\\\\t\\\\t\\\\t$ref\\\\t= explode(\'.\',$item->ref);\\r\\n\\\\t\\\\t\\\\t\\\\t$target_id\\\\t= implode(\'-\',$ref);\\r\\n\\\\t\\\\t\\\\t\\\\t$key\\\\t= explode(\'.0\',$item->ref);\\r\\n\\\\t\\\\t\\\\t\\\\t$key\\\\t= implode(\'.\',$key);\\r\\n\\\\t\\\\t\\\\t\\\\t$spacer\\\\t= array();\\r\\n\\\\t\\\\t\\\\t\\\\t$sub\\\\t= \'\';\\r\\n\\\\t\\\\t\\\\t\\\\t$sub_\\\\t= \'\';\\r\\n\\\\t\\\\t\\\\t\\\\tforeach ($ref as $nr => $space)\\r\\n\\\\t\\\\t\\\\t\\\\t{\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\tif ($nr > 1)\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t{\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t$spacer[] = \'|—<\\/span>\';\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\tif ($nr > 2)\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t{\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t$sub = \'\';\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t$sub_ = \'<\\/em>\';\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\r\\n\\\\t\\\\t\\\\t\\\\t}\\r\\n\\\\t\\\\t\\\\t\\\\tif (###Component###Helper::checkArray($spacer))\\r\\n\\\\t\\\\t\\\\t\\\\t{\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t$tmp = array(\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\'value\' => $item->###ID###,\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\'text\' => \'  \'.implode(\'\',$spacer).\' \'.$sub.$item->###CODE_TEXT###.$sub_.\' (\'.$key.\')<\\/small><\\/span>\',\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\'checked\' => false\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t);\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t$options[] = (object) $tmp;\\r\\n\\\\t\\\\t\\\\t\\\\t}\\r\\n\\\\t\\\\t\\\\t\\\\telse\\r\\n\\\\t\\\\t\\\\t\\\\t{\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\tif ( $counter & 1 )\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t{\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t$color = \'#0C5B00\';\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\telse\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t{\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t$color = \'#1A3867\';\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t$tmp = array(\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\'value\' => $item->###ID###,\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\'text\' => \'  \'.strtoupper($item->###CODE_TEXT###).\'<\\/strong> (\'.$key.\')<\\/small><\\/span>\',\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\'checked\' => false\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t);\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t$options[] = (object) $tmp;\\r\\n\\\\t\\\\t\\\\t\\\\t\\\\t$counter++;\\r\\n\\\\t\\\\t\\\\t\\\\t}\\r\\n\\\\t\\\\t\\\\t}\\r\\n\\\\t\\\\t}\\r\\n\\\\t\\\\treturn $options;\\\" \\r\\n\\/>\"', 1, '2015-07-24 01:36:37', '2016-04-05 07:35:04', 23, '', 585, 'aface1df-ff65-4379-b8e6-e0c44f88aa36', '', '', '', '', ''), -(655, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Percent', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-25 11:39:46', '2015-08-25 21:15:22', 1, '', 573, '8c98c538-fd43-4d23-979d-edd25beea6ef', '', '', '', '', ''), -(656, '', '', '', '', '', '', '', '', 7, '', 'CHAR', '', '', '', 'Presenteeism Constant', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-25 12:58:36', '2015-08-25 21:15:22', 2, '', 574, 'cd4ba795-fe3b-4fca-977b-c3eb06621272', '', '', '', '', ''), -(657, '', '', '', '', '', '', '', '', 7, '', 'CHAR', '', '', '', 'Default Healthcare Costs', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-25 13:03:48', '2015-08-25 21:15:22', 2, '', 574, '196a5fcd-fa32-4cf8-9069-8d103d9cee93', '', '', '', '', ''), -(658, '', '', '', '', '', '', '', '', 7, '', 'CHAR', '', '', '', 'Ave. Medical Turnover', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-25 13:05:05', '2015-08-25 21:15:22', 2, '', 574, '22e004cd-7418-43ea-a714-9ade5254f15d', '', '', '', '', ''), -(659, '', '', '', '', '', '', '', '', 7, '', 'CHAR', '', '', '', 'Ave. Sick Leave', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-25 13:06:22', '2015-08-25 21:15:22', 2, '', 574, '0910ada8-dc9a-4051-858d-ae30dc4a292d', '', '', '', '', ''), -(660, '', '', '', '', '', '', '', '', 7, '', 'CHAR', '', '', '', 'Default Productivity Losses', 'NOT NULL', '', 24, '\"\"', 1, '2015-07-25 13:07:38', '2015-08-25 21:15:22', 2, '', 574, 'a1c7413c-c808-48e6-bf78-b36a9c37c76c', '', '', '', '', ''), -(661, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Note - Age Groups only Advanced', 'NOT NULL', '', 14, '\"\"', 1, '2015-07-25 14:56:29', '2015-08-25 21:15:22', 2, '', 35, 'f168e188-0dcc-4ba7-99d2-1a55d8ea9c63', '', '', '', '', ''), -(662, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (getListQuery - JModelList)', 'NOT NULL', '', 17, '\"\"', 1, '2015-07-27 16:23:49', '2015-10-04 18:01:08', 2, '', 187, 'f2581140-5d9c-4c29-b511-e12a826d15da', '', '', '', '', ''), -(663, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (Before getListQuery - JModelList)', 'NOT NULL', 2, 8, '\"used to add custom filtering values.<\\/small>\\\"\\n\\tdescription=\\\"Add PHP Here that should run in the getListQuery Method of the model of this view, just before the $query object is started. Do not add the php tags\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-07-27 16:25:16', '2020-05-04 20:47:12', 6, '', 118, 'b9c064cb-4266-4217-95b7-d2956e6bfefb', '', '', '', '', ''), -(664, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (allowEdit Method)', 'NOT NULL', '', 17, '\"\"', 1, '2015-07-27 23:10:11', '2015-08-25 21:15:22', 1, '', 187, '30744253-e2cd-44c3-ac86-0de3741b9ce0', '', '', '', '', ''), -(665, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (allowEdit)', 'NOT NULL', 2, 8, '\"The record ID => ($recordId) and the user object => ($user) are already set.<\\/small>\\\"\\n\\tdescription=\\\"Add PHP Here that should run in the allowEdit Method to add custom access control. Do not add the php tags.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-07-27 23:15:12', '2019-07-08 14:15:45', 4, '', 118, '88173ddb-35c5-49a7-845d-0d4e12119a37', '', '', '', '', ''), -(666, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Males Death (year)', 'NOT NULL', '', 19, '\"\"', 1, '2015-07-28 20:31:39', '2015-08-25 21:15:22', 4, '', 533, '6ec158a6-09a8-4ee7-88db-bdc7616f7e02', '', '', '', '', ''), -(667, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Females Death (year)', 'NOT NULL', '', 19, '\"\"', 1, '2015-07-28 20:32:25', '2015-08-25 21:15:22', 2, '', 533, '6f4a5058-4f24-4689-bb56-7ea42b2c1749', '', '', '', '', ''), -(668, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Females YLD (year)', 'NOT NULL', '', 19, '\"\"', 1, '2015-07-28 20:33:18', '2015-08-25 21:15:22', 2, '', 533, 'bc142f95-8856-4bb4-a091-3db9bc6ed2dd', '', '', '', '', ''), -(669, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Males YLD (year)', 'NOT NULL', '', 19, '\"\"', 1, '2015-07-28 20:34:00', '2015-08-25 21:15:22', 2, '', 533, '8115269b-857b-4e9d-b915-97b868de0664', '', '', '', '', ''), -(670, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Type (Intervention)', 'NOT NULL', '', 17, '\"\"', 1, '2015-07-28 22:22:15', '2015-09-04 16:16:06', 3, '', 521, '94edfe8c-aef5-4f94-9ee1-69b68b0352e2', '', '', '', '', ''), -(671, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Coverage', 'NOT NULL', '', 10, '\"\"', 1, '2015-07-28 22:25:59', '2015-10-01 04:34:28', 2, '', 586, '3b56d746-35d8-4c0c-8ec0-bc5db750a336', '', '', '', '', ''), -(672, 1, '', '', '', 'LnRleHRfYXJlYXsNCgloZWlnaHQ6IDIwMHB4Ow0KCXdpZHRoOiAxMDAlOw0KfQ==', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Reference (intervention)', 'NOT NULL', '', 25, '\"\"', 1, '2015-07-28 22:27:03', '2015-09-28 05:20:32', 3, '', 575, 'd13086a9-745f-453b-b254-675c74f582ab', '', '', '', '', ''), -(673, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Sharing Options', 'NOT NULL', '', 11, '\"\"', 1, '2015-07-28 22:39:07', '2015-09-04 16:16:35', 2, '', 569, '0e28d396-2fad-4ec2-9de1-328a97d7d9d9', '', '', '', '', ''), -(674, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Medical Turnovers Male', 'NOT NULL', 4, 24, '\"\"', -2, '2015-07-30 21:42:47', '2015-07-20 11:26:22', 1, '', 584, '6394a624-8a4c-49d7-9dcd-e5d9e223cb08', '', '', '', '', ''), -(675, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Females', 'NOT NULL', 4, 24, '\"\"', -2, '2015-07-30 21:43:16', '2015-07-30 21:43:30', 2, '', '', '27a1479c-17d0-40d2-b2f1-c136707e5382', '', '', '', '', ''), -(676, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Linked Views', 'NOT NULL', '', 35, '\"\"', 1, '2015-07-31 15:43:43', '2017-10-09 18:21:47', 5, '', 201, '70c62a1a-a141-4e0e-a271-c606744cb92c', '', '', '', '', ''), -(677, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Child Key', 'NOT NULL', '', 24, '\"\"', 1, '2015-08-01 17:26:33', '2019-07-17 00:21:42', 2, '', 523, 'af8571ac-81e7-4c62-a4f0-47c32c5dbf46', '', '', '', '', ''), -(678, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Parent Key', 'NOT NULL', '', 24, '\"\"', 1, '2015-08-01 17:27:42', '2023-07-17 06:05:37', 2, '', 523, '23329e4c-fb93-49fb-9b09-79e51211440d', '', '', '', '', ''), -(679, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Top Button (linked view)', 'NOT NULL', '', 11, '\"\"', 1, '2015-08-02 19:20:47', '2017-12-12 12:00:51', 6, '', 587, '1741e8fa-bb6c-4716-ad3d-aaa15a8de938', '', '', '', '', ''), -(680, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Export/Import Data', 'NOT NULL', '', 3, '\"\"', 1, '2015-08-03 21:34:49', '2019-06-11 12:20:39', 5, '', 588, '4d85ca04-f991-4e02-a465-8b0eb2d3a1c6', '', '', '', '', ''), -(681, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Company Name (companyname)', 'NOT NULL', '', 24, '\"\"', 1, '2015-08-05 00:42:34', '2015-08-25 21:15:22', 2, '', 159, 'f8c2c432-b756-4c67-bfa5-0871e58e55e3', '', '', '', '', ''), (682, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add More', 'NOT NULL', '', 17, '\"\"', 1, '2015-08-05 01:18:20', '2023-01-20 11:15:45', 7, '', 196, 'a66389aa-2323-4f44-8c23-ff44969639be', '', '', '', '', ''), -(683, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Females (demo)', 'NOT NULL', '', 19, '\"\"', 1, '2015-08-05 02:04:27', '2015-08-25 21:15:22', 1, '', 533, '72c3db18-b59c-4d09-8189-5a9978780cd2', '', '', '', '', ''), -(684, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Males (demo)', 'NOT NULL', '', 19, '\"\"', 1, '2015-08-05 02:05:34', '2015-08-25 21:15:22', 1, '', 533, '04ce6ce1-b30a-4104-ab2c-cc35e1f9dedd', '', '', '', '', ''), -(685, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Public Details', 'NOT NULL', '', 8, '\"\"', 1, '2015-08-06 17:41:10', '2015-08-25 21:15:22', 1, '', 1, '90ac6876-0182-49d5-bd15-db6cc86dbf23', '', '', '', '', ''), -(686, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Edit/Create Site View', 'NOT NULL', '', 11, '\"\"', 1, '2015-08-13 21:07:54', '2020-11-14 03:11:14', 8, '', 589, 'b93109a1-4469-49bf-b5e5-cdc212a98c92', '', '', '', '', ''), -(687, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Custom Admin View (dynamic)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' >= 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_12=\\\"\\\\t$options[] = JHtml::_(\'select.option\', \'\', \'Select an option\');\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-08-13 21:36:56', '2018-03-08 22:55:58', 7, '', 164, 'e578bf91-77bf-4b80-a2ca-33babfee369c', '', '', '', '', ''), -(688, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Add Custom Admin View', 'NOT NULL', '', 35, '\"\"', 1, '2015-08-13 21:55:04', '2020-05-28 20:12:40', 12, '', 316, 'b2423282-c8a8-400e-9ded-fe61cea433f4', '', '', '', '', ''), -(689, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Admin Views (dynamic-add link) ', 'NOT NULL', '', 6, '\"\"', 1, '2015-08-14 16:08:33', '2019-06-11 12:43:25', 13, '', 164, 'dab22540-f751-44d8-89e4-e7389416de40', '', '', '', '', ''), -(690, '', '', 1, '', '', '', '', '', 64, '', 'VARCHAR', '', 'alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KCWpRdWVyeShkb2N1bWVudCkub24oJ3N1YmZvcm0tcm93LWFkZCcsIGZ1bmN0aW9uKGV2ZW50LCByb3cpew0KCQlnZXRJY29uSW1hZ2UoalF1ZXJ5KHJvdykuZmluZCgnLmljb21vb24zNDInKSk7DQoJfSk7DQp9KTsNCg0KZnVuY3Rpb24gZ2V0SWNvbkltYWdlKGZpZWxkKSB7DQoJLy8gZ2V0IHRoZSBJRA0KCXZhciBpZCA9IGpRdWVyeShmaWVsZCkuYXR0cignaWQnKTsNCgkvLyByZW1vdmUgb2xkIG9uZSANCglqUXVlcnkoJyNpbWFnZV8nK2lkKS5yZW1vdmUoKTsNCgkvLyBnZXQgdmFsdWUNCgl2YXIgdmFsdWUgPSBqUXVlcnkoJyMnK2lkKS52YWwoKTsNCgkvLyBidWlsZCBuZXcgb25lDQoJdmFyIHNwYW4gPSAnPHNwYW4gaWQ9ImltYWdlXycraWQrJyIgY2xhc3M9Imljb24tJyt2YWx1ZSsnIiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IDhweDsgcmlnaHQ6IC0yMHB4OyI+PC9zcGFuPic7DQoJLy8gYWRkIHRoZSBpY29uDQoJalF1ZXJ5KCcjJytpZCsnX2Noem4nKS5hcHBlbmQoc3Bhbik7DQp9', '', 'Icomoon', 'NOT NULL', '', 11, '\"\"', 1, '2015-08-15 01:10:32', '2018-12-14 05:36:08', 16, '', 590, '13ec87fc-e5d3-4c06-ab1b-72964bc91a67', '', '', '', '', ''), -(691, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Email (not required)', 'NOT NULL', '', 24, '\"not required<\\/small>\\\"\\n\\tsize=\\\"10\\\"\\n\\tmaxlength=\\\"50\\\"\\n\\tdescription=\\\"Enter Email\\\"\\n\\tclass=\\\"text_area\\\"\\n\\trequired=\\\"false\\\"\\n\\tfilter=\\\"STRING\\\"\\n\\tmessage=\\\"Error! Please add email address here.\\\"\\n\\thint=\\\"demo@example.com\\\"\\n\\/>\"', 1, '2015-08-16 17:21:15', '2019-11-20 11:42:55', 3, '', 285, '976f7e2d-68e3-497e-b4d1-6326d5b95078', '', '', '', '', ''), -(692, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add Create User Helper Method', 'NOT NULL', '', 17, '\"\"', 1, '2015-08-16 22:46:48', '2015-08-25 21:15:22', 1, '', 591, 'ec128453-f0a7-4b20-a109-56d85c6ce213', '', '', '', '', ''), -(693, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add Uikit', 'NOT NULL', '', 11, '\"\\r\\n\"', 1, '2015-08-17 03:38:30', '2017-12-09 01:59:39', 9, '', 591, '627ec119-f50c-4afc-bfe7-8455a7ace163', '', '', '', '', ''), -(694, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add FooTable', 'NOT NULL', '', 11, '\"\"', 1, '2015-08-17 03:39:11', '2017-12-09 01:59:03', 3, '', 591, 'ecdc0281-fc1b-4643-b9d0-41bf95674959', '', '', '', '', ''), -(695, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Name (intervention)', 'NOT NULL', '', 24, '\"\"', 1, '2015-08-22 15:38:42', '2015-08-25 21:15:22', 1, '', 4, 'f3013ced-f17a-4ea3-8e62-6f9ad2fa151d', '', '', '', '', ''), -(696, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (batchCopy Method)', 'NOT NULL', '', 17, '\"\"', 1, '2015-08-22 20:59:55', '2015-08-25 21:15:22', 1, '', 187, '0c7535bd-dbfa-4155-bc06-9ef34bf0f29a', '', '', '', '', ''), -(697, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (batchMove Method)', 'NOT NULL', '', 17, '\"\"', 1, '2015-08-22 21:00:32', '2015-08-25 21:15:22', 1, '', 187, '90c08eb4-3097-4f59-a291-5959bbb174ad', '', '', '', '', ''), -(698, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (batchCopy)', 'NOT NULL', 2, 8, '\"Submitted values are in $values, id\'s are in $pks<\\/small>\\\"\\n\\tdescription=\\\"Add PHP Here that should run in the batchCopy Method. Do not add the php tags.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-08-22 21:04:36', '2019-07-08 14:15:51', 3, '', 118, '77067bb3-3cfa-4042-b3ac-8bdda9d8b492', '', '', '', '', ''), -(699, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (batchMove)', 'NOT NULL', 2, 8, '\"submitted values are in $values, id\'s are in $pks<\\/small>\\\"\\n\\tdescription=\\\"Add PHP Here that should run in the batchMove Method. Do not add the php tags.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-08-22 21:05:06', '2019-07-08 14:15:58', 3, '', 118, 'c56cf55d-fbc6-4246-b3c3-7810d42710b2', '', '', '', '', ''), -(700, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add Permissions (to field)', 'NOT NULL', '', 11, '\"\"', 1, '2015-08-23 01:27:32', '2018-07-18 02:34:12', 15, '', 199, '5e88d85b-c3e1-4792-82e1-a4bf6a40a75f', '', '', '', '', ''), -(701, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (before_getItem - JModelItem)', 'NOT NULL', 2, 8, '\"Target (int) $pk is the item id<\\/small>\\\"\\n\\tdescription=\\\"Add PHP Here that should run in the getItem Method. Do not add the php tags.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-08-26 00:45:53', '2019-07-08 14:16:05', 7, '', 119, 'c3bb9074-505a-4085-878b-f7ad3d5522a6', '', '', '', '', ''), -(702, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (after_getItem - JModelItem)', 'NOT NULL', 2, 8, '\"Target (Object) $this->_item[$pk] is the item<\\/small>\\\"\\n\\tdescription=\\\"Add PHP Here that should run in the getItem Method. Do not add the php tags.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-08-26 00:59:36', '2019-07-08 14:16:11', 8, '', 119, 'fc0dcf64-f6a8-48d7-8ed7-6ecea942cf21', '', '', '', '', ''), -(703, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (before getItem Method)', 'NOT NULL', '', 17, '\"\"', 1, '2015-08-26 01:02:15', '2015-08-25 21:15:22', 1, '', 188, 'bd40a792-2b63-446a-af75-0510f8c7cc2c', '', '', '', '', ''), -(704, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add PHP (after getItem Method)', 'NOT NULL', '', 17, '\"\"', 1, '2015-08-26 01:02:39', '2015-08-25 21:15:22', 1, '', 188, 'c1754272-da91-4a17-9567-c2566552cdc9', '', '', '', '', ''), -(705, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (after getItems - JModelList)', 'NOT NULL', 2, 8, '\"Target (array) $items values<\\/small>\\\"\\n\\tdescription=\\\"Add PHP Here that should run in the getItems Method. Do not add the php tags]\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-08-26 01:04:20', '2019-07-08 14:16:17', 5, '', 118, '1ae39469-cd74-4d82-84af-fec8af28be61', '', '', '', '', ''), -(706, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Result Path', 'NOT NULL', '', 24, '\"\"', 1, '2015-08-28 14:09:24', '2015-09-26 09:23:57', 2, '', 592, '2da30e05-18dc-40f2-b7b4-0bc4655b9cbd', '', '', '', '', ''), -(707, '', '', '', '', '', '', '', '', 11, '', 'CHAR', '', '', '', 'backend Chart Background', 'NOT NULL', '', 5, '\"\"', -2, '2015-08-31 17:52:06', '2015-08-31 19:45:24', 2, '', 163, '7820e588-fd00-4f2b-bf19-cc549da6f73a', '', '', '', '', ''), -(708, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'backend Main Width', 'NOT NULL', '', 24, '\"\"', -2, '2015-08-31 18:54:29', '2015-08-31 19:46:17', 2, '', 163, 'f5e47dc6-4529-4fde-96c7-454a445bfe88', '', '', '', '', ''), -(709, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'backend Chart Area Top', 'NOT NULL', '', 24, '\"\"', -2, '2015-08-31 18:55:49', '2015-08-31 19:46:40', 2, '', 163, '0d52122b-28a3-4c85-961c-9e5d0296b590', '', '', '', '', ''), -(710, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'backend Left Spacing', 'NOT NULL', '', 24, '\"\"', -2, '2015-08-31 18:56:54', '2015-08-31 19:47:06', 2, '', 163, '488f8f90-4e3b-4283-9d99-2b3635254633', '', '', '', '', ''), -(711, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'backend Chart Width', 'NOT NULL', '', 24, '\"\"', -2, '2015-08-31 18:58:12', '2015-08-31 19:47:33', 2, '', 163, '484c105a-e7d9-4b04-8b32-042867fa15e9', '', '', '', '', ''), -(712, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'backend Legend Font Size', 'NOT NULL', '', 24, '\"\"', -2, '2015-08-31 18:59:11', '2015-08-31 19:47:43', 3, '', 163, 'e060f824-0696-4c24-bcd2-9eca146a7cf9', '', '', '', '', ''), -(713, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'backend Legend Font Color', 'NOT NULL', '', 5, '\"\"', -2, '2015-08-31 19:00:44', '2015-08-31 19:47:54', 4, '', 163, 'bc12888c-6499-4bdd-8c4a-2ad718f6418a', '', '', '', '', ''), -(714, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'backend vAxis Font Color', 'NOT NULL', '', 5, '\"\"', -2, '2015-08-31 19:02:25', '2015-08-31 19:48:01', 2, '', 163, 'd53f4ed1-4269-43ce-a49f-6c7595c785d3', '', '', '', '', ''), -(715, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'backend hAxis Title Font Color', 'NOT NULL', '', 5, '\"\"', -2, '2015-08-31 19:03:34', '2015-08-31 19:48:12', 2, '', 163, '7102ce36-15b2-4d0a-9057-33cf2c4acc36', '', '', '', '', ''), -(716, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'backend hAxis Font Color', 'NOT NULL', '', 5, '\"\"', -2, '2015-08-31 19:04:22', '2015-08-31 19:48:20', 2, '', 163, '3299eb33-9588-46b2-a9f8-08fa44231a36', '', '', '', '', ''), -(717, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Redirect', 'NOT NULL', '', 24, '\"\"', 1, '2015-09-01 14:05:43', '2015-08-25 21:15:22', 1, '', 313, '01cfa4db-e5cc-4621-86fe-089c56e6b5b0', '', '', '', '', ''), -(718, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Method Name', 'NOT NULL', '', 24, '\"\"', 1, '2015-09-01 14:13:43', '2015-09-01 16:57:22', 3, '', 18, 'b650dcd0-a87e-4199-a0de-4080f17fbf84', '', '', '', '', ''), -(719, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Taget View Type', 'NOT NULL', '', 11, '\"\"', 1, '2015-09-01 14:21:28', '2015-09-01 14:44:46', 3, '', 106, '0b958da3-ebb1-4279-ac1e-22c9a2aec345', '', '', '', '', ''), -(720, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Custom Buttons', 'NOT NULL', '', 35, '\"\"', 1, '2015-09-01 14:33:22', '2018-12-14 04:54:51', 10, '', 593, 'f962e778-623e-40a8-b7db-88df71fdac51', '', '', '', '', ''), -(721, '', '', '', '', '', '', '', '', 1, '', 'INT', 2, '', '', 'Add Custom Buttons', 'NOT NULL', '', 17, '\"\"', 1, '2015-09-01 14:43:05', '2018-08-22 12:09:29', 2, '', 587, 'ab222d85-e408-44de-a513-d6aeda48b286', '', '', '', '', ''), -(722, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (controller method)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-09-01 16:44:15', '2019-07-08 14:16:29', 9, '', 118, 'e268c7be-dc34-40d9-bf2c-5f1897a09f7c', '', '', '', '', ''), -(723, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (model method)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-09-01 16:45:36', '2019-07-08 14:16:35', 6, '', 118, '5e831983-665b-43f2-9786-5e7c9cbb9e96', '', '', '', '', ''), -(724, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'CSS (custom_admin)', 'NOT NULL', 2, 8, '\"\"', 1, '2015-09-01 16:52:08', '2019-07-08 14:16:41', 3, '', 299, '7d733ad8-a5bf-4e2f-859d-be1251b7d0f1', '', '', '', '', ''), -(725, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Cost Per Employee', 'NOT NULL', '', 24, '\"\"', 1, '2015-09-03 01:44:20', '0000-00-00 00:00:00', 1, '', 594, 'ad1fe488-9409-4e2a-ba10-1d9acc90e019', '', '', '', '', ''), -(726, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Morbidity Reduction', 'NOT NULL', '', 24, '\"\"', 1, '2015-09-03 01:45:20', '2015-09-03 01:45:33', 2, '', 594, '3d27285f-2d62-41fa-b2d4-74e84d16f2f7', '', '', '', '', ''), -(727, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Mortality Reduction', 'NOT NULL', '', 24, '\"\"', 1, '2015-09-03 01:46:13', '2015-09-03 01:45:33', 1, '', 594, '5fe30de9-82f1-483e-9020-b010c4e853d4', '', '', '', '', ''), -(728, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Intervention', 'NOT NULL', '', 19, '\"\"', 1, '2015-09-03 01:53:49', '2015-09-04 01:26:50', 4, '', 533, 'eaddd58a-bc37-40e8-becf-22fe6e88b4ab', '', '', '', '', ''), -(729, 1, '', '', '', 'LmNhdXNld2lkdGggew0KCXdpZHRoOiAxMDAlOw0KfQ==', '', '', '', 11, '', 'INT', 2, '', '', 'Causes/Risks (dynamic intervention)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\',\'a.ref\'),array(\'###ID###\',\'###CODE_TEXT###\',\'ref\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.ref ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t$ref = explode(\'.\',$item->ref);\\\\n\\\\t\\\\t\\\\t\\\\t$key = explode(\'.0\',$item->ref);\\\\n\\\\t\\\\t\\\\t\\\\t$key = implode(\'.\',$key);\\\\n\\\\t\\\\t\\\\t\\\\t$spacer = array();\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\tforeach ($ref as $nr => $space)\\\\n\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tif ($nr > 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t$spacer[] = \'|—\';\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\tif (###Component###Helper::checkArray($spacer))\\\\n\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, implode(\'\',$spacer).\' \'.$item->###CODE_TEXT###.\' (\'.$key.\')\');\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###.\' (\'.$key.\')\');\\\\n\\\\t\\\\t\\\\t\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-09-03 02:08:12', '2015-09-27 05:46:48', 4, '', 571, 'f9e44acc-d549-4a87-8951-ed34dd9233f4', '', '', '', '', ''), -(730, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', '', '', '', 'Interventions (dynamic)', 'NOT NULL', 1, 6, '\"input;\\\\n\\\\t\\\\t\\/\\/ get the view name & id\\\\n\\\\t\\\\t$interId = $jinput->getInt(\'id\', 0);\\\\n\\\\t\\\\t\\/\\/ Get the user object.\\\\n\\\\t\\\\t$user = JFactory::getUser();\\\\n\\\\t\\\\t$userIs = CostbenefitprojectionHelper::userIs($user->id);\\\\n\\\\t\\\\t$db = JFactory::getDBO();\\\\n\\\\t\\\\t$query = $db->getQuery(true);\\\\n\\\\t\\\\t$query->select($db->quoteName(array(\'a.id\',\'a.name\',\'a.company\',\'a.share\'),array(\'id\',\'interventions_name\',\'company\',\'share\')));\\\\n\\\\t\\\\t$query->from($db->quoteName(\'#__costbenefitprojection_intervention\', \'a\'));\\\\n\\\\t\\\\t$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n\\\\t\\\\t$query->where($db->quoteName(\'a.id\') . \' != \' . $interId);\\\\n\\\\t\\\\tif (!$user->authorise(\'core.admin\'))\\\\n\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t$companies = CostbenefitprojectionHelper::hisCompanies($user->id);\\\\n\\\\t\\\\t\\\\tif (CostbenefitprojectionHelper::checkArray($companies))\\\\n\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t$companies = implode(\',\',$companies);\\\\n\\\\t\\\\t\\\\t\\\\t\\/\\/ only load this users companies\\\\n\\\\t\\\\t\\\\t\\\\t$query->where(\'a.company IN (\' . $companies . \')\');\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\/\\/ dont allow user to see any companies\\\\n\\\\t\\\\t\\\\t\\\\t$query->where(\'a.company = -4\');\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t$query->order(\'a.name ASC\');\\\\n\\\\t\\\\t$db->setQuery((string)$query);\\\\n\\\\t\\\\t$items = $db->loadObjectList();\\\\n\\\\t\\\\t$options = array();\\\\n\\\\t\\\\tif ($items)\\\\n\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\tforeach($items as $item)\\\\n\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\tif (!CostbenefitprojectionHelper::checkIntervetionAccess($item->id,$item->share,$item->company))\\\\n\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tcontinue;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\tif (1 == $userIs)\\\\n\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->id, $item->interventions_name);\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t$compName = CostbenefitprojectionHelper::getId(\'company\', $item->company, \'id\', \'name\');\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->id, $item->interventions_name . \' (\'.$compName.\')\');\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn $options;\\\" \\r\\n\\/>\"', 1, '2015-09-04 00:58:00', '2015-09-06 00:34:08', 6, '', 571, '531e60fc-38ff-45f6-ac81-566c5c3e6908', '', '', '', '', ''), -(731, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Redirect (module)', 'NOT NULL', '', 19, '\"\"', 1, '2015-09-06 17:56:01', '0000-00-00 00:00:00', 1, '', 595, '2d6b0a23-cc85-4fdd-b13c-d2fae7adca81', '', '', '', '', ''), -(732, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Dynamic Form getBuilder', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\',\'a.gettype\'),array(\'###ID###\',\'###CODE_TEXT###\',\'type\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\\n\\\\t\\\\t$query->where(\'( \'.$db->quoteName(\'a.gettype\') . \' = 1 OR \' . $db->quoteName(\'a.gettype\') . \' = 2 )\');\\\\n\\\\t\\\\t$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_6=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_7=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_8=\\\"$options = array();\\\" \\r\\n\\ttype_php_9=\\\"if ($items)\\\" \\r\\n\\ttype_php_10=\\\"{\\\" \\r\\n\\ttype_php_11=\\\"\\\\t$model = ###Component###Helper::getModel(\'dynamic_gets\');\\\" \\r\\n\\ttype_php_12=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_13=\\\"\\\\t{\\\\n\\\\t\\\\t\\\\t\\\\t$type = $model->selectionTranslation($item->type,\'gettype\');\\\" \\r\\n\\ttype_php_14=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT### . \' (\' . JText::_($type) . \')\' );\\\" \\r\\n\\ttype_php_15=\\\"\\\\t}\\\" \\r\\n\\ttype_php_16=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"return $options;\\\"\\r\\n\\/>\"', 1, '2015-09-09 04:42:07', '2015-09-10 21:02:51', 5, '', 164, '030c47a8-9450-48b1-b6f2-86b49a9216ee', '', '', '', '', ''), -(733, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Dynamic Storage', 'NOT NULL', 1, 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' >= 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-09-10 07:49:25', '2017-10-26 01:52:49', 4, '', 164, '367e4903-6d36-4d9a-bce3-eda55c4f79b6', '', '', '', '', ''), -(734, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Dynamic Storage Map', 'NOT NULL', 2, 25, '\"\"', 1, '2015-09-10 07:50:29', '2015-09-10 07:51:36', 2, '', 375, '251fe0f5-f1fd-40cd-a566-979abf7cd7f4', '', '', '', '', ''), -(735, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Dynamic Field Builder Map', 'NOT NULL', 2, 25, '\"\"', 1, '2015-09-10 10:09:15', '2015-09-10 20:53:16', 2, '', 375, '412c7069-3545-44ed-b76f-afbd069464af', '', '', '', '', ''), -(736, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add User Registration/Login', 'NOT NULL', '', 17, '\"\"', 1, '2015-09-10 12:12:07', '2015-08-25 21:15:22', 1, '', 188, '21909d42-3413-4017-9c4f-2496a565fd51', '', '', '', '', ''), -(737, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Student (user)', 'NOT NULL', '', 7, '\"\"', 1, '2015-09-11 03:24:08', '2018-10-09 20:10:03', 3, '', 596, '27112a83-3b06-4b20-a9dc-65f36409fe9c', '', '', '', '', ''), -(738, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Faculty Member (user)', 'NOT NULL', '', 7, '\"get(\'###type###\');\\\" \\r\\n\\ttype_php_3=\\\"return $groups;\\\"\\r\\n\\ttype_phpx_1=\\\"\\/\\/ To ensure that there is only one record per user\\\" \\r\\n\\ttype_phpx_2=\\\"\\/\\/ Get a db connection.\\\" \\r\\n\\ttype_phpx_3=\\\"$db = JFactory::getDbo();\\\" \\r\\n\\ttype_phpx_4=\\\"\\/\\/ Create a new query object.\\\" \\r\\n\\ttype_phpx_5=\\\"$query = $db->getQuery(true);\\\" \\r\\n\\ttype_phpx_6=\\\"\\/\\/ Select all records from the #__###component###_###view### table from ###CODE### column\\\".\\\" \\r\\n\\ttype_phpx_7=\\\"$query->select($db->quoteName(\'###CODE###\'));\\\" \\r\\n\\ttype_phpx_8=\\\"$query->from($db->quoteName(\'#__###component###_###view###\'));\\\" \\r\\n\\ttype_phpx_9=\\\"$db->setQuery($query);\\\" \\r\\n\\ttype_phpx_10=\\\"$db->execute();\\\" \\r\\n\\ttype_phpx_11=\\\"$found = $db->getNumRows();\\\" \\r\\n\\ttype_phpx_12=\\\"if ($found)\\\" \\r\\n\\ttype_phpx_13=\\\"{\\\" \\r\\n\\ttype_phpx_14=\\\"\\\\t\\/\\/ return all users already used\\\" \\r\\n\\ttype_phpx_15=\\\"\\\\treturn array_unique($db->loadColumn());\\\" \\r\\n\\ttype_phpx_16=\\\"}\\\" \\r\\n\\ttype_phpx_17=\\\"return null;\\\" \\r\\n\\/>\"', 1, '2015-09-11 03:30:04', '2015-09-11 03:35:04', 2, '', 236, 'a5f66d65-34f9-4347-a0b4-d298b2519c11', '', '', '', '', ''), -(739, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Faculty Member (dynamic)', 'NOT NULL', 1, 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, JFactory::getUser($item->###CODE_TEXT###)->name);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-09-11 03:53:03', '2015-09-11 03:52:23', 1, '', 236, '6385dff3-8015-4b1d-ab9d-ab26c20f9191', '', '', '', '', ''), -(740, '', '', 1, '', '', '', '', '', '', '', 'TEXT', '', 'PD9waHANCi8vIG1ha2Ugc3VyZSB0aGVzZSBmcmFtd29ya3MgYWxzbyBsb2FkLg0KSkh0bWw6Ol8oJ2pxdWVyeS5mcmFtZXdvcmsnKTsNCkpIdG1sOjpfKCdqcXVlcnkudWknKTsNCiRkb2MgPSBKRmFjdG9yeTo6Z2V0RG9jdW1lbnQoKTsNCi8vIGxvYWRlZCBmcm9tIHRoZSBjb2RlLmpxdWVyeS5jb20gc2l0ZQ0KJGRvYy0+YWRkU3R5bGVzaGVldCgnaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMC4zL3RoZW1lcy9zbW9vdGhuZXNzL2pxdWVyeS11aS5jc3MnKTsNCiRkb2MtPmFkZFNjcmlwdCgnaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMC4zL2pxdWVyeS11aS5taW4uanMnKTsNCj8+DQo8P3BocCAkZmllbGROcnMgPSByYW5nZSgxLDUwLDEpOyA/Pg0KalF1ZXJ5KCdpbnB1dC5mb3JtLWZpZWxkLXJlcGVhdGFibGUnKS5vbigncm93LWFkZCcsIGZ1bmN0aW9uIChlKSB7DQo8P3BocCBmb3JlYWNoKCRmaWVsZE5ycyBhcyAkbnIpOiA/Pg0KCWpRdWVyeSgnI2pmb3JtX2NvdXJzZV9kYXRlX2ZpZWxkc19kYXRlLTw/cGhwIGVjaG8gJG5yID8+JykuZGF0ZXBpY2tlcigNCgkJew0KCQkJbWluRGF0ZTogLTEsDQoJCQlwcmV2VGV4dDogJycsDQoJCQluZXh0VGV4dDogJycsDQoJCQltYXhEYXRlOiAnKzI0TScsDQoJCQlmaXJzdERheTogMSwNCgkJCWRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsDQoJCQlvblNlbGVjdDogZnVuY3Rpb24oZGF0ZVRleHQsIGluc3QpIHsNCgkJCWpRdWVyeSgnI2pmb3JtX2NvdXJzZV9kYXRlX2ZpZWxkc19kYXRlLTw/cGhwIGVjaG8gJG5yID8+JykudmFsKGRhdGVUZXh0KTsNCgkJfQ0KCX0pOw0KPD9waHAgZW5kZm9yZWFjaDsgPz4NCn0pOw==', '', 'Course Dates (events)', 'NOT NULL', '', 19, '\"\"', 1, '2015-09-11 04:05:54', '2016-12-13 15:08:58', 10, '', 597, 'b5968569-2f98-4157-bec8-424f7cce60fe', '', '', '', '', ''), -(741, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Date (custom)', 'NOT NULL', '', 24, '\"\"', 1, '2015-09-11 15:22:16', '2015-09-11 16:44:59', 3, '', 167, 'ac3bc4e0-f655-472c-8f3a-5628b4ca24ed', '', '', '', '', ''), -(742, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Question (text)', 'NOT NULL', '', 25, '\"\"', 1, '2015-09-11 19:39:34', '2015-09-11 19:49:13', 3, '', 129, '39e8cffe-a1e1-47cc-a97e-6a2c542b7901', '', '', '', '', ''), -(743, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Answer', 'NOT NULL', '', 25, '\"\"', 1, '2015-09-11 19:41:46', '2015-10-20 16:46:50', 4, '', 129, '328ad554-25f5-4f62-a491-bd0b25652ad5', '', '', '', '', ''), -(744, '', '', '', '', '', '', '', '', 7, '', 'INT', 2, '', '', 'Point (total)', 'NOT NULL', '', 10, '\"\"', 1, '2015-09-11 19:49:53', '2015-10-17 21:58:25', 6, '', 129, '16e31209-6fd9-44b6-8c16-6ad9ceeeff37', '', '', '', '', ''), -(745, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Assessments (show archived also)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\', \'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' >= 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, \'(\' . $item->###ID### . \') \' . ###Component###Helper::fancyDateTime($item->###CODE_TEXT###));\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-09-11 20:02:50', '2017-01-25 10:36:49', 7, '', 209, '084fbe18-f0d2-4291-b966-2cba7ae3e4a7', '', '', '', '', ''), -(746, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Selection Answer Type', 'NOT NULL', '', 11, '\"\"', 1, '2015-09-11 20:18:41', '2015-09-11 20:25:48', 3, '', 598, '55b3f555-7496-4f83-91f8-fcde8c19dad8', '', '', '', '', ''), -(747, '', '', 1, '', '', '', '', '', '', '', 'TEXT', '', 'alF1ZXJ5KCdpbnB1dC5mb3JtLWZpZWxkLXJlcGVhdGFibGUnKS5vbigndmFsdWUtdXBkYXRlJywgZnVuY3Rpb24oZSwgdmFsdWUpew0KCWlmICh2YWx1ZSkNCgl7DQoJCWJ1aWxkVGFibGUodmFsdWUsZS5jdXJyZW50VGFyZ2V0LmlkKTsNCgl9DQp9KTsNCg0KalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsgICAgDQoJdmFyIHZhbHVlc19hID0galF1ZXJ5KCcjamZvcm1fc2VsZWN0aW9uJykudmFsKCk7DQoJaWYgKHZhbHVlc19hKQ0KCXsNCgkJdmFsdWVzX2EgPSBqUXVlcnkucGFyc2VKU09OKHZhbHVlc19hKTsNCgkJYnVpbGRUYWJsZSh2YWx1ZXNfYSwnamZvcm1fc2VsZWN0aW9uJyk7DQoJfQ0KfSk7DQoNCmZ1bmN0aW9uIGJ1aWxkVGFibGUoYXJyYXksaWQpew0KCWpRdWVyeSgnI3RhYmxlXycraWQpLnJlbW92ZSgpOw0KCWpRdWVyeSgnIycraWQpLmNsb3Nlc3QoJy5jb250cm9sLWdyb3VwJykuYXBwZW5kKCc8dGFibGUgc3R5bGU9Im1hcmdpbjogNXB4IDAgMjBweDsiIGNsYXNzPSJ0YWJsZSIgaWQ9InRhYmxlXycraWQrJyI+Jyk7DQoJalF1ZXJ5KCcjdGFibGVfJytpZCkuYXBwZW5kKHRhYmxlSGVhZGVyKGFycmF5KSk7DQoJalF1ZXJ5KCcjdGFibGVfJytpZCkuYXBwZW5kKHRhYmxlQm9keShhcnJheSkpOyAgDQoJalF1ZXJ5KCcjdGFibGVfJytpZCkuYXBwZW5kKCc8L3RhYmxlPicpOw0KfQ0KDQpmdW5jdGlvbiB0YWJsZUhlYWRlcihhcnJheSl7DQoJdmFyIGhlYWRlciA9ICc8dGhlYWQ+PHRyPic7DQoJCWpRdWVyeS5lYWNoKGFycmF5LCBmdW5jdGlvbihrZXksIHZhbHVlKSB7DQoJCQloZWFkZXIgKz0gJzx0aCBzdHlsZT0icGFkZGluZzogMTBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjIxLCAyMjEsIDIyMSk7Ij4nK2NhcGl0YWxpemVGaXJzdExldHRlcihrZXkpKyc8L3RoPic7DQoJCX0pOw0KCQloZWFkZXIgKz0gJzwvdHI+PC90aGVhZD4nOw0KCXJldHVybiBoZWFkZXI7DQp9DQoNCmZ1bmN0aW9uIHRhYmxlQm9keShhcnJheSl7DQoJdmFyIGJvZHkgPSAnPHRib2R5Pic7DQoJdmFyIHJvd3MgPSBuZXcgQXJyYXkoKTsNCglqUXVlcnkuZWFjaChhcnJheSwgZnVuY3Rpb24oa2V5LCB2YWx1ZSkgew0KCQlqUXVlcnkuZWFjaCh2YWx1ZSwgZnVuY3Rpb24oaSwgbGluZSkgew0KCQkJaWYoIHJvd3NbaV0gPT09IHVuZGVmaW5lZCApIHsNCgkJCQlyb3dzW2ldID0gJzx0ZCBzdHlsZT0icGFkZGluZzogMTBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjIxLCAyMjEsIDIyMSk7Ij4nICsgbGluZSArICc8L3RkPic7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcm93c1tpXSA9IHJvd3NbaV0gKyAnPHRkIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJvcmRlcjogMXB4IHNvbGlkIHJnYigyMjEsIDIyMSwgMjIxKTsiPicgKyBsaW5lICsgJzwvdGQ+JzsNCgkJCX0NCgkJfSk7DQoJfSk7DQoJLy8gbm93IGxvYWQgdG8gYm9keSB0aGUgcm93cw0KCWpRdWVyeS5lYWNoKHJvd3MsIGZ1bmN0aW9uKGEsIHJvdykgew0KCQlib2R5ICs9ICc8dHI+JyArIHJvdyArICc8L3RyPic7DQoJfSk7DQoJYm9keSArPSAnPC90Ym9keT4nOw0KCXJldHVybiBib2R5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICANCn0NCg0KZnVuY3Rpb24gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHN0cmluZykgew0KICAgIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7DQp9', '', 'Selection&Marking (repeatable)', 'NOT NULL', '', 19, '\"\"', 1, '2015-09-11 20:20:42', '2015-11-29 04:38:19', 4, '', 599, '866b9399-f649-435c-a8ed-c3d3264101a3', '', '', '', '', ''), -(748, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Selection Type', 'NOT NULL', '', 17, '\"\"', 1, '2015-09-11 20:25:30', '2015-09-11 21:02:23', 2, '', 598, '4e4c84f4-0d42-41b9-9d2a-961fbb4deeca', '', '', '', '', ''), -(749, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Autobiography (full width)', 'NOT NULL', '', 8, '\"\"', 1, '2015-09-11 22:15:51', '2016-11-16 09:13:00', 2, '', 265, '309b8cf5-714e-46fa-b508-cb67a5836254', '', '', '', '', ''), -(750, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Label (text)', 'NOT NULL', '', 25, '\"\"', 1, '2015-09-12 02:11:11', '2015-09-11 19:49:13', 1, '', 129, '8314b8ae-a6ab-40da-8dab-a75a685f7a73', '', '', '', '', ''), -(751, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Value (submitted)', 'NOT NULL', '', 25, '\"\"', 1, '2015-09-12 02:11:58', '2015-10-20 17:36:29', 2, '', 129, '6f4b5713-17e4-4579-ad0f-a0c04047893f', '', '', '', '', ''), -(752, '', '', '', '', '', '', 'Other', 2, 1, '', 'TINYINT', 2, '', '', 'Status (application)', 'NOT NULL', '', 17, '\"\"', 1, '2015-09-12 02:15:38', '2015-09-24 14:32:12', 2, '', 129, 'f3a9f329-7bd1-4a38-9b29-ec3bfea9c1d1', '', '', '', '', ''), -(753, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Applications (dynamic)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-09-12 02:24:28', '2015-08-25 21:15:22', 1, '', 209, 'dabb7a8a-3c29-40fe-a9aa-c340826836ca', '', '', '', '', ''), -(754, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Note (dynamic)', 'NOT NULL', '', 6, '\"getQuery(true);\\\" \\r\\n\\ttype_php_3=\\\"$query->select($db->quoteName(array(\'a.###ID###\',\'a.###TEXT###\'),array(\'###ID###\',\'###CODE_TEXT###\')));\\\" \\r\\n\\ttype_php_4=\\\"$query->from($db->quoteName(\'###TABLE###\', \'a\'));\\\" \\r\\n\\ttype_php_5=\\\"$query->where($db->quoteName(\'a.published\') . \' = 1\');\\\" \\r\\n\\ttype_php_6=\\\"$query->order(\'a.###TEXT### ASC\');\\\" \\r\\n\\ttype_php_7=\\\"$db->setQuery((string)$query);\\\" \\r\\n\\ttype_php_8=\\\"$items = $db->loadObjectList();\\\" \\r\\n\\ttype_php_9=\\\"$options = array();\\\" \\r\\n\\ttype_php_10=\\\"if ($items)\\\" \\r\\n\\ttype_php_11=\\\"{\\\" \\r\\n\\ttype_php_13=\\\"\\\\tforeach($items as $item)\\\" \\r\\n\\ttype_php_14=\\\"\\\\t{\\\" \\r\\n\\ttype_php_15=\\\"\\\\t\\\\t$options[] = JHtml::_(\'select.option\', $item->###ID###, $item->###CODE_TEXT###);\\\" \\r\\n\\ttype_php_16=\\\"\\\\t}\\\" \\r\\n\\ttype_php_17=\\\"}\\\" \\r\\n\\ttype_php_18=\\\"\\\" \\r\\n\\ttype_php_19=\\\"return $options;\\\" \\r\\n\\/>\"', 1, '2015-09-12 13:46:20', '2015-09-12 13:48:16', 2, '', 600, '4270ffe1-8a87-42de-b52c-53953f2ec254', '', '', '', '', ''), -(755, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Dropbox folder', 'NOT NULL', '', 27, '\"\"', 1, '2015-09-14 03:39:10', '2015-09-14 13:49:32', 3, '', 601, '57f4d23b-3243-4253-8548-9368b8d4f5d1', '', '', '', '', ''), -(756, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Auto Update Timer', 'NOT NULL', '', 10, '\"\"', 1, '2015-09-14 12:31:36', '2016-11-03 17:49:06', 5, '', 602, '09c7138f-5bb5-41f1-a052-f5544c0dbe1d', '', '', '', '', ''), -(757, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Dropbox Note', 'NOT NULL', '', 14, '\"To integrate Dropbox with you system you need to do the following:<\\/b>