public function testGetInstance()
 {
     $instance = Mixpanel::getInstance("token");
     $this->assertInstanceOf("Mixpanel", $instance);
     $this->assertEquals($this->_instance, $instance);
     $this->assertInstanceOf("Producers_MixpanelPeople", $this->_instance->people);
 }
Example #2
0
 /**
  * Call any method of the Mixpanel class
  * @param string $method_name
  * @param mixed $args
  * @return mixed
  */
 public function __call($method_name, $args)
 {
     if (!$this->is_enabled()) {
         return false;
     }
     return call_user_func_array(array(Mixpanel::getInstance($this->_key, $this->_options), $method_name), $args);
 }
Example #3
0
function smarty_function_mixpanel($params, Smarty_Internal_Template $template)
{
    $params += array('script' => 'head');
    if ($params['script'] == 'head') {
        return Mixpanel::head_script();
    }
    return Mixpanel::body_script();
}
Example #4
0
 private function initMxPanel()
 {
     if ($this->mp) {
         return;
     }
     require_once dirname(__FILE__) . '/lib/mixpanel/Mixpanel.php';
     $this->mp = Mixpanel::getInstance($this->mixpanel_token, array('use_ssl' => false));
 }
Example #5
0
 function track($event, $data)
 {
     if (file_exists(realpath(dirname(__FILE__)) . '/mixpanel/Mixpanel.php')) {
         require_once realpath(dirname(__FILE__)) . '/mixpanel/Mixpanel.php';
         $mp = Mixpanel::getInstance("965556434c5ae652a44f24b85b442263");
         $domain = str_replace("http://", "", $_SERVER["SERVER_NAME"]);
         $mp->track($event, $data);
     }
 }
Example #6
0
/**
 * Tracks an event using the Mixpanel API if the user opted into tracking.
 * Example: dh_ptp_track_event("add to cart clicked", array("label" => "sign-up"));
 * 
 * @param  string $dh_ptp_event      [The name of the event that is being fired.]
 * @param  array $dh_ptp_properties  [Additional properties to track. (optional)]
 */
function dh_ptp_track_event($dh_ptp_event, $dh_ptp_properties = array())
{
    // only track events if the user agreed
    $dh_ptp_usage_tracking = get_option('dh_ptp_allow_tracking');
    if ($dh_ptp_usage_tracking == 'yes') {
        // get the Mixpanel class instance
        $mp = Mixpanel::getInstance("1064083f4aaf3eed31d0fdf1c308365c");
        // Set user id: site url =  (url + site name) encoded
        $user_id = base64_encode(site_url() . ' ' . get_bloginfo('name'));
        // associate user to all subsequent track calls
        $mp->identify($user_id);
        // track the event
        $mp->track($dh_ptp_event, $dh_ptp_properties);
    }
}
 /**
  * @param string $event
  * @param array  $properties
  *
  * @internal param array $data
  */
 public function track($event, $properties = [])
 {
     $browserInfo = new Browser();
     $osInfo = new Os();
     $deviceInfo = new Device();
     $browserVersion = trim(str_replace('unknown', '', $browserInfo->getName() . ' ' . $browserInfo->getVersion()));
     $osVersion = trim(str_replace('unknown', '', $osInfo->getName() . ' ' . $osInfo->getVersion()));
     $hardwareVersion = trim(str_replace('unknown', '', $deviceInfo->getName()));
     $data = ['Url' => $this->request->getUri(), 'Operating System' => $osVersion, 'Hardware' => $hardwareVersion, '$browser' => $browserVersion, 'Referrer' => $this->request->header('referer'), '$referring_domain' => $this->request->header('referer') ? parse_url($this->request->header('referer'))['host'] : null, 'ip' => $this->request->ip()];
     $data = array_filter($data);
     $properties = array_filter($properties);
     if (!array_key_exists('$browser', $data) && $browserInfo->isRobot()) {
         $data['$browser'] = 'Robot';
     }
     parent::track($event, $data + $properties);
 }
