Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval(base64_decode("LyoqICogR29NYWdlLmNvbSAqICogR29NYWdlIEZlZWQgUHJvIE0yICogKiBAY2F0..

Decoded Output download

/** * GoMage.com * * GoMage Feed Pro M2 * * @category Extension * @copyright Copyright (c) 2010-2018 GoMage.com (https://www.gomage.com) * @author GoMage.com * @license https://www.gomage.com/licensing Single domain license * @terms of use https://www.gomage.com/terms-of-use * @version Release: 1.1.0 * @since Class available since Release 1.0.0 */ namespace GoMage\Feed\Helper; use Magento\Framework\App\Filesystem\DirectoryList; class Data { /** * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory */ protected $_attributeCollectionFactory; /** * @var \GoMage\Feed\Model\ResourceModel\Attribute\Collection */ protected $_dynamicAttributeCollection; /** * @var \Magento\Store\Model\StoreManagerInterface */ protected $_storeManager; /** * @var \Magento\Store\Model\System\Store */ protected $_systemStore; /** * @var \Magento\Framework\Filesystem\Directory\ReadInterface */ protected $_directory; /** * @var \Magento\Framework\Stdlib\DateTime\DateTime */ protected $_dateTime; /** * @var \Magento\Framework\Module\ModuleListInterface */ protected $_moduleList; /** * @var \Magento\Framework\Json\Helper\Data */ protected $_jsonHelper; /** * @var \Magento\Framework\Encryption\EncryptorInterface */ protected $_encryptor; /** * @var \GoMage\Feed\Model\Mapper\Factory */ protected $_mapperFactory; /** * @var \Magento\Framework\ObjectManagerInterface */ protected $_objectManager; /** * @var \Magento\Framework\App\Config\ScopeConfigInterface */ protected $_scopeConfig; public function __construct( \Magento\Framework\ObjectManagerInterface $objectManager ) { $this->_objectManager = $objectManager; $this->_attributeCollectionFactory = $objectManager->get('Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory'); $this->_dynamicAttributeCollection = $objectManager->get('GoMage\Feed\Model\ResourceModel\Attribute\Collection'); $filesystem = $objectManager->get('Magento\Framework\Filesystem'); $this->_directory = $filesystem->getDirectoryRead(DirectoryList::MEDIA); $this->_storeManager = $objectManager->get('Magento\Store\Model\StoreManager'); $this->_systemStore = $objectManager->get('Magento\Store\Model\System\Store'); $this->_dateTime = $objectManager->get('Magento\Framework\Stdlib\DateTime\DateTime'); $this->_moduleList = $objectManager->get('Magento\Framework\Module\ModuleList'); $this->_jsonHelper = $objectManager->get('Magento\Framework\Json\Helper\Data'); $this->_encryptor = $objectManager->get('Magento\Framework\Encryption\Encryptor'); $this->_mapperFactory = $objectManager->get('GoMage\Feed\Model\Mapper\Factory'); $this->_scopeConfig = $objectManager->get('Magento\Framework\App\Config'); } /** * @return array */ public function getProductAttributes() { $attributes = $this->_attributeCollectionFactory->create()->addVisibleFilter()->getItems(); $customMappers = $this->_mapperFactory->getCustomMappers(); foreach ($attributes as $key => $attribute) { if (isset($customMappers[$attribute->getAttributeCode()])) { unset($attributes[$key]); } } $attributes = array_map(function ($attribute) { return [ 'value' => $attribute->getAttributeCode(), 'label' => $attribute->getStoreLabel() ]; }, $attributes ); foreach ($customMappers as $value => $class) { $attributes[] = [ 'value' => $value, 'label' => $class::getLabel() ]; } usort($attributes, function ($a, $b) { return strcmp($a['label'], $b['label']); } ); return $attributes; } /** * @return array */ public function getDynamicAttributes() { $attributes = $this->_dynamicAttributeCollection->load()->getItems(); $attributes = array_map(function (\GoMage\Feed\Model\Attribute $attribute) { return [ 'value' => $attribute->getCode(), 'label' => $attribute->getName() ]; }, $attributes ); usort($attributes, function ($a, $b) { return strcmp($a['label'], $b['label']); } ); return $attributes; } /** * @param string $fileName * @param int $storeId * @return string */ public function getFeedUrl($fileName = '', $storeId = 0) { if ($fileName && $storeId) { $path = $this->getFeedPath($fileName); if ($path) { return $this->_storeManager->getStore($storeId)->getBaseUrl( \Magento\Framework\UrlInterface::URL_TYPE_MEDIA ) . $path; } } return ''; } /** * @param string $fileName * @return string */ public function getFeedPath($fileName, $absolute = false) { $path = \GoMage\Feed\Model\Writer\WriterInterface::DIRECTORY . '/' . $fileName; if ($this->_directory->isExist($path)) { return $absolute ? $this->_directory->getAbsolutePath($path) : $path; } return ''; } /** * @param int $interval * @param int $hourFrom * @param int $hourTo * @param string $lastRun * @return bool */ public function needRunCron($interval, $hourFrom, $hourTo, $lastRun) { $current = $this->_dateTime->gmtDate('G'); $lastRun = $lastRun ? $this->_dateTime->gmtTimestamp($lastRun) : 0; switch ($interval) { case 12: case 24: if ($hourFrom != $current) { return false; } if (($lastRun + $interval * 60 * 60) > $this->_dateTime->gmtTimestamp()) { return false; } break; default: if (!$hourTo) { $hourTo = 24; } $hours = []; if ($hourFrom > $hourTo) { for ($i = $hourFrom; $i <= 23; $i++) { $hours[] = $i; } for ($i = 0; $i <= $hourTo; $i++) { $hours[] = $i; } } else { for ($i = $hourFrom; $i <= $hourTo; $i++) { if ($i == 24) { $hours[] = 0; } else { $hours[] = $i; } } } if (!in_array($current, $hours)) { return false; } if (($lastRun + $interval * 60 * 60) > $this->_dateTime->gmtTimestamp()) { return false; } } return true; } /** * @return array */ public function getAvailableWebsites() { if (!$this->_scopeConfig->getValue('gomage_activation/feed/installed') || (intval($this->_scopeConfig->getValue('gomage_activation/feed/count')) > 10) ) { return []; } $time_to_update = 60 * 60 * 24 * 15; $r = $this->_scopeConfig->getValue('gomage_activation/feed/ar'); $t = $this->_scopeConfig->getValue('gomage_activation/feed/time'); $s = $this->_scopeConfig->getValue('gomage_activation/feed/websites'); $last_check = str_replace($r, '', $this->_encryptor->decrypt($t)); $sites = explode(',', str_replace($r, '', $this->_encryptor->decrypt($s))); $sites = array_diff($sites, ['']); if (($last_check + $time_to_update) < $this->_dateTime->gmtTimestamp()) { $this->a((int)$this->_scopeConfig->getValue('gomage_activation/feed/count'), implode(',', $sites) ); } return $sites; } public function a($c = 0, $s = '') { $k = $this->_scopeConfig->getValue('gomage_settings/feed/key'); /** @var \Magento\Config\Model\Config $config */ $config = $this->_objectManager->create('Magento\Config\Model\Config'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, sprintf('https://www.gomage.com/index.php/gomage_downloadable/key/check')); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, 'key=' . urlencode($k) . '&sku=feed-pro-m2&domains=' . urlencode(implode(',', $this->_getDomains())) . '&ver=' . urlencode($this->_getVersion())); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $content = curl_exec($ch); try { $r = $this->_jsonHelper->jsonDecode($content); } catch (\Exception $e) { $r = []; } if (empty($r)) { $value1 = $this->_scopeConfig->getValue('gomage_activation/feed/ar'); $groups = [ 'feed' => [ 'fields' => [ 'ar' => ['value' => $value1], 'websites' => [ 'value' => (string)$this->_scopeConfig->getValue('gomage_activation/feed/websites') ], 'time' => [ 'value' => (string)$this->_encryptor->encrypt($value1 . ($this->_dateTime->gmtTimestamp() - (60 * 60 * 24 * 15 - 1800)) . $value1) ], 'count' => ['value' => $c + 1] ] ] ]; $config->setSection('gomage_activation') ->setGroups($groups) ->save(); return; } $value1 = ''; $value2 = ''; if (isset($r['d']) && isset($r['c'])) { $value1 = $this->_encryptor->encrypt(base64_encode($this->_jsonHelper->jsonEncode($r))); if (!$s) { $s = $this->_scopeConfig->getValue('gomage_settings/feed/websites'); } $s = array_slice(explode(',', $s), 0, $r['c']); $value2 = $this->_encryptor->encrypt($value1 . implode(',', $s) . $value1); } $groups = [ 'feed' => [ 'fields' => [ 'ar' => ['value' => $value1], 'websites' => ['value' => (string)$value2], 'time' => [ 'value' => (string)$this->_encryptor->encrypt($value1 . $this->_dateTime->gmtTimestamp() . $value1) ], 'installed' => ['value' => 1], 'count' => ['value' => 0] ] ] ]; $config->setSection('gomage_activation') ->setGroups($groups) ->save(); } /** * @return mixed */ public function ga() { $value = base64_decode($this->_encryptor->decrypt($this->_scopeConfig->getValue('gomage_activation/feed/ar'))); if ($value) { return $this->_jsonHelper->jsonDecode($value); } return []; } /** * @return array */ private function _getDomains() { $domains = []; /** @var \Magento\Store\Model\Website $website */ foreach ($this->_storeManager->getWebsites() as $website) { $url = $website->getConfig('web/unsecure/base_url'); if ($domain = trim(preg_replace('/^.*?\\/\\/(.*)?\\//', '$1', $url))) { $domains[] = $domain; } $url = $website->getConfig('web/secure/base_url'); if ($domain = trim(preg_replace('/^.*?\\/\\/(.*)?\\//', '$1', $url))) { $domains[] = $domain; } } return array_unique($domains); } /** * @return string */ private function _getVersion() { return $this->_moduleList->getOne('GoMage_Feed')['setup_version']; } /** * @return array */ public function getStoreOptionArray() { $options = []; $options[] = ['label' => '', 'value' => '']; $websites = $this->getAvailableWebsites(); $nonEscapableNbspChar = html_entity_decode('&#160;', ENT_NOQUOTES, 'UTF-8'); foreach ($this->_systemStore->getWebsiteCollection() as $website) { if (!in_array($website->getId(), $websites)) { continue; } $websiteShow = false; foreach ($this->_systemStore->getGroupCollection() as $group) { if ($website->getId() != $group->getWebsiteId()) { continue; } $groupShow = false; foreach ($this->_systemStore->getStoreCollection() as $store) { if ($group->getId() != $store->getGroupId()) { continue; } if (!$websiteShow) { $options[] = ['label' => $website->getName(), 'value' => []]; $websiteShow = true; } if (!$groupShow) { $groupShow = true; $values = []; } $values[] = [ 'label' => str_repeat($nonEscapableNbspChar, 4) . $store->getName(), 'value' => $store->getId(), ]; } if ($groupShow) { $options[] = [ 'label' => str_repeat($nonEscapableNbspChar, 4) . $group->getName(), 'value' => $values, ]; } } } return $options; } public function notify() { $frequency = (int)$this->_scopeConfig->getValue('gomage_notification/notification/frequency'); if (!$frequency) { $frequency = 24; } $last_update = (int)$this->_scopeConfig->getValue('gomage_notification/notification/last_update'); if (($frequency * 60 * 60 + $last_update) > $this->_dateTime->gmtTimestamp()) { return false; } $timestamp = $last_update; if (!$timestamp) { $timestamp = $this->_dateTime->gmtTimestamp(); } try { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, sprintf('https://www.gomage.com/index.php/gomage_notification/index/data')); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, 'sku=feed-pro-m2&timestamp=' . $timestamp . '&ver=' . urlencode($this->_getVersion())); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $content = curl_exec($ch); try { $result = $this->_jsonHelper->jsonDecode($content); } catch (\Exception $e) { $result = false; } if ($result && isset($result['frequency']) && ($result['frequency'] != $frequency)) { $frequency = $result['frequency']; } if ($result && isset($result['data'])) { if (!empty($result['data'])) { /** @var \Magento\AdminNotification\Model\Inbox $inbox */ $inbox = $this->_objectManager->create('Magento\AdminNotification\Model\Inbox'); $inbox->parse($result['data']); } } } catch (\Exception $e) { } $groups = [ 'notification' => [ 'fields' => [ 'frequency' => ['value' => $frequency], 'last_update' => ['value' => $this->_dateTime->gmtTimestamp()] ] ] ]; /** @var \Magento\Config\Model\Config $config */ $config = $this->_objectManager->create('Magento\Config\Model\Config'); $config->setSection('gomage_notification') ->setGroups($groups) ->save(); } }

