/**
 * Returns array of properties associated with the device.
 *
 * @param string $useragent
 *   The useragent of the device.
 *
 * @return array
 *   Array of properties and values.
 */
function fiftyone_degrees_get_device_data($useragent)
{
    global $_fiftyone_degrees_use_array_caching;
    global $_fiftyone_degrees_data_file;
    fiftyone_degrees_set_file_handle();
    $debug_info = array();
    $start_time = microtime(TRUE);
    $info = array();
    if ($_fiftyone_degrees_use_array_caching !== FALSE) {
        global $_fiftyone_degrees_cache;
        $_fiftyone_degrees_cache = array();
    }
    $headers = fiftyone_degrees_get_headers();
    $root_char_nodes = fiftyone_degrees_read_root_node_offsets($headers);
    $root_char_nodes_count = count($root_char_nodes);
    // Unpack creates a 1 based array. array merge converts to 0 based.
    $useragent_bytes = array_merge(unpack('C*', $useragent));
    $useragent_length = count($useragent_bytes);
    $current_position = min($useragent_length, $root_char_nodes_count) - 1;
    $matched_node_indexs = array();
    $debug_info['root_nodes_evaluated'] = 0;
    $debug_info['nodes_evaluated'] = 0;
    $debug_info['string_read'] = 0;
    $debug_info['signatures_read'] = 0;
    $debug_info['signatures_compared'] = 0;
    $debug_info['difference'] = 0;
    while ($current_position > 0) {
        $node = fiftyone_degrees_read_node($root_char_nodes[$current_position], $headers);
        $debug_info['root_nodes_evaluated']++;
        $node = fiftyone_degrees_evaluate_node($node, NULL, $useragent_bytes, $useragent_length, $debug_info, $headers);
        if ($node != NULL && $node['is_complete']) {
            // Add this node's index to the list for the match in the correct order.
            $index = fiftyone_degrees_integer_binary_search($matched_node_indexs, $node['offset']);
            array_splice($matched_node_indexs, ~$index, 0, $node['offset']);
            // Check from the next character position to the left of this one.
            $current_position = $node['next_char_position'];
        } else {
            // No nodes matched at the character position.
            $current_position--;
        }
    }
    $timings = array();
    $timings['node_match_time'] = microtime(TRUE) - $start_time;
    $signatures_checked = count($matched_node_indexs);
    $info['SignaturesChecked'] = $signatures_checked;
    $method = '';
    $timings['signature_match_time'] = microtime(TRUE);
    $matched_signature = fiftyone_degrees_get_signature($matched_node_indexs, $useragent_bytes, $method, $timings, $debug_info, $headers);
    if ($matched_signature != -1) {
        $best_signature = fiftyone_degrees_read_signature($matched_signature, $headers);
        if (isset($lowest_score) == FALSE) {
            $lowest_score = 0;
        }
    } else {
        $lowest_score = PHP_INT_MAX;
        $best_signature = fiftyone_degrees_read_signature(0, $headers);
        $method = 'none';
    }
    $info['Method'] = $method;
    $timings['signature_match_time'] = microtime(TRUE) - $timings['signature_match_time'];
    $debug_info['signature_string'] = fiftyone_degrees_get_signature_string($best_signature, $headers);
    $info['Confidence'] = $lowest_score;
    $profiles = array();
    $filled_components = array();
    $feature_detection_ids = fiftyone_degrees_get_feature_detection_profile_ids();
    foreach ($feature_detection_ids as $id) {
        $profile = fiftyone_degrees_get_profile_from_id($id, $headers);
        // Make sure only one profile for each component can be added.
        if ($profile != NULL && !in_array($profile['component_id'], $filled_components)) {
            $filled_components[] = $profile['component_id'];
            $profiles[] = $profile;
        }
    }
    $timings['profile_fetch_time'] = microtime(TRUE);
    foreach ($best_signature['profile_indexs'] as $profile_offset) {
        $profile = fiftyone_degrees_read_profile($profile_offset, $headers);
        // Check if this profile's component has already been filled.
        if (!in_array($profile['component_id'], $filled_components)) {
            $filled_components[] = $profile['component_id'];
            $profiles[] = $profile;
        }
    }
    $timings['profile_fetch_time'] = microtime(TRUE) - $timings['profile_fetch_time'];
    $timings['property_fetch_time'] = microtime(TRUE);
    $_51d = fiftyone_degrees_get_property_data($profiles, $headers);
    $bandwidth = fiftyone_degrees_get_bandwidth_data();
    if ($bandwidth != NULL) {
        foreach ($bandwidth as $k => $v) {
            $_51d[$k] = $v;
        }
    }
    foreach ($info as $i_k => $i_v) {
        $_51d[$i_k] = $i_v;
    }
    $timings['property_fetch_time'] = microtime(TRUE) - $timings['property_fetch_time'];
    $end_time = microtime(TRUE);
    $duration = $end_time - $start_time;
    $_51d['Time'] = $end_time - $start_time;
    $_51d['debug_timings'] = $timings;
    $_51d['debug_info'] = $debug_info;
    global $_fiftyone_degrees_data_file_path;
    $_51d['DataFile'] = $_fiftyone_degrees_data_file_path;
    return $_51d;
}
 * ********************************************************************* */
require_once 'ExampleMaster.php';
require_once '../core/51Degrees.php';
?>

<html>
<head>
<title>51Degrees Image Optimser Gallery</title>
<?php 
fiftyone_degrees_echo_header();
?>
</head>
<body>
<?php 
fiftyone_degrees_echo_menu();
?>
<div id="Content">

<?php 
if (array_key_exists('ProfileId', $_GET)) {
    $profile_id = $_GET['ProfileId'];
    $headers = fiftyone_degrees_get_headers();
    $profile = fiftyone_degrees_get_profile_from_id($profile_id, $headers);
    $properties = fiftyone_degrees_get_profile_property_values($profile, NULL, $headers);
    fiftyone_degrees_echo_properties($properties);
}
?>

</div>
</body>
</html>