Example #8
0
 function processLenderInvite($invitee, $lender_invite_visit)
 {
     global $database;
     $lender_invite = array();
     if ($lender_invite_visit['lender_invite_id']) {
         $lender_invite = $database->getLenderInviteById($lender_invite_visit['lender_invite_id']);
         if (!$lender_invite) {
             return false;
         }
     }
     for ($retry = 0; $retry < 3; $retry++) {
         $database->startDbTxn();
         $amount = 25;
         if ($lender_invite) {
             $res1 = $database->updateLenderInvite($lender_invite['id'], $invitee['userid']);
         } else {
             $lender_invite = $database->addLenderInvite(array('lender_id' => $lender_invite_visit['lender_id'], 'email' => $invitee['Email'], 'invitee_id' => $invitee['userid'], 'hash' => null));
             $res1 = $lender_invite !== false;
         }
         $res2 = $database->setLenderInviteTransaction($lender_invite['lender_id'], $amount, 'Lender invite credit', LENDER_INVITE_INVITER);
         $res3 = $database->setLenderInviteTransaction($invitee['userid'], $amount, 'Lender invitee credit', LENDER_INVITE_INVITEE);
         if ($res1 && $res2 && $res3) {
             $database->commitTxn();
             $lender = $database->getLenderDetails($lender_invite['lender_id']);
             if ($lender['invite_notify']) {
                 $this->sendLenderInviteCredit($lender_invite);
             }
             Mixpanel::track('Invite accepted', array('username' => $invitee['username'], 'email' => $lender_invite['email'], 'lender_id' => $lender_invite['lender_id']));
             $mixpanel = MixpanelClient::getInstance(MIXPANEL_TOKEN);
             $mixpanel->identify($lender_invite['lender_id']);
             $share_type = $lender_invite_visit['share_type'];
             $share_types = array(1 => 'email', 2 => 'twitter', 3 => 'facebook');
             $mixpanel->track('Recruited new lender', array('share_type' => array_get($share_types, $share_type, 'website'), 'lender_id' => $lender_invite['lender_id'], 'invitee_id' => $lender_invite['invitee_id']));
             $mixpanel->people->set($lender_invite['lender_id'], array('Recruited new lender' => date('Y-m-d H:i:s')), '0');
             $mixpanel->people->increment($lender_invite['lender_id'], 'Recruited new lender counter', 1, '0');
             return $lender_invite;
         } else {
             $database->rollbackTxn();
         }
     }
     return false;
 }