Did this file decode correctly?

Original Code

<?php eval(base64_decode("LyoqICogR29NYWdlLmNvbSAqICogR29NYWdlIEZlZWQgUHJvIE0yICogKiBAY2F0ZWdvcnkgRXh0ZW5zaW9uICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxOCBHb01hZ2UuY29tIChodHRwczovL3d3dy5nb21hZ2UuY29tKSAqIEBhdXRob3IgR29NYWdlLmNvbSAqIEBsaWNlbnNlIGh0dHBzOi8vd3d3LmdvbWFnZS5jb20vbGljZW5zaW5nIFNpbmdsZSBkb21haW4gbGljZW5zZSAqIEB0ZXJtcyBvZiB1c2UgaHR0cHM6Ly93d3cuZ29tYWdlLmNvbS90ZXJtcy1vZi11c2UgKiBAdmVyc2lvbiBSZWxlYXNlOiAxLjEuMCAqIEBzaW5jZSBDbGFzcyBhdmFpbGFibGUgc2luY2UgUmVsZWFzZSAxLjAuMCAqLyBuYW1lc3BhY2UgR29NYWdlXEZlZWRcSGVscGVyOyB1c2UgTWFnZW50b1xGcmFtZXdvcmtcQXBwXEZpbGVzeXN0ZW1cRGlyZWN0b3J5TGlzdDsgY2xhc3MgRGF0YSB7IC8qKiAqIEB2YXIgXE1hZ2VudG9cQ2F0YWxvZ1xNb2RlbFxSZXNvdXJjZU1vZGVsXFByb2R1Y3RcQXR0cmlidXRlXENvbGxlY3Rpb25GYWN0b3J5ICovIHByb3RlY3RlZCAkX2F0dHJpYnV0ZUNvbGxlY3Rpb25GYWN0b3J5OyAvKiogKiBAdmFyIFxHb01hZ2VcRmVlZFxNb2RlbFxSZXNvdXJjZU1vZGVsXEF0dHJpYnV0ZVxDb2xsZWN0aW9uICovIHByb3RlY3RlZCAkX2R5bmFtaWNBdHRyaWJ1dGVDb2xsZWN0aW9uOyAvKiogKiBAdmFyIFxNYWdlbnRvXFN0b3JlXE1vZGVsXFN0b3JlTWFuYWdlckludGVyZmFjZSAqLyBwcm90ZWN0ZWQgJF9zdG9yZU1hbmFnZXI7IC8qKiAqIEB2YXIgXE1hZ2VudG9cU3RvcmVcTW9kZWxcU3lzdGVtXFN0b3JlICovIHByb3RlY3RlZCAkX3N5c3RlbVN0b3JlOyAvKiogKiBAdmFyIFxNYWdlbnRvXEZyYW1ld29ya1xGaWxlc3lzdGVtXERpcmVjdG9yeVxSZWFkSW50ZXJmYWNlICovIHByb3RlY3RlZCAkX2RpcmVjdG9yeTsgLyoqICogQHZhciBcTWFnZW50b1xGcmFtZXdvcmtcU3RkbGliXERhdGVUaW1lXERhdGVUaW1lICovIHByb3RlY3RlZCAkX2RhdGVUaW1lOyAvKiogKiBAdmFyIFxNYWdlbnRvXEZyYW1ld29ya1xNb2R1bGVcTW9kdWxlTGlzdEludGVyZmFjZSAqLyBwcm90ZWN0ZWQgJF9tb2R1bGVMaXN0OyAvKiogKiBAdmFyIFxNYWdlbnRvXEZyYW1ld29ya1xKc29uXEhlbHBlclxEYXRhICovIHByb3RlY3RlZCAkX2pzb25IZWxwZXI7IC8qKiAqIEB2YXIgXE1hZ2VudG9cRnJhbWV3b3JrXEVuY3J5cHRpb25cRW5jcnlwdG9ySW50ZXJmYWNlICovIHByb3RlY3RlZCAkX2VuY3J5cHRvcjsgLyoqICogQHZhciBcR29NYWdlXEZlZWRcTW9kZWxcTWFwcGVyXEZhY3RvcnkgKi8gcHJvdGVjdGVkICRfbWFwcGVyRmFjdG9yeTsgLyoqICogQHZhciBcTWFnZW50b1xGcmFtZXdvcmtcT2JqZWN0TWFuYWdlckludGVyZmFjZSAqLyBwcm90ZWN0ZWQgJF9vYmplY3RNYW5hZ2VyOyAvKiogKiBAdmFyIFxNYWdlbnRvXEZyYW1ld29ya1xBcHBcQ29uZmlnXFNjb3BlQ29uZmlnSW50ZXJmYWNlICovIHByb3RlY3RlZCAkX3Njb3BlQ29uZmlnOyBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoIFxNYWdlbnRvXEZyYW1ld29ya1xPYmplY3RNYW5hZ2VySW50ZXJmYWNlICRvYmplY3RNYW5hZ2VyICkgeyAkdGhpcy0+X29iamVjdE1hbmFnZXIgPSAkb2JqZWN0TWFuYWdlcjsgJHRoaXMtPl9hdHRyaWJ1dGVDb2xsZWN0aW9uRmFjdG9yeSA9ICRvYmplY3RNYW5hZ2VyLT5nZXQoJ01hZ2VudG9cQ2F0YWxvZ1xNb2RlbFxSZXNvdXJjZU1vZGVsXFByb2R1Y3RcQXR0cmlidXRlXENvbGxlY3Rpb25GYWN0b3J5Jyk7ICR0aGlzLT5fZHluYW1pY0F0dHJpYnV0ZUNvbGxlY3Rpb24gPSAkb2JqZWN0TWFuYWdlci0+Z2V0KCdHb01hZ2VcRmVlZFxNb2RlbFxSZXNvdXJjZU1vZGVsXEF0dHJpYnV0ZVxDb2xsZWN0aW9uJyk7ICRmaWxlc3lzdGVtID0gJG9iamVjdE1hbmFnZXItPmdldCgnTWFnZW50b1xGcmFtZXdvcmtcRmlsZXN5c3RlbScpOyAkdGhpcy0+X2RpcmVjdG9yeSA9ICRmaWxlc3lzdGVtLT5nZXREaXJlY3RvcnlSZWFkKERpcmVjdG9yeUxpc3Q6Ok1FRElBKTsgJHRoaXMtPl9zdG9yZU1hbmFnZXIgPSAkb2JqZWN0TWFuYWdlci0+Z2V0KCdNYWdlbnRvXFN0b3JlXE1vZGVsXFN0b3JlTWFuYWdlcicpOyAkdGhpcy0+X3N5c3RlbVN0b3JlID0gJG9iamVjdE1hbmFnZXItPmdldCgnTWFnZW50b1xTdG9yZVxNb2RlbFxTeXN0ZW1cU3RvcmUnKTsgJHRoaXMtPl9kYXRlVGltZSA9ICRvYmplY3RNYW5hZ2VyLT5nZXQoJ01hZ2VudG9cRnJhbWV3b3JrXFN0ZGxpYlxEYXRlVGltZVxEYXRlVGltZScpOyAkdGhpcy0+X21vZHVsZUxpc3QgPSAkb2JqZWN0TWFuYWdlci0+Z2V0KCdNYWdlbnRvXEZyYW1ld29ya1xNb2R1bGVcTW9kdWxlTGlzdCcpOyAkdGhpcy0+X2pzb25IZWxwZXIgPSAkb2JqZWN0TWFuYWdlci0+Z2V0KCdNYWdlbnRvXEZyYW1ld29ya1xKc29uXEhlbHBlclxEYXRhJyk7ICR0aGlzLT5fZW5jcnlwdG9yID0gJG9iamVjdE1hbmFnZXItPmdldCgnTWFnZW50b1xGcmFtZXdvcmtcRW5jcnlwdGlvblxFbmNyeXB0b3InKTsgJHRoaXMtPl9tYXBwZXJGYWN0b3J5ID0gJG9iamVjdE1hbmFnZXItPmdldCgnR29NYWdlXEZlZWRcTW9kZWxcTWFwcGVyXEZhY3RvcnknKTsgJHRoaXMtPl9zY29wZUNvbmZpZyA9ICRvYmplY3RNYW5hZ2VyLT5nZXQoJ01hZ2VudG9cRnJhbWV3b3JrXEFwcFxDb25maWcnKTsgfSAvKiogKiBAcmV0dXJuIGFycmF5ICovIHB1YmxpYyBmdW5jdGlvbiBnZXRQcm9kdWN0QXR0cmlidXRlcygpIHsgJGF0dHJpYnV0ZXMgPSAkdGhpcy0+X2F0dHJpYnV0ZUNvbGxlY3Rpb25GYWN0b3J5LT5jcmVhdGUoKS0+YWRkVmlzaWJsZUZpbHRlcigpLT5nZXRJdGVtcygpOyAkY3VzdG9tTWFwcGVycyA9ICR0aGlzLT5fbWFwcGVyRmFjdG9yeS0+Z2V0Q3VzdG9tTWFwcGVycygpOyBmb3JlYWNoICgkYXR0cmlidXRlcyBhcyAka2V5ID0+ICRhdHRyaWJ1dGUpIHsgaWYgKGlzc2V0KCRjdXN0b21NYXBwZXJzWyRhdHRyaWJ1dGUtPmdldEF0dHJpYnV0ZUNvZGUoKV0pKSB7IHVuc2V0KCRhdHRyaWJ1dGVzWyRrZXldKTsgfSB9ICRhdHRyaWJ1dGVzID0gYXJyYXlfbWFwKGZ1bmN0aW9uICgkYXR0cmlidXRlKSB7IHJldHVybiBbICd2YWx1ZScgPT4gJGF0dHJpYnV0ZS0+Z2V0QXR0cmlidXRlQ29kZSgpLCAnbGFiZWwnID0+ICRhdHRyaWJ1dGUtPmdldFN0b3JlTGFiZWwoKSBdOyB9LCAkYXR0cmlidXRlcyApOyBmb3JlYWNoICgkY3VzdG9tTWFwcGVycyBhcyAkdmFsdWUgPT4gJGNsYXNzKSB7ICRhdHRyaWJ1dGVzW10gPSBbICd2YWx1ZScgPT4gJHZhbHVlLCAnbGFiZWwnID0+ICRjbGFzczo6Z2V0TGFiZWwoKSBdOyB9IHVzb3J0KCRhdHRyaWJ1dGVzLCBmdW5jdGlvbiAoJGEsICRiKSB7IHJldHVybiBzdHJjbXAoJGFbJ2xhYmVsJ10sICRiWydsYWJlbCddKTsgfSApOyByZXR1cm4gJGF0dHJpYnV0ZXM7IH0gLyoqICogQHJldHVybiBhcnJheSAqLyBwdWJsaWMgZnVuY3Rpb24gZ2V0RHluYW1pY0F0dHJpYnV0ZXMoKSB7ICRhdHRyaWJ1dGVzID0gJHRoaXMtPl9keW5hbWljQXR0cmlidXRlQ29sbGVjdGlvbi0+bG9hZCgpLT5nZXRJdGVtcygpOyAkYXR0cmlidXRlcyA9IGFycmF5X21hcChmdW5jdGlvbiAoXEdvTWFnZVxGZWVkXE1vZGVsXEF0dHJpYnV0ZSAkYXR0cmlidXRlKSB7IHJldHVybiBbICd2YWx1ZScgPT4gJGF0dHJpYnV0ZS0+Z2V0Q29kZSgpLCAnbGFiZWwnID0+ICRhdHRyaWJ1dGUtPmdldE5hbWUoKSBdOyB9LCAkYXR0cmlidXRlcyApOyB1c29ydCgkYXR0cmlidXRlcywgZnVuY3Rpb24gKCRhLCAkYikgeyByZXR1cm4gc3RyY21wKCRhWydsYWJlbCddLCAkYlsnbGFiZWwnXSk7IH0gKTsgcmV0dXJuICRhdHRyaWJ1dGVzOyB9IC8qKiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lICogQHBhcmFtIGludCAkc3RvcmVJZCAqIEByZXR1cm4gc3RyaW5nICovIHB1YmxpYyBmdW5jdGlvbiBnZXRGZWVkVXJsKCRmaWxlTmFtZSA9ICcnLCAkc3RvcmVJZCA9IDApIHsgaWYgKCRmaWxlTmFtZSAmJiAkc3RvcmVJZCkgeyAkcGF0aCA9ICR0aGlzLT5nZXRGZWVkUGF0aCgkZmlsZU5hbWUpOyBpZiAoJHBhdGgpIHsgcmV0dXJuICR0aGlzLT5fc3RvcmVNYW5hZ2VyLT5nZXRTdG9yZSgkc3RvcmVJZCktPmdldEJhc2VVcmwoIFxNYWdlbnRvXEZyYW1ld29ya1xVcmxJbnRlcmZhY2U6OlVSTF9UWVBFX01FRElBICkgLiAkcGF0aDsgfSB9IHJldHVybiAnJzsgfSAvKiogKiBAcGFyYW0gc3RyaW5nICRmaWxlTmFtZSAqIEByZXR1cm4gc3RyaW5nICovIHB1YmxpYyBmdW5jdGlvbiBnZXRGZWVkUGF0aCgkZmlsZU5hbWUsICRhYnNvbHV0ZSA9IGZhbHNlKSB7ICRwYXRoID0gXEdvTWFnZVxGZWVkXE1vZGVsXFdyaXRlclxXcml0ZXJJbnRlcmZhY2U6OkRJUkVDVE9SWSAuICcvJyAuICRmaWxlTmFtZTsgaWYgKCR0aGlzLT5fZGlyZWN0b3J5LT5pc0V4aXN0KCRwYXRoKSkgeyByZXR1cm4gJGFic29sdXRlID8gJHRoaXMtPl9kaXJlY3RvcnktPmdldEFic29sdXRlUGF0aCgkcGF0aCkgOiAkcGF0aDsgfSByZXR1cm4gJyc7IH0gLyoqICogQHBhcmFtIGludCAkaW50ZXJ2YWwgKiBAcGFyYW0gaW50ICRob3VyRnJvbSAqIEBwYXJhbSBpbnQgJGhvdXJUbyAqIEBwYXJhbSBzdHJpbmcgJGxhc3RSdW4gKiBAcmV0dXJuIGJvb2wgKi8gcHVibGljIGZ1bmN0aW9uIG5lZWRSdW5Dcm9uKCRpbnRlcnZhbCwgJGhvdXJGcm9tLCAkaG91clRvLCAkbGFzdFJ1bikgeyAkY3VycmVudCA9ICR0aGlzLT5fZGF0ZVRpbWUtPmdtdERhdGUoJ0cnKTsgJGxhc3RSdW4gPSAkbGFzdFJ1biA/ICR0aGlzLT5fZGF0ZVRpbWUtPmdtdFRpbWVzdGFtcCgkbGFzdFJ1bikgOiAwOyBzd2l0Y2ggKCRpbnRlcnZhbCkgeyBjYXNlIDEyOiBjYXNlIDI0OiBpZiAoJGhvdXJGcm9tICE9ICRjdXJyZW50KSB7IHJldHVybiBmYWxzZTsgfSBpZiAoKCRsYXN0UnVuICsgJGludGVydmFsICogNjAgKiA2MCkgPiAkdGhpcy0+X2RhdGVUaW1lLT5nbXRUaW1lc3RhbXAoKSkgeyByZXR1cm4gZmFsc2U7IH0gYnJlYWs7IGRlZmF1bHQ6IGlmICghJGhvdXJUbykgeyAkaG91clRvID0gMjQ7IH0gJGhvdXJzID0gW107IGlmICgkaG91ckZyb20gPiAkaG91clRvKSB7IGZvciAoJGkgPSAkaG91ckZyb207ICRpIDw9IDIzOyAkaSsrKSB7ICRob3Vyc1tdID0gJGk7IH0gZm9yICgkaSA9IDA7ICRpIDw9ICRob3VyVG87ICRpKyspIHsgJGhvdXJzW10gPSAkaTsgfSB9IGVsc2UgeyBmb3IgKCRpID0gJGhvdXJGcm9tOyAkaSA8PSAkaG91clRvOyAkaSsrKSB7IGlmICgkaSA9PSAyNCkgeyAkaG91cnNbXSA9IDA7IH0gZWxzZSB7ICRob3Vyc1tdID0gJGk7IH0gfSB9IGlmICghaW5fYXJyYXkoJGN1cnJlbnQsICRob3VycykpIHsgcmV0dXJuIGZhbHNlOyB9IGlmICgoJGxhc3RSdW4gKyAkaW50ZXJ2YWwgKiA2MCAqIDYwKSA+ICR0aGlzLT5fZGF0ZVRpbWUtPmdtdFRpbWVzdGFtcCgpKSB7IHJldHVybiBmYWxzZTsgfSB9IHJldHVybiB0cnVlOyB9IC8qKiAqIEByZXR1cm4gYXJyYXkgKi8gcHVibGljIGZ1bmN0aW9uIGdldEF2YWlsYWJsZVdlYnNpdGVzKCkgeyBpZiAoISR0aGlzLT5fc2NvcGVDb25maWctPmdldFZhbHVlKCdnb21hZ2VfYWN0aXZhdGlvbi9mZWVkL2luc3RhbGxlZCcpIHx8IChpbnR2YWwoJHRoaXMtPl9zY29wZUNvbmZpZy0+Z2V0VmFsdWUoJ2dvbWFnZV9hY3RpdmF0aW9uL2ZlZWQvY291bnQnKSkgPiAxMCkgKSB7IHJldHVybiBbXTsgfSAkdGltZV90b191cGRhdGUgPSA2MCAqIDYwICogMjQgKiAxNTsgJHIgPSAkdGhpcy0+X3Njb3BlQ29uZmlnLT5nZXRWYWx1ZSgnZ29tYWdlX2FjdGl2YXRpb24vZmVlZC9hcicpOyAkdCA9ICR0aGlzLT5fc2NvcGVDb25maWctPmdldFZhbHVlKCdnb21hZ2VfYWN0aXZhdGlvbi9mZWVkL3RpbWUnKTsgJHMgPSAkdGhpcy0+X3Njb3BlQ29uZmlnLT5nZXRWYWx1ZSgnZ29tYWdlX2FjdGl2YXRpb24vZmVlZC93ZWJzaXRlcycpOyAkbGFzdF9jaGVjayA9IHN0cl9yZXBsYWNlKCRyLCAnJywgJHRoaXMtPl9lbmNyeXB0b3ItPmRlY3J5cHQoJHQpKTsgJHNpdGVzID0gZXhwbG9kZSgnLCcsIHN0cl9yZXBsYWNlKCRyLCAnJywgJHRoaXMtPl9lbmNyeXB0b3ItPmRlY3J5cHQoJHMpKSk7ICRzaXRlcyA9IGFycmF5X2RpZmYoJHNpdGVzLCBbJyddKTsgaWYgKCgkbGFzdF9jaGVjayArICR0aW1lX3RvX3VwZGF0ZSkgPCAkdGhpcy0+X2RhdGVUaW1lLT5nbXRUaW1lc3RhbXAoKSkgeyAkdGhpcy0+YSgoaW50KSR0aGlzLT5fc2NvcGVDb25maWctPmdldFZhbHVlKCdnb21hZ2VfYWN0aXZhdGlvbi9mZWVkL2NvdW50JyksIGltcGxvZGUoJywnLCAkc2l0ZXMpICk7IH0gcmV0dXJuICRzaXRlczsgfSBwdWJsaWMgZnVuY3Rpb24gYSgkYyA9IDAsICRzID0gJycpIHsgJGsgPSAkdGhpcy0+X3Njb3BlQ29uZmlnLT5nZXRWYWx1ZSgnZ29tYWdlX3NldHRpbmdzL2ZlZWQva2V5Jyk7IC8qKiBAdmFyIFxNYWdlbnRvXENvbmZpZ1xNb2RlbFxDb25maWcgJGNvbmZpZyAqLyAkY29uZmlnID0gJHRoaXMtPl9vYmplY3RNYW5hZ2VyLT5jcmVhdGUoJ01hZ2VudG9cQ29uZmlnXE1vZGVsXENvbmZpZycpOyAkY2ggPSBjdXJsX2luaXQoKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgc3ByaW50ZignaHR0cHM6Ly93d3cuZ29tYWdlLmNvbS9pbmRleC5waHAvZ29tYWdlX2Rvd25sb2FkYWJsZS9rZXkvY2hlY2snKSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCB0cnVlKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICdrZXk9JyAuIHVybGVuY29kZSgkaykgLiAnJnNrdT1mZWVkLXByby1tMiZkb21haW5zPScgLiB1cmxlbmNvZGUoaW1wbG9kZSgnLCcsICR0aGlzLT5fZ2V0RG9tYWlucygpKSkgLiAnJnZlcj0nIC4gdXJsZW5jb2RlKCR0aGlzLT5fZ2V0VmVyc2lvbigpKSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCAzMCk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMCk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMCk7ICRjb250ZW50ID0gY3VybF9leGVjKCRjaCk7IHRyeSB7ICRyID0gJHRoaXMtPl9qc29uSGVscGVyLT5qc29uRGVjb2RlKCRjb250ZW50KTsgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgeyAkciA9IFtdOyB9IGlmIChlbXB0eSgkcikpIHsgJHZhbHVlMSA9ICR0aGlzLT5fc2NvcGVDb25maWctPmdldFZhbHVlKCdnb21hZ2VfYWN0aXZhdGlvbi9mZWVkL2FyJyk7ICRncm91cHMgPSBbICdmZWVkJyA9PiBbICdmaWVsZHMnID0+IFsgJ2FyJyA9PiBbJ3ZhbHVlJyA9PiAkdmFsdWUxXSwgJ3dlYnNpdGVzJyA9PiBbICd2YWx1ZScgPT4gKHN0cmluZykkdGhpcy0+X3Njb3BlQ29uZmlnLT5nZXRWYWx1ZSgnZ29tYWdlX2FjdGl2YXRpb24vZmVlZC93ZWJzaXRlcycpIF0sICd0aW1lJyA9PiBbICd2YWx1ZScgPT4gKHN0cmluZykkdGhpcy0+X2VuY3J5cHRvci0+ZW5jcnlwdCgkdmFsdWUxIC4gKCR0aGlzLT5fZGF0ZVRpbWUtPmdtdFRpbWVzdGFtcCgpIC0gKDYwICogNjAgKiAyNCAqIDE1IC0gMTgwMCkpIC4gJHZhbHVlMSkgXSwgJ2NvdW50JyA9PiBbJ3ZhbHVlJyA9PiAkYyArIDFdIF0gXSBdOyAkY29uZmlnLT5zZXRTZWN0aW9uKCdnb21hZ2VfYWN0aXZhdGlvbicpIC0+c2V0R3JvdXBzKCRncm91cHMpIC0+c2F2ZSgpOyByZXR1cm47IH0gJHZhbHVlMSA9ICcnOyAkdmFsdWUyID0gJyc7IGlmIChpc3NldCgkclsnZCddKSAmJiBpc3NldCgkclsnYyddKSkgeyAkdmFsdWUxID0gJHRoaXMtPl9lbmNyeXB0b3ItPmVuY3J5cHQoYmFzZTY0X2VuY29kZSgkdGhpcy0+X2pzb25IZWxwZXItPmpzb25FbmNvZGUoJHIpKSk7IGlmICghJHMpIHsgJHMgPSAkdGhpcy0+X3Njb3BlQ29uZmlnLT5nZXRWYWx1ZSgnZ29tYWdlX3NldHRpbmdzL2ZlZWQvd2Vic2l0ZXMnKTsgfSAkcyA9IGFycmF5X3NsaWNlKGV4cGxvZGUoJywnLCAkcyksIDAsICRyWydjJ10pOyAkdmFsdWUyID0gJHRoaXMtPl9lbmNyeXB0b3ItPmVuY3J5cHQoJHZhbHVlMSAuIGltcGxvZGUoJywnLCAkcykgLiAkdmFsdWUxKTsgfSAkZ3JvdXBzID0gWyAnZmVlZCcgPT4gWyAnZmllbGRzJyA9PiBbICdhcicgPT4gWyd2YWx1ZScgPT4gJHZhbHVlMV0sICd3ZWJzaXRlcycgPT4gWyd2YWx1ZScgPT4gKHN0cmluZykkdmFsdWUyXSwgJ3RpbWUnID0+IFsgJ3ZhbHVlJyA9PiAoc3RyaW5nKSR0aGlzLT5fZW5jcnlwdG9yLT5lbmNyeXB0KCR2YWx1ZTEgLiAkdGhpcy0+X2RhdGVUaW1lLT5nbXRUaW1lc3RhbXAoKSAuICR2YWx1ZTEpIF0sICdpbnN0YWxsZWQnID0+IFsndmFsdWUnID0+IDFdLCAnY291bnQnID0+IFsndmFsdWUnID0+IDBdIF0gXSBdOyAkY29uZmlnLT5zZXRTZWN0aW9uKCdnb21hZ2VfYWN0aXZhdGlvbicpIC0+c2V0R3JvdXBzKCRncm91cHMpIC0+c2F2ZSgpOyB9IC8qKiAqIEByZXR1cm4gbWl4ZWQgKi8gcHVibGljIGZ1bmN0aW9uIGdhKCkgeyAkdmFsdWUgPSBiYXNlNjRfZGVjb2RlKCR0aGlzLT5fZW5jcnlwdG9yLT5kZWNyeXB0KCR0aGlzLT5fc2NvcGVDb25maWctPmdldFZhbHVlKCdnb21hZ2VfYWN0aXZhdGlvbi9mZWVkL2FyJykpKTsgaWYgKCR2YWx1ZSkgeyByZXR1cm4gJHRoaXMtPl9qc29uSGVscGVyLT5qc29uRGVjb2RlKCR2YWx1ZSk7IH0gcmV0dXJuIFtdOyB9IC8qKiAqIEByZXR1cm4gYXJyYXkgKi8gcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0RG9tYWlucygpIHsgJGRvbWFpbnMgPSBbXTsgLyoqIEB2YXIgXE1hZ2VudG9cU3RvcmVcTW9kZWxcV2Vic2l0ZSAkd2Vic2l0ZSAqLyBmb3JlYWNoICgkdGhpcy0+X3N0b3JlTWFuYWdlci0+Z2V0V2Vic2l0ZXMoKSBhcyAkd2Vic2l0ZSkgeyAkdXJsID0gJHdlYnNpdGUtPmdldENvbmZpZygnd2ViL3Vuc2VjdXJlL2Jhc2VfdXJsJyk7IGlmICgkZG9tYWluID0gdHJpbShwcmVnX3JlcGxhY2UoJy9eLio/XFwvXFwvKC4qKT9cXC8vJywgJyQxJywgJHVybCkpKSB7ICRkb21haW5zW10gPSAkZG9tYWluOyB9ICR1cmwgPSAkd2Vic2l0ZS0+Z2V0Q29uZmlnKCd3ZWIvc2VjdXJlL2Jhc2VfdXJsJyk7IGlmICgkZG9tYWluID0gdHJpbShwcmVnX3JlcGxhY2UoJy9eLio/XFwvXFwvKC4qKT9cXC8vJywgJyQxJywgJHVybCkpKSB7ICRkb21haW5zW10gPSAkZG9tYWluOyB9IH0gcmV0dXJuIGFycmF5X3VuaXF1ZSgkZG9tYWlucyk7IH0gLyoqICogQHJldHVybiBzdHJpbmcgKi8gcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0VmVyc2lvbigpIHsgcmV0dXJuICR0aGlzLT5fbW9kdWxlTGlzdC0+Z2V0T25lKCdHb01hZ2VfRmVlZCcpWydzZXR1cF92ZXJzaW9uJ107IH0gLyoqICogQHJldHVybiBhcnJheSAqLyBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RvcmVPcHRpb25BcnJheSgpIHsgJG9wdGlvbnMgPSBbXTsgJG9wdGlvbnNbXSA9IFsnbGFiZWwnID0+ICcnLCAndmFsdWUnID0+ICcnXTsgJHdlYnNpdGVzID0gJHRoaXMtPmdldEF2YWlsYWJsZVdlYnNpdGVzKCk7ICRub25Fc2NhcGFibGVOYnNwQ2hhciA9IGh0bWxfZW50aXR5X2RlY29kZSgnJiMxNjA7JywgRU5UX05PUVVPVEVTLCAnVVRGLTgnKTsgZm9yZWFjaCAoJHRoaXMtPl9zeXN0ZW1TdG9yZS0+Z2V0V2Vic2l0ZUNvbGxlY3Rpb24oKSBhcyAkd2Vic2l0ZSkgeyBpZiAoIWluX2FycmF5KCR3ZWJzaXRlLT5nZXRJZCgpLCAkd2Vic2l0ZXMpKSB7IGNvbnRpbnVlOyB9ICR3ZWJzaXRlU2hvdyA9IGZhbHNlOyBmb3JlYWNoICgkdGhpcy0+X3N5c3RlbVN0b3JlLT5nZXRHcm91cENvbGxlY3Rpb24oKSBhcyAkZ3JvdXApIHsgaWYgKCR3ZWJzaXRlLT5nZXRJZCgpICE9ICRncm91cC0+Z2V0V2Vic2l0ZUlkKCkpIHsgY29udGludWU7IH0gJGdyb3VwU2hvdyA9IGZhbHNlOyBmb3JlYWNoICgkdGhpcy0+X3N5c3RlbVN0b3JlLT5nZXRTdG9yZUNvbGxlY3Rpb24oKSBhcyAkc3RvcmUpIHsgaWYgKCRncm91cC0+Z2V0SWQoKSAhPSAkc3RvcmUtPmdldEdyb3VwSWQoKSkgeyBjb250aW51ZTsgfSBpZiAoISR3ZWJzaXRlU2hvdykgeyAkb3B0aW9uc1tdID0gWydsYWJlbCcgPT4gJHdlYnNpdGUtPmdldE5hbWUoKSwgJ3ZhbHVlJyA9PiBbXV07ICR3ZWJzaXRlU2hvdyA9IHRydWU7IH0gaWYgKCEkZ3JvdXBTaG93KSB7ICRncm91cFNob3cgPSB0cnVlOyAkdmFsdWVzID0gW107IH0gJHZhbHVlc1tdID0gWyAnbGFiZWwnID0+IHN0cl9yZXBlYXQoJG5vbkVzY2FwYWJsZU5ic3BDaGFyLCA0KSAuICRzdG9yZS0+Z2V0TmFtZSgpLCAndmFsdWUnID0+ICRzdG9yZS0+Z2V0SWQoKSwgXTsgfSBpZiAoJGdyb3VwU2hvdykgeyAkb3B0aW9uc1tdID0gWyAnbGFiZWwnID0+IHN0cl9yZXBlYXQoJG5vbkVzY2FwYWJsZU5ic3BDaGFyLCA0KSAuICRncm91cC0+Z2V0TmFtZSgpLCAndmFsdWUnID0+ICR2YWx1ZXMsIF07IH0gfSB9IHJldHVybiAkb3B0aW9uczsgfSBwdWJsaWMgZnVuY3Rpb24gbm90aWZ5KCkgeyAkZnJlcXVlbmN5ID0gKGludCkkdGhpcy0+X3Njb3BlQ29uZmlnLT5nZXRWYWx1ZSgnZ29tYWdlX25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24vZnJlcXVlbmN5Jyk7IGlmICghJGZyZXF1ZW5jeSkgeyAkZnJlcXVlbmN5ID0gMjQ7IH0gJGxhc3RfdXBkYXRlID0gKGludCkkdGhpcy0+X3Njb3BlQ29uZmlnLT5nZXRWYWx1ZSgnZ29tYWdlX25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24vbGFzdF91cGRhdGUnKTsgaWYgKCgkZnJlcXVlbmN5ICogNjAgKiA2MCArICRsYXN0X3VwZGF0ZSkgPiAkdGhpcy0+X2RhdGVUaW1lLT5nbXRUaW1lc3RhbXAoKSkgeyByZXR1cm4gZmFsc2U7IH0gJHRpbWVzdGFtcCA9ICRsYXN0X3VwZGF0ZTsgaWYgKCEkdGltZXN0YW1wKSB7ICR0aW1lc3RhbXAgPSAkdGhpcy0+X2RhdGVUaW1lLT5nbXRUaW1lc3RhbXAoKTsgfSB0cnkgeyAkY2ggPSBjdXJsX2luaXQoKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgc3ByaW50ZignaHR0cHM6Ly93d3cuZ29tYWdlLmNvbS9pbmRleC5waHAvZ29tYWdlX25vdGlmaWNhdGlvbi9pbmRleC9kYXRhJykpOyBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVCwgdHJ1ZSk7IGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAnc2t1PWZlZWQtcHJvLW0yJnRpbWVzdGFtcD0nIC4gJHRpbWVzdGFtcCAuICcmdmVyPScgLiB1cmxlbmNvZGUoJHRoaXMtPl9nZXRWZXJzaW9uKCkpKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1RJTUVPVVQsIDMwKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAwKTsgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwKTsgJGNvbnRlbnQgPSBjdXJsX2V4ZWMoJGNoKTsgdHJ5IHsgJHJlc3VsdCA9ICR0aGlzLT5fanNvbkhlbHBlci0+anNvbkRlY29kZSgkY29udGVudCk7IH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsgJHJlc3VsdCA9IGZhbHNlOyB9IGlmICgkcmVzdWx0ICYmIGlzc2V0KCRyZXN1bHRbJ2ZyZXF1ZW5jeSddKSAmJiAoJHJlc3VsdFsnZnJlcXVlbmN5J10gIT0gJGZyZXF1ZW5jeSkpIHsgJGZyZXF1ZW5jeSA9ICRyZXN1bHRbJ2ZyZXF1ZW5jeSddOyB9IGlmICgkcmVzdWx0ICYmIGlzc2V0KCRyZXN1bHRbJ2RhdGEnXSkpIHsgaWYgKCFlbXB0eSgkcmVzdWx0WydkYXRhJ10pKSB7IC8qKiBAdmFyIFxNYWdlbnRvXEFkbWluTm90aWZpY2F0aW9uXE1vZGVsXEluYm94ICRpbmJveCAqLyAkaW5ib3ggPSAkdGhpcy0+X29iamVjdE1hbmFnZXItPmNyZWF0ZSgnTWFnZW50b1xBZG1pbk5vdGlmaWNhdGlvblxNb2RlbFxJbmJveCcpOyAkaW5ib3gtPnBhcnNlKCRyZXN1bHRbJ2RhdGEnXSk7IH0gfSB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7IH0gJGdyb3VwcyA9IFsgJ25vdGlmaWNhdGlvbicgPT4gWyAnZmllbGRzJyA9PiBbICdmcmVxdWVuY3knID0+IFsndmFsdWUnID0+ICRmcmVxdWVuY3ldLCAnbGFzdF91cGRhdGUnID0+IFsndmFsdWUnID0+ICR0aGlzLT5fZGF0ZVRpbWUtPmdtdFRpbWVzdGFtcCgpXSBdIF0gXTsgLyoqIEB2YXIgXE1hZ2VudG9cQ29uZmlnXE1vZGVsXENvbmZpZyAkY29uZmlnICovICRjb25maWcgPSAkdGhpcy0+X29iamVjdE1hbmFnZXItPmNyZWF0ZSgnTWFnZW50b1xDb25maWdcTW9kZWxcQ29uZmlnJyk7ICRjb25maWctPnNldFNlY3Rpb24oJ2dvbWFnZV9ub3RpZmljYXRpb24nKSAtPnNldEdyb3VwcygkZ3JvdXBzKSAtPnNhdmUoKTsgfSB9"));

Function Calls

base64_decode 1

Variables

None

Stats

MD5 d6dad207859ac02ddf072b433e3c7b60
Eval Count 1
Decode Time 89 ms