Example #9
0
if (!IS_LOCALHOST) {
    ?>
    // Google Analytics code 
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-23722503-1']);
    _gaq.push(['_trackPageview']);

    (function() {
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();

    // SiftScience code
    var _user_id = "<?php 
    echo $session->userid;
    ?>
"; // TODO: Set to the user's ID, username, email address, or '' if not yet known
    var _sift = _sift || []; _sift.push(['_setAccount', '946aa02e41']); _sift.push(['_setUserId', _user_id]); _sift.push(['_trackPageview']); (function() { function ls() { var e = document.createElement('script'); e.type = 'text/javascript'; e.async = true; e.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'cdn.siftscience.com/s.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(e, s); } if (window.attachEvent) { window.attachEvent('onload', ls); } else { window.addEventListener('load', ls, false); }})();
    <?php 
}
?>
  </script>

  <!-- Optimizely code -->
  <script src="//cdn.optimizely.com/js/595240679.js"></script>

  <!-- Mixpanel --> 
  <?php 
echo Mixpanel::head_script();
            $param_query .= '&' . urlencode($param) . '=' . urlencode($value);
        }
        $sig = $this->signature($params);
        $uri = '/' . $this->version . '/' . join('/', $methods) . '/';
        $request_url = $uri . '?sig=' . $sig . $param_query;
        $curl_handle = curl_init();
        curl_setopt($curl_handle, CURLOPT_URL, $this->api_url . $request_url);
        curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
        curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($curl_handle);
        curl_close($curl_handle);
        return json_decode($data);
    }
    private function signature($params)
    {
        ksort($params);
        $param_string = '';
        foreach ($params as $param => $value) {
            $param_string .= $param . '=' . $value;
        }
        return md5($param_string . $this->api_secret);
    }
}
// Example usage
$api_key = '8955dfc608f1d008ed87e9cea0aa6fe2';
$api_secret = '82238657c11cbe8f8f960a4218f1d3c7';
//
$mp = new Mixpanel($api_key, $api_secret);
$data = $mp->request(array('export'), array("from_date" => "2013-01-01", "to_date" => "2015-09-10"));
//
var_dump($data);
function ml_track_mixpanel($action)
{
    if (function_exists(base64_decode('Y3VybF92ZXJzaW9u'))) {
        $mp = Mixpanel::getInstance(base64_decode('M2U3Y2MzOGEwYWJlNGVhM2ExNmEwZTc1MzgxNDRmMjM='));
        $mp->track($action);
    }
}
Example #12
0
 /**
  * @param array $options
  */
 public function __construct(array $options = [])
 {
     $options = array_merge($this->defaults, $options);
     parent::__construct(config('services.mixpanel.token'), $options);
 }
/**
 * Track plugin activity in MixPanel
 *
 * @param   string
 *
 * @return  array
 */
function inboundrocket_track_plugin_activity($activity_desc, $custom_properties = array())
{
    if (!function_exists('curl_init')) {
        return false;
    }
    $inboundrocket_user = inboundrocket_get_current_user();
    global $wp_version;
    global $current_user;
    get_currentuserinfo();
    $user_id = md5(get_site_url());
    $plugins = wp_get_active_and_valid_plugins();
    $default_properties = array("distinct_id" => $user_id, '$wp-url' => get_site_url(), '$wp-version' => $wp_version, '$ir-version' => INBOUNDROCKET_PLUGIN_VERSION, '$wp-plugins' => $plugins);
    $properties = array_merge((array) $default_properties, (array) $custom_properties);
    $mp = Mixpanel::getInstance(INBOUNDROCKET_MIXPANEL_PROJECT_TOKEN, array("debug" => true));
    $mp->track($activity_desc, $properties);
    return true;
}
Example #14
0
 /**
  * Returns a singleton instance of Mixpanel
  * @param $token
  * @param array $options
  * @return Mixpanel
  */
 public static function getInstance($token, $options = array())
 {
     if (!isset(self::$_instance)) {
         self::$_instance = new Mixpanel($token, $options);
     }
     return self::$_instance;
 }
Example #15
0
 function processLenderInvite($invitee, $lender_invite_visit)
 {
     global $database;
     $lender_invite = array();
     if ($lender_invite_visit['lender_invite_id']) {
         $lender_invite = $database->getLenderInviteById($lender_invite_visit['lender_invite_id']);
         if (!$lender_invite) {
             return false;
         }
     }
     for ($retry = 0; $retry < 3; $retry++) {
         $database->startDbTxn();
         $amount = 25;
         if ($lender_invite) {
             $res1 = $database->updateLenderInvite($lender_invite['id'], $invitee['userid']);
         } else {
             $lender_invite = $database->addLenderInvite(array('lender_id' => $lender_invite_visit['lender_id'], 'email' => $invitee['Email'], 'invitee_id' => $invitee['userid'], 'hash' => null));
             $res1 = $lender_invite !== false;
         }
         $res2 = $database->setLenderInviteTransaction($lender_invite['lender_id'], $amount, 'Lender invite credit', LENDER_INVITE_INVITER);
         $res3 = $database->setLenderInviteTransaction($invitee['userid'], $amount, 'Lender invitee credit', LENDER_INVITE_INVITEE);
         if ($res1 && $res2 && $res3) {
             $database->commitTxn();
             $this->sendLenderInviteCredit($lender_invite);
             Mixpanel::track('Invite accepted', array('username' => $invitee['username'], 'email' => $lender_invite['email'], 'lender_id' => $lender_invite['lender_id']));
             return $lender_invite;
         } else {
             $database->rollbackTxn();
         }
     }
     return false;
 }
Example #16
0
</div> <!-- .row -->
</div> <!-- /container -->

<?php 
include 'includes/_new_footer.php';
?>

<!-- 30-10-2012 Anupam, Google Code for Remarketing tag -->
<!-- Remarketing tags may not be associated with personally identifiable information or placed on pages related to sensitive categories. For instructions on adding this tag and more information on the above requirements, read the setup guide: google.com/ads/remarketingsetup -->
<script type="text/javascript">
    /* <![CDATA[ */
    var google_conversion_id = 1005464495;
    var google_conversion_label = "KMo7CNGm6gMQr9e43wM";
    var google_custom_params = window.google_tag_params;
    var google_remarketing_only = true;
    /* ]]> */
</script>
<script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js">
</script>

<noscript>
    <div style="display:inline;">
        <img height="1" width="1" style="border-style:none;" alt="" src="//googleads.g.doubleclick.net/pagead/viewthroughconversion/1005464495/?value=0&amp;label=KMo7CNGm6gMQr9e43wM&amp;guid=ON&amp;script=0"/>
    </div>
</noscript>

<!-- Mixpanel -->
<?php 
echo Mixpanel::body_script();
Example #17
0
function track_comment_posted_event()
{
    $string = phpversion();
    if (substr($string, 0, 1) === '5') {
        // get the Mixpanel class instance, replace with your project token
        $mp = Mixpanel::getInstance("d6943462b143b3727b42a1f59c2e27e7");
        // track an event
        $result = $mp->track('Comment Posted', array("plugin_name" => "gplus_comments", "site_domain" => home_url(), "php_version" => phpversion()));
    }
    return $result;
}
Example #18
0
$version = $versions[array_rand($versions)];
if (!$session->userid) {
    if (isset($_GET['h'])) {
        $share_type = 1;
        $lender_invite = $database->getLenderInviteByHash($_GET['h'], $lender['userid']);
        if ($lender_invite) {
            if (!$lender_invite_visit || $lender_invite_visit['lender_invite_id'] != $lender_invite['id']) {
                $lender_invite_visit = array('lender_id' => $lender['userid'], 'lender_invite_id' => $lender_invite['id'], 'share_type' => $share_type, 'invitee_landing_version' => $version);
                $_SESSION['lender_invite_visit'] = $database->addLenderInviteVisit($lender_invite_visit);
                header("Location: /i/" . $lender['username']);
            }
        }
        Mixpanel::track('Invite page viewed', array('share_type' => array_get($share_types, $share_type, 'website'), 'email' => $lender_invite['email'], 'lender_id' => $lender['userid'], 'invitee_landing_version' => $version));
    } elseif (!$lender_invite_visit || $lender_invite_visit['lender_id'] != $lender['userid']) {
        $lender_invite_visit = array('lender_id' => $lender['userid'], 'lender_invite_id' => null, 'share_type' => $share_type, 'invitee_landing_version' => $version);
        $_SESSION['lender_invite_visit'] = $database->addLenderInviteVisit($lender_invite_visit);
        Mixpanel::track('Invite page viewed', array('share_type' => array_get($share_types, $share_type, 'website'), 'lender_id' => $lender['userid'], 'invitee_landing_version' => $version));
    }
}
$lender_name = $lender['username'];
if ($lender['userid'] == 19602) {
    $lender_name = "God";
}
$lender_url = SITE_URL . getUserProfileUrl($lender['userid']);
$lender_profile_image = $database->getProfileImage($lender['userid']);
$smarty->assign(compact('lender_name', 'lender_url', 'lender_profile_image'));
if ($version == 'try_microlending_header') {
    $smarty->display('lender_invitee_new.tpl');
} else {
    $smarty->display('lender_invitee.tpl');
}
<?php

require_once "../lib/Mixpanel.php";
// import the Mixpanel class
require_once "consumers/ObConsumer.php";
// import the Mixpanel class
// define a callback function to handle errors made in a consumer
function handleError($code, $data)
{
    echo "This is my  customer error handler. I've received an error! code = " . $code . " : data = " . $data . "<br />";
}
// instantiate Mixpanel with some different options including a custom consumer and a custom error callback
$mp = new Mixpanel("MIXPANEL_PROJECT_TOKEN", array("debug" => true, "max_batch_size" => 1, "consumers" => array("ob" => "ObConsumer"), "consumer" => "ob", "error_callback" => "handleError"));
$mp->track("test_event", array("color" => "blue"));
$mp->track("test_event", array("color" => "red"));
$mp->track("force_error");
// a magical event we've defined as an error in our custom "ObConsumer"
Example #20
0
    $smarty->assign('body_class', 'home');
    $smarty->assign('lang', $lang);
    $borrower_country = $database->isVisitorInBorrowerCountry();
    if ($borrower_country == 1) {
        include_once "./editables/home_borrower.php";
        $path = getEditablePath('home_borrower.php');
        include_once "./editables/" . $path;
        $smarty->assign('lang', $lang);
        $smarty->display('home_borrower.tpl');
    } else {
        $homepage_versions = array('wall_of_text', 'featured_project');
        $homepage_version = $homepage_versions[array_rand($homepage_versions)];
        $smarty->assign('homepage_version', $homepage_version);
        $smarty->assign('username', $session->username);
        $smarty->assign('userlevel', $session->userlevel);
        Mixpanel::incrementProperty('homepage_view_count');
        if ($homepage_version == 'wall_of_text') {
            $smarty->display('home.tpl');
        } else {
            $smarty->display('home2.tpl');
        }
    }
} elseif ($page == 3) {
    $smarty->assign('body_class', 'how-it-works');
    $smarty->display('how-works.tpl');
} elseif ($page == 4) {
    include 'includes/faqs.php';
    $smarty->assign('body_class', 'faqs');
    $smarty->display('faqs.tpl');
} elseif ($page == 5) {
    $smarty->assign('body_class', 'terms-of-use');
 function track($data)
 {
     mlog('track');
     if (file_exists(realpath(dirname(__FILE__)) . '/libs/mixpanel/Mixpanel.php')) {
         require_once realpath(dirname(__FILE__)) . '/libs/mixpanel/Mixpanel.php';
         $mp = Mixpanel::getInstance("965556434c5ae652a44f24b85b442263");
         $domain = str_replace("http://", "", $_SERVER["SERVER_NAME"]);
         switch ($data['type']) {
             case 'activate':
                 $mp->track("Activate - Plugin", array("domain" => $domain));
                 break;
             case 'deactivate':
                 $mp->track("Deactivate - Plugin", array("domain" => $domain));
                 break;
             default:
                 if (isset($data['event'])) {
                     $mp->track($data['event'], array("domain" => $domain));
                 }
                 break;
         }
     }
     $response = wp_remote_post(SK_TRACKING_API . 'event', array('method' => 'POST', 'timeout' => 45, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => true, 'headers' => array(), 'body' => $data, 'cookies' => array()));
 }
 public function __construct()
 {
     self::$mixpanel = Mixpanel::getInstance($_ENV['MIXPANEL_TOKEN']);
 }
function ml_track_mixpanel($action)
{
    if (function_exists('curl_version')) {
        // get the Mixpanel class instance, replace with your project token
        $mp = Mixpanel::getInstance("3e7cc38a0abe4ea3a16a0e7538144f23");
        // track an event
        $mp->track($action);
    }
}
Example #24
0
 public function testing()
 {
     // $this->load->model('Purchase');
     // $purchase = $this->Purchase->get_details('49f463320a796a9a443157780d29d585');
     // dumper($purchase['item_download_link']);
     require 'application/libraries/Mixpanel/Mixpanel.php';
     // dumper(scandir('./application/libraries/Mixpanel'));
     // $this->load->library('Mixpanel/Mixpanel.php', 'a50829b5f6db182b5dafa61c12baa58b');
     // get the Mixpanel class instance, replace with your
     // project token
     $mp = Mixpanel::getInstance("a50829b5f6db182b5dafa61c12baa58b");
     // track an event
     // $mp->identify('*****@*****.**');
     dumper($mp->track("testing library", array("label" => "dev-test")));
 }
Example #25
0
 public function __construct()
 {
     $mp = $this->getMixpanel();
     $mp = Mixpanel::getInstance("PLACE_YOUR_TOKEN_HERE");
     $this->setMixpanel($mp);
 }
Example #26
0
$lender = $database->getLenderDetailsByUsername(sanitize($_GET['username']));
if (!$lender) {
    header("Location: " . SITE_URL);
}
$yc_account_credit = $session->amountToUseForBid(YC_ACCOUNT_ID);
if ($yc_account_credit < 5000) {
    return $smarty->display('lender_invite_inactive.tpl');
}
if (!$session->userid) {
    if (isset($_GET['h'])) {
        $share_type = 1;
        $lender_invite = $database->getLenderInviteByHash($_GET['h'], $lender['userid']);
        if ($lender_invite) {
            if (!$lender_invite_visit || $lender_invite_visit['lender_invite_id'] != $lender_invite['id']) {
                $lender_invite_visit = array('lender_id' => $lender['userid'], 'lender_invite_id' => $lender_invite['id'], 'share_type' => $share_type);
                $_SESSION['lender_invite_visit'] = $database->addLenderInviteVisit($lender_invite_visit);
                header("Location: /i/" . $lender['username']);
            }
        }
        Mixpanel::track('Invite page viewed', array('share_type' => array_get($share_types, $share_type, 'website'), 'email' => $lender_invite['email'], 'lender_id' => $lender['userid']));
    } elseif (!$lender_invite_visit || $lender_invite_visit['lender_id'] != $lender['userid']) {
        $lender_invite_visit = array('lender_id' => $lender['userid'], 'lender_invite_id' => null, 'share_type' => $share_type);
        $_SESSION['lender_invite_visit'] = $database->addLenderInviteVisit($lender_invite_visit);
        Mixpanel::track('Invite page viewed', array('share_type' => array_get($share_types, $share_type, 'website'), 'lender_id' => $lender['userid']));
    }
}
$lender_name = $lender['FirstName'] ?: $lender['username'];
$lender_url = SITE_URL . getUserProfileUrl($lender['userid']);
$lender_profile_image = $database->getProfileImage($lender['userid']);
$smarty->assign(compact('lender_name', 'lender_url', 'lender_profile_image'));
$smarty->display('lender_invitee.tpl');
Example #27
0
<?php

require_once "/path/to/vendor/mixpanel/mixpanel-php/lib/Mixpanel.php";
// import the Mixpanel class
$mp = new Mixpanel("MIXPANEL_PROJECT_TOKEN", array("debug" => true));
// this would likely come from a database or session variable
$user_id = 12345;
// associate user 12345 to all subsequent track calls
$mp->identify($user_id);
// send property "color" = "red" with all subsequent track calls
$mp->register("color", "red");
// send property "number" = 1 with all subsequent track calls, don't overwrite an existing value
$mp->registerOnce("number", 1);
$mp->registerOnce("number", 2);
// this will do nothing
// send all of these properties with all subsequent track calls, overwriting previously set values
$mp->registerAll(array("color" => "green", "prop2" => "val2"));
// color is now green instead of red
// send all of these properties with all subsequent track calls, NOT overwriting previously set values
$mp->registerAllOnce(array("color" => "blue", "prop3" => "val3"));
// color is still green but prop3 is now set to val3
// track a custom "button click" event
$mp->track("button click", array("label" => "Login"));
// track a custom "logged in" event
$mp->track("logged in", array("landing page" => "/specials"));
// create/update a profile identified by id 12345 with $first_name set to John and $email set to john.doe@example.com
// now we can send them Notifications!
$mp->people->set($user_id, array('$first_name' => "John", '$email' => "*****@*****.**"));
// update John's profile with property ad_source to be "google" but don't override ad_source if it exists already
$mp->people->setOnce($user_id, array("ad_source" => "google"));
// increment John's total logins by one
<?php

// import the Mixpanel class
require_once "../lib/Mixpanel.php";
// instantiate the Mixpanel class
$mp = Mixpanel::getInstance("MIXPANEL_PROJECT_TOKEN");
// associate a user id to subsequent events
$mp->identify(12345);
// track a "Login Success" event with a property "Ad Source" having value "Google"
$mp->track("Login Success", array("Ad Source" => "Google"));
// track an "Item Viewed" event with a property "Item" having value "Cool New Shoes"
$mp->track("Item Viewed", array("Item" => "Cool New Shoes"));
// stop associating events to user 12345
$mp->unregister("distinct_id");
// event "Some Event" won't be associated with user 12345
$mp->track("Some Event");