From d47223472e97593cea577fca0e18ed95ef8bece7 Mon Sep 17 00:00:00 2001 From: Michael Pretty <mpretty@voceconnect.com> Date: Wed, 22 Sep 2010 21:33:41 -0400 Subject: [PATCH] switching to generic cdn rewrite plugin --- cdn-rewrite.php | 209 + cloudfiles-cdn.php | 513 - cloudfiles/cloudfiles.php | 2168 ---- cloudfiles/cloudfiles_exceptions.php | 41 - cloudfiles/cloudfiles_http.php | 1338 --- cloudfiles/share/cacert.pem | 3113 ----- cloudfiles/share/magic | 15283 ------------------------- cloudfiles/share/magic.mgc | Bin 1775200 -> 0 bytes cloudfiles/share/magic.mime | 1027 -- cloudfiles/share/magic.mime.mgc | Bin 42624 -> 0 bytes voce-settings.php | 182 +- 11 files changed, 300 insertions(+), 23574 deletions(-) create mode 100644 cdn-rewrite.php delete mode 100644 cloudfiles-cdn.php delete mode 100644 cloudfiles/cloudfiles.php delete mode 100644 cloudfiles/cloudfiles_exceptions.php delete mode 100644 cloudfiles/cloudfiles_http.php delete mode 100644 cloudfiles/share/cacert.pem delete mode 100644 cloudfiles/share/magic delete mode 100644 cloudfiles/share/magic.mgc delete mode 100644 cloudfiles/share/magic.mime delete mode 100644 cloudfiles/share/magic.mime.mgc diff --git a/cdn-rewrite.php b/cdn-rewrite.php new file mode 100644 index 0000000..c9a3828 --- /dev/null +++ b/cdn-rewrite.php @@ -0,0 +1,209 @@ +<?php +/* +Plugin Name: CDN Rewrite +Plugin URI: http://voceconnect.com/ +Description: Rewrites asset URLs to CDN +Version: 0.1 +Author: Chris Scott, Michael Pretty +Author URI: http://voceconnect.com/ +*/ + +require_once('voce-settings.php'); + +class CDN_Rewrite { + + const OPTION_GENERAL = 'cdn_general'; + + private $submenu_general; + private $file_extensions; + private $blog_details; + private $cdn_root_url; + + public function __construct() { + $this->file_extensions = $this->get_setting('file_extensions'); + $this->cdn_root_url = untrailingslashit($this->get_setting('root_url')); + } + + public function initialize() { + if (!class_exists('Voce_Settings')) { + return; + } + + add_action('admin_menu', array($this, 'add_options_page')); + if ('' == $this->file_extensions || '' == $this->cdn_root_url) { + add_action('admin_notices', array($this, 'settings_warning')); + return; + } + + if('/' != $this->cdn_root_url) { + add_action('template_redirect', array($this, 'start_buffer'), 1); + } + } + + /** + * get general setting + * + * @param string $setting setting name + * @return mixed setting value or false if not set + */ + private function get_setting($setting) { + $settings = get_option(self::OPTION_GENERAL); + if(!$settings || !is_array($settings)) { + $settings = array( + 'file_extensions' => 'bmp|bz2|css|gif|ico|gz|jpg|jpeg|js|mp3|pdf|png|rar|rtf|swf|tar|tgz|txt|wav|zip' + ); + update_option(self::OPTION_GENERAL, $settings); + } + return (isset($settings[$setting])) ? $settings[$setting] : false; + } + + public function settings_warning() { + echo "<div class='update-nag'>The CDN Rewrite plugin is missing some required settings.</div>"; + } + + /** + * adds the options page + * + * @return void + */ + public function add_options_page() { + $this->submenu_general = add_options_page('CDN Rewrite', 'CDN Rewrite', 'manage_options', self::OPTION_GENERAL, array($this, 'submenu_general')); + $settings = new Voce_Settings(self::OPTION_GENERAL, self::OPTION_GENERAL); + + $section = $settings->add_section('api', 'CDN Rewrite Settings', $this->submenu_general); + $section->add_field('root_url', 'CDN Root URL (required)', 'field_input', array('description' => 'The base URL of the CDN.')); + $section->add_field('file_extensions', 'File Extensions (required)', 'field_input'); + } + + /** + * callback to display submenu_external + * + * @return void + */ + function submenu_general() { + ?> + <div class="wrap"> + <h2>CDN Rewrite Settings</h2> + <form method="post" action="options.php"> + <?php settings_fields(self::OPTION_GENERAL); ?> + <?php do_settings_sections($this->submenu_general); ?> + <p class="submit"> + <input name="Submit" type="submit" class="button-primary" value="<?php esc_attr_e('Save Changes'); ?>" /> + </p> + </form> + </div> + <?php + } + + /** + * start output buffering. + * + */ + public function start_buffer() { + ob_start(array($this, 'filter_urls')); + } + + /** + * Callback for output buffering. Search content for urls to replace + * + * @param string $content + * @return string + */ + public function filter_urls($content) { + $root_url = $this->get_site_root_url(); + $regex = '#(?<=[(\"\'])'.quotemeta($root_url).'(?:(/[^\"\')]+\.('.$this->file_extensions.')))#'; + + $content = preg_replace_callback($regex, array($this, 'url_rewrite'), $content); + + return $content; + } + + /** + * Returns the root url of the current site + * + * @return string + */ + public function get_site_root_url() { + if(is_multisite() && !is_subdomain_install()) { + $root_blog = get_blog_details(1); + $root_url = $root_blog->siteurl; + } else { + $root_url = site_url(); + } + return $root_url; + } + + /** + * Returns the details for the current blog + * + * @return object + */ + public function get_this_blog_details() { + if(!isset($this->blog_details)) { + global $blog_id; + $this->blog_details = get_blog_details($blog_id); + } + return $this->blog_details; + } + + /** + * Callback for url preg_replace_callback. Returns corrected URL + * + * @param array $match + * @return string + */ + public function url_rewrite($match) { + global $blog_id; + $path = $match[1]; + //if is subfolder install and isn't root blog and path starts with site_url and isnt uploads dir + if(is_multisite() && !is_subdomain_install() && $blog_id !== 1) { + $bloginfo = $this->get_this_blog_details(); + if((0 === strpos($path, $bloginfo->path)) && (0 !== strpos($path, $bloginfo->path.'files/'))) { + $path = '/'.substr($path, strlen($bloginfo->path)); + } + } + return $this->cdn_root_url . $path; + } + +} +add_action('init', array(new CDN_Rewrite(), 'initialize')); + +class CDN_VersionAssets { + + private $default_version = ''; + private $root_url; + + public function __construct() { + $this->root_url = site_url(); + } + + public function initialize() { + add_filter('style_loader_src', array($this, 'replace_version'), 10); + add_filter('script_loader_src', array($this, 'replace_version'), 10); + add_filter('stylesheet_uri', array($this, 'replace_version'), 10); + } + + public function on_template_redirect() { + $this->default_version = @filemtime(get_stylesheet_directory().'/style.css'); + } + + private function get_version($url) { + if(0 === strpos($url, $this->root_url)) { + $parts = parse_url($url); + $file_path = str_replace(site_url('/'), ABSPATH, $parts['scheme'].'://'.$parts['host'].$parts['path']); + if( !($version = @filemtime($file_path)) ) { + $version = $this->default_version; + } + return $version; + } + return false; + } + + public function replace_version($src) { + if( $new_version = $this->get_version($src) ) { + return add_query_arg('ver', $new_version, $src); + } + return $src; + } +} +add_action('init', array(new CDN_VersionAssets(), 'initialize')); \ No newline at end of file diff --git a/cloudfiles-cdn.php b/cloudfiles-cdn.php deleted file mode 100644 index 29cf5ee..0000000 --- a/cloudfiles-cdn.php +++ /dev/null @@ -1,513 +0,0 @@ -<?php -/* -Plugin Name: Cloudfiles CDN -Plugin URI: http://voceconnect.com/ -Description: Adds/Deletes uploaded images on CDN and rewrites asset URLs to CDN -Version: 0.1 -Author: Chris Scott, Michael Pretty -Author URI: http://voceconnect.com/ -*/ - -require_once('voce-settings.php'); - -class CloudfilesCdn { - - var $submenu_general; - - //private static $option_group = 'cloudfiles_cdn'; - const OPTION_GENERAL = 'cloudfiles_cdn_general'; - - /** - * get general setting - * - * @param string $setting setting name - * @return mixed setting value or false if not set - */ - public static function get_setting($setting) { - $settings = get_option(self::OPTION_GENERAL); - if(!$settings || !is_array($settings)) { - $settings = array( - 'file_extensions' => 'bmp|bz2|css|gif|ico|gz|jpg|jpeg|js|mp3|pdf|png|rar|rtf|swf|tar|tgz|txt|wav|zip' - ); - } - return (isset($settings[$setting])) ? $settings[$setting] : false; - } - - public function __construct() {} - - public function initialize() { - // relies on Voce_Settings - if (!class_exists('Voce_Settings')) { - return; - } - - add_action('admin_menu', array($this, 'add_options_page')); - - if (!self::get_setting('username') || !self::get_setting('api_key') || !self::get_setting('container') || !self::get_setting('root_url') || !self::get_setting('file_extensions')) { - add_action('admin_notices', array($this, 'settings_warning')); - return; - } - - add_filter('wp_handle_upload', array($this, 'catch_wp_handle_upload')); - add_filter('wp_delete_file', array($this, 'catch_wp_delete_file')); - add_filter('wp_generate_attachment_metadata', array($this, 'catch_wp_generate_attachment_metadata')); - add_filter('bp_core_avatar_cropstore', array($this, 'catch_bp_core_avatar_cropstore')); - add_action('bp_core_avatar_save', array($this, 'catch_bp_core_avatar_save'), 10, 2); - - } - - public function settings_warning() { - echo "<div class='update-nag'>The Cloudfiles CDN plugin is missing some required settings.</div>"; - } - - /** - * adds the options page - * - * @return void - */ - public function add_options_page() { - $this->submenu_general = add_options_page('Cloudfiles CDN', 'Cloudfiles CDN', 'manage_options', self::OPTION_GENERAL, array($this, 'submenu_general')); - $settings = new Voce_Settings(self::OPTION_GENERAL, self::OPTION_GENERAL); - - $section = $settings->add_section('api', 'Cloudfiles API Settings', $this->submenu_general); - $section->add_field('username', 'Username (required)', 'field_input'); - $section->add_field('api_key', 'API Key (required)', 'field_input'); - $section->add_field('container', 'Container Name (required)', 'field_input', array('description' => 'The container to store files in.')); - $section->add_field('root_url', 'Root URL (required)', 'field_input', array('description' => 'The root URL to the container without a trailing slash.')); - $section->add_field('file_extensions', 'File Extensions (required)', 'field_input'); - $section->add_field('enable_debug', 'Enable Debugging?', 'field_checkbox', array('description' => 'Enable error_log() to log upload/delete actions.')); - - } - - /** - * callback to display submenu_external - * - * @return void - */ - function submenu_general() { - ?> - <div class="wrap"> - <h2>Cloudfiles CDN Settings</h2> - <form method="post" action="options.php"> - <?php settings_fields(self::OPTION_GENERAL); ?> - <?php do_settings_sections($this->submenu_general); ?> - <p class="submit"> - <input name="Submit" type="submit" class="button-primary" value="<?php esc_attr_e('Save Changes'); ?>" /> - </p> - </form> - </div> - <?php - } - - /** - * delete old BP avatars on save - * - * @param string $user_id not used - * @param string $old the path to the file being deleted - * @return void - */ - public function catch_bp_core_avatar_save($user_id, $old) { - $files = array(); - // this will be -avatar2 - $files[] = str_replace(ABSPATH, '', $old); - // get -avatar1 also - $files[] = str_replace('-avatar2', '-avatar1', $files[0]); - - foreach ($files as $file) { - if (self::get_setting('enable_debug')) - error_log("DELETING OLD BP AVATAR: $file"); - - $this->delete_file($file); - } - } - - /** - * when BP avatars are cropped, catch the cropped sizes and upload - * - * @param string $files - * @return array the original file array - */ - public function catch_bp_core_avatar_cropstore($files) { - foreach ((array) $files as $file) { - $relative_file_path = str_replace(ABSPATH, '', $file); - $file_type = wp_check_filetype($file); - - if (self::get_setting('enable_debug')) - error_log("UPLOADING BP AVATAR: $relative_file_path"); - $this->upload_file($file, $file_type['type'], $relative_file_path); - } - - return $files; - } - - /** - * go grab the already generated intermediate sizes and upload - * - * @param string $metadata - * @return array updated metadata - */ - public function catch_wp_generate_attachment_metadata($metadata) { - //error_log("WP_GENERATE_ATTACHMENT_METADATA: " . var_export($metadata, true)); - $upload_dir = wp_upload_dir(); - $upload_path = trailingslashit($upload_dir['path']); - $sizes = $metadata['sizes']; - - foreach ((array) $sizes as $size => $size_data ) { - $file = $size_data['file']; - if (is_multisite()) { - $relative_file_path = self::get_blog_path() . 'files' . trailingslashit($upload_dir['subdir']) . $file; - } else { - $upload_dir = wp_upload_dir(); - $relative_file_path = str_replace(ABSPATH, '', $upload_dir['basedir']) . trailingslashit($upload_dir['subdir']) . $file; - } - $file_type = wp_check_filetype($file); - if (self::get_setting('enable_debug')) - error_log("UPLOADING INTERMEDIATE SIZE: $relative_file_path"); - $this->upload_file($upload_path . $file, $file_type['type'], $relative_file_path); - } - - return $metadata; - } - - /** - * get a local filename from a CDN URL - * - * @param string $url - * @return string filename - */ - private function get_local_filename($url) { - return ABSPATH . str_replace(trailingslashit(self::get_setting('root_url')), '', $url); - } - - /** - * Filter to handle wp_handle_upload for uploaded files. Logs any errors. - * - * @param string $upload - * @return void - */ - public function catch_wp_handle_upload($upload) { - // check for buddypress avatar upload and don't upload since it resizes and deletes this one - if (function_exists('bp_core_setup_globals') && strpos($upload['file'], '/avatars/') !== false) { - return $upload; - } - - $blog_path = $this->get_blog_path(); - $relative_url = $blog_path . $this->remove_site_url($upload['url']); - if (self::get_setting('enable_debug')) - error_log("UPLOADING: $relative_url"); - - // upload file - if (!$this->upload_file($upload['file'], $upload['type'], $relative_url)) { - error_log("[CloudfilesCdn] Error uploading file: $relative_url"); - return $upload; - } - - return $upload; - } - - /** - * Filter to handle wp_delete_file for deleted files. Deletes the file - * from the CDN. - * - * @param string $file - * @return string the original file path - */ - public function catch_wp_delete_file($file) { - //error_log("WP_DELETE_FILE: " . var_export($file, true)); - if (is_multisite()) { - // not sure if this is needed or not... - if (strpos($file, 'blogs.dir')) { - $parts = explode('files/', $file); - $file = $parts[1]; - } - $file = $this->get_blog_path() . 'files/' . $file; - } - - // delete the file from the CDN - if (self::get_setting('enable_debug')) - error_log("DELETING FILE: $file"); - $this->delete_file(str_replace(ABSPATH, '', $file)); - - return $file; - } - - /** - * get the blog's path without the leading slash - * - * @return string - */ - private function get_blog_path() { - global $blog_id; - $blog_path = ''; - if ((int) $blog_id !== 1) { - $blog_details = get_blog_details($blog_id); - $blog_path = $blog_details->path; - } - - return ltrim($blog_path, '/'); - } - - /** - * Get the relative filename. The filename from the wp_delete_file filter - * will either have the file path to the WP_UPLOAD_DIR prepended to the cdn'd file - * url or it will be the path relative to the WP_UPLOAD_DIR - * - * @param string $file - * @return void - */ - private function get_relative_file($file) { - $cont_url = self::get_setting('root_url'); - if (strpos($file, $cont_url) !== false) { - if ($file_parts = explode(trailingslashit(self::get_setting('root_url')), $file)) { - // prepended w/bad upload path (e.g. http://c0002127.cdn1.cloudfiles.rackspacecloud.com/wp-content/uploads/2010/07/http://c0002127.cdn1.cloudfiles.rackspacecloud.com/wp-content/uploads/2010/07/653106995_338e53fb1416-150x150.jpg) - if (isset($file_parts[2])) { - return $file_parts[2]; - } elseif (isset($file_parts[1])) { - // just regular CDN url - return $file_parts[1]; - } - } - } - - return false; - } - - /** - * delete a file from the CDN - * - * @param string $file relative filename - * @return bool true on success, false on failure - */ - private function delete_file($file) { - require_once(trailingslashit(dirname(__FILE__)) . 'cloudfiles/cloudfiles.php'); - $auth = new CF_Authentication(self::get_setting('username'), self::get_setting('api_key')); - - try { - $auth->authenticate(); - } catch (Exception $e) { - error_log(sprintf("[CloudfilesCdn] Error authenticating to Cloudfiles: %s", $e->getMessage())); - return false; - } - - $conn = new CF_Connection($auth); - $container = $conn->get_container(self::get_setting('container')); - - try { - $obj = $container->get_object($file); - $container->delete_object($obj); - } catch (Exception $e) { - error_log(sprintf("[CloudfilesCdn] Error deleting file '%s' from Cloudfiles: %s", $file, $e->getMessage())); - } - - if (self::get_setting('enable_debug')) - error_log("DELETED FILE: $file"); - - return true; - } - - - - /** - * Update the attachement URL if the attached file is on the CDN - * - * @param string $url - * @param string $post_id - * @return string original or updated URL - */ - public function cdn_attachment_url($url, $post_id) { - if ($file = get_post_meta($post_id, '_wp_attached_file', true)) { - if (strpos($file, self::get_setting('root_url')) !== false) { - return $file; - } - } - - return $url; - } - - /** - * Upload a file to cloudfiles - * - * @param string $file the file's path - * @param string $file_type the file's mime type - * @param string $file_url the file's site-relative URL - * @return bool true on succes, false on fail - */ - private function upload_file($file, $file_type, $file_url) { - require_once(trailingslashit(dirname(__FILE__)) . 'cloudfiles/cloudfiles.php'); - $auth = new CF_Authentication(self::get_setting('username'), self::get_setting('api_key')); - - try { - $auth->authenticate(); - } catch (Exception $e) { - error_log(sprintf("[CloudfilesCdn] Error authenticating to Cloudfiles: %s", $e->getMessage())); - return false; - } - - $conn = new CF_Connection($auth); - $container = $conn->get_container(self::get_setting('container')); - - $obj = $container->create_object($file_url); - $obj->content_type = $file_type; - - try { - $obj->load_from_filename($file); - } catch (Exception $e) { - error_log(sprintf("[CloudfilesCdn] Error uploading '%s' to Cloudfiles: %s", $file, $e->getMessage())); - return false; - } - - if (self::get_setting('enable_debug')) - error_log("UPLOADED: $file, $file_type, $file_url"); - - return true; - } - - /** - * Get a site-relative url without a leading / from an absolute URL containing the siteurl - * - * @param string $absolute_url - * @return string relative url - */ - private function remove_site_url($absolute_url) { - return str_replace(trailingslashit(get_option('siteurl')), '', $absolute_url); - } - - private function remove_cdn_url($url) { - return str_replace(trailingslashit(self::get_setting('root_url')), '', $url); - } - -} -add_action('init', array(new CloudfilesCdn(), 'initialize')); - -class CDN_Rewrite { - - private $file_extensions; - private $blog_details; - private $cdn_root_url; - - public function __construct() { - $this->file_extensions = CloudfilesCdn::get_setting('file_extensions'); - $this->cdn_root_url = untrailingslashit(CloudfilesCdn::get_setting('root_url')); - } - - /** - * Initializes class and registers hooks - * - */ - public function initialize() { - if('/' != $this->cdn_root_url) { - add_action('template_redirect', array($this, 'start_buffer'), 1); - } - } - - /** - * start output buffering. - * - */ - public function start_buffer() { - ob_start(array($this, 'filter_urls')); - } - - /** - * Callback for output buffering. Search content for urls to replace - * - * @param string $content - * @return string - */ - public function filter_urls($content) { - $root_url = $this->get_site_root_url(); - $regex = '#(?<=[(\"\'])'.quotemeta($root_url).'(?:(/[^\"\')]+\.('.$this->file_extensions.')))#'; - - $content = preg_replace_callback($regex, array($this, 'url_rewrite'), $content); - - return $content; - } - - /** - * Returns the root url of the current site - * - * @return string - */ - public function get_site_root_url() { - if(is_multisite() && !is_subdomain_install()) { - $root_blog = get_blog_details(1); - $root_url = $root_blog->siteurl; - } else { - $root_url = site_url(); - } - return $root_url; - } - - /** - * Returns the details for the current blog - * - * @return object - */ - public function get_this_blog_details() { - if(!isset($this->blog_details)) { - global $blog_id; - $this->blog_details = get_blog_details($blog_id); - } - return $this->blog_details; - } - - /** - * Callback for url preg_replace_callback. Returns corrected URL - * - * @param array $match - * @return string - */ - public function url_rewrite($match) { - global $blog_id; - $path = $match[1]; - //if is subfolder install and isn't root blog and path starts with site_url and isnt uploads dir - if(is_multisite() && !is_subdomain_install() && $blog_id !== 1) { - $bloginfo = $this->get_this_blog_details(); - if((0 === strpos($path, $bloginfo->path)) && (0 !== strpos($path, $bloginfo->path.'files/'))) { - $path = '/'.substr($path, strlen($bloginfo->path)); - } - } - return $this->cdn_root_url . $path; - } -} -add_action('init', array(new CDN_Rewrite(), 'initialize')); - -class CDN_VersionAssets { - - private $default_version = ''; - private $root_url; - - public function __construct() { - $this->root_url = site_url(); - } - - public function initialize() { - add_filter('style_loader_src', array($this, 'replace_version'), 10); - add_filter('script_loader_src', array($this, 'replace_version'), 10); - add_filter('style_loader_src', array($this, 'replace_version'), 10); - } - - public function on_template_redirect() { - $this->default_version = @filemtime(get_stylesheet_directory().'/style.css'); - } - - private function get_version($url) { - if(0 === strpos($url, $this->root_url)) { - $parts = parse_url($url); - $file_path = str_replace(site_url('/'), ABSPATH, $parts['scheme'].'://'.$parts['host'].$parts['path']); - if( !($version = @filemtime($file_path)) ) { - $version = $this->default_version; - } - return $version; - } - return false; - } - - public function replace_version($src) { - if( $new_version = $this->get_version($src) ) { - return add_query_arg('ver', $new_version, $src); - } - return $src; - } -} -add_action('init', array(new CDN_VersionAssets(), 'initialize')); \ No newline at end of file diff --git a/cloudfiles/cloudfiles.php b/cloudfiles/cloudfiles.php deleted file mode 100644 index 87486e2..0000000 --- a/cloudfiles/cloudfiles.php +++ /dev/null @@ -1,2168 +0,0 @@ -<?php -/** - * This is the PHP Cloud Files API. - * - * <code> - * # Authenticate to Cloud Files. The default is to automatically try - * # to re-authenticate if an authentication token expires. - * # - * # NOTE: Some versions of cURL include an outdated certificate authority (CA) - * # file. This API ships with a newer version obtained directly from - * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle, - * # call the CF_Authentication instance's 'ssl_use_cabundle()' method. - * # - * $auth = new CF_Authentication($username, $api_key); - * # $auth->ssl_use_cabundle(); # bypass cURL's old CA bundle - * $auth->authenticate(); - * - * # Establish a connection to the storage system - * # - * # NOTE: Some versions of cURL include an outdated certificate authority (CA) - * # file. This API ships with a newer version obtained directly from - * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle, - * # call the CF_Connection instance's 'ssl_use_cabundle()' method. - * # - * $conn = new CF_Connection($auth); - * # $conn->ssl_use_cabundle(); # bypass cURL's old CA bundle - * - * # Create a remote Container and storage Object - * # - * $images = $conn->create_container("photos"); - * $bday = $images->create_object("first_birthday.jpg"); - * - * # Upload content from a local file by streaming it. Note that we use - * # a "float" for the file size to overcome PHP's 32-bit integer limit for - * # very large files. - * # - * $fname = "/home/user/photos/birthdays/birthday1.jpg"; # filename to upload - * $size = (float) sprintf("%u", filesize($fname)); - * $fp = open($fname, "r"); - * $bday->write($fp, $size); - * - * # Or... use a convenience function instead - * # - * $bday->load_from_filename("/home/user/photos/birthdays/birthday1.jpg"); - * - * # Now, publish the "photos" container to serve the images by CDN. - * # Use the "$uri" value to put in your web pages or send the link in an - * # email message, etc. - * # - * $uri = $images->make_public(); - * - * # Or... print out the Object's public URI - * # - * print $bday->public_uri(); - * </code> - * - * See the included tests directory for additional sample code. - * - * Requres PHP 5.x (for Exceptions and OO syntax) and PHP's cURL module. - * - * It uses the supporting "cloudfiles_http.php" module for HTTP(s) support and - * allows for connection re-use and streaming of content into/out of Cloud Files - * via PHP's cURL module. - * - * See COPYING for license information. - * - * @author Eric "EJ" Johnson <ej@racklabs.com> - * @copyright Copyright (c) 2008, Rackspace US, Inc. - * @package php-cloudfiles - */ - -/** - */ -require_once("cloudfiles_exceptions.php"); -require("cloudfiles_http.php"); -define("DEFAULT_CF_API_VERSION", 1); -define("MAX_CONTAINER_NAME_LEN", 256); -define("MAX_OBJECT_NAME_LEN", 1024); -define("MAX_OBJECT_SIZE", 5*1024*1024*1024+1); # bigger than S3! ;-) - -/** - * Class for handling Cloud Files Authentication, call it's {@link authenticate()} - * method to obtain authorized service urls and an authentication token. - * - * Example: - * <code> - * # Create the authentication instance - * # - * $auth = new CF_Authentication("username", "api_key"); - * - * # NOTE: Some versions of cURL include an outdated certificate authority (CA) - * # file. This API ships with a newer version obtained directly from - * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle, - * # call the CF_Authentication instance's 'ssl_use_cabundle()' method. - * # - * # $auth->ssl_use_cabundle(); # bypass cURL's old CA bundle - * - * # Perform authentication request - * # - * $auth->authenticate(); - * </code> - * - * @package php-cloudfiles - */ -class CF_Authentication -{ - public $dbug; - public $username; - public $api_key; - public $auth_host; - public $account; - - /** - * Instance variables that are set after successful authentication - */ - public $storage_url; - public $cdnm_url; - public $auth_token; - - /** - * Class constructor (PHP 5 syntax) - * - * @param string $username Mosso username - * @param string $api_key Mosso API Access Key - * @param string $account <b>Deprecated</b> <i>Account name</i> - * @param string $auth_host <b>Deprecated</b> <i>Authentication service URI</i> - */ - function __construct($username=NULL, $api_key=NULL, $account=NULL, $auth_host=NULL) - { - - $this->dbug = False; - $this->username = $username; - $this->api_key = $api_key; - $this->account_name = $account; - $this->auth_host = $auth_host; - - $this->storage_url = NULL; - $this->cdnm_url = NULL; - $this->auth_token = NULL; - - $this->cfs_http = new CF_Http(DEFAULT_CF_API_VERSION); - } - - /** - * Use the Certificate Authority bundle included with this API - * - * Most versions of PHP with cURL support include an outdated Certificate - * Authority (CA) bundle (the file that lists all valid certificate - * signing authorities). The SSL certificates used by the Cloud Files - * storage system are perfectly valid but have been created/signed by - * a CA not listed in these outdated cURL distributions. - * - * As a work-around, we've included an updated CA bundle obtained - * directly from cURL's web site (http://curl.haxx.se). You can direct - * the API to use this CA bundle by calling this method prior to making - * any remote calls. The best place to use this method is right after - * the CF_Authentication instance has been instantiated. - * - * You can specify your own CA bundle by passing in the full pathname - * to the bundle. You can use the included CA bundle by leaving the - * argument blank. - * - * @param string $path Specify path to CA bundle (default to included) - */ - function ssl_use_cabundle($path=NULL) - { - $this->cfs_http->ssl_use_cabundle($path); - } - - /** - * Attempt to validate Username/API Access Key - * - * Attempts to validate credentials with the authentication service. It - * either returns <kbd>True</kbd> or throws an Exception. Accepts a single - * (optional) argument for the storage system API version. - * - * Example: - * <code> - * # Create the authentication instance - * # - * $auth = new CF_Authentication("username", "api_key"); - * - * # Perform authentication request - * # - * $auth->authenticate(); - * </code> - * - * @param string $version API version for Auth service (optional) - * @return boolean <kbd>True</kbd> if successfully authenticated - * @throws AuthenticationException invalid credentials - * @throws InvalidResponseException invalid response - */ - function authenticate($version=DEFAULT_CF_API_VERSION) - { - list($status,$reason,$surl,$curl,$atoken) = - $this->cfs_http->authenticate($this->username, $this->api_key, - $this->account_name, $this->auth_host); - - if ($status == 401) { - throw new AuthenticationException("Invalid username or access key."); - } - if ($status != 204) { - throw new InvalidResponseException( - "Unexpected response (".$status."): ".$reason); - } - - if (!($surl || $curl) || !$atoken) { - throw new InvalidResponseException( - "Expected headers missing from auth service."); - } - $this->storage_url = $surl; - $this->cdnm_url = $curl; - $this->auth_token = $atoken; - return True; - } - /** - * Use Cached Token and Storage URL's rather then grabbing from the Auth System - * - * Example: - * <code> - * #Create an Auth instance - * $auth = new CF_Authentication(); - * #Pass Cached URL's and Token as Args - * $auth->load_cached_credentials("auth_token", "storage_url", "cdn_management_url"); - * </code> - * - * @param string $auth_token A Cloud Files Auth Token (Required) - * @param string $storage_url The Cloud Files Storage URL (Required) - * @param string $cdnm_url CDN Management URL (Required) - * @return boolean <kbd>True</kbd> if successful - * @throws SyntaxException If any of the Required Arguments are missing - */ - function load_cached_credentials($auth_token, $storage_url, $cdnm_url) - { - if(!$storage_url || !$cdnm_url) - { - throw new SyntaxException("Missing Required Interface URL's!"); - return False; - } - if(!$auth_token) - { - throw new SyntaxException("Missing Auth Token!"); - return False; - } - - $this->storage_url = $storage_url; - $this->cdnm_url = $cdnm_url; - $this->auth_token = $auth_token; - return True; - } - /** - * Grab Cloud Files info to be Cached for later use with the load_cached_credentials method. - * - * Example: - * <code> - * #Create an Auth instance - * $auth = new CF_Authentication("UserName","API_Key"); - * $auth->authenticate(); - * $array = $auth->export_credentials(); - * </code> - * - * @return array of url's and an auth token. - */ - function export_credentials() - { - $arr = array(); - $arr['storage_url'] = $this->storage_url; - $arr['cdnm_url'] = $this->cdnm_url; - $arr['auth_token'] = $this->auth_token; - - return $arr; - } - - - /** - * Make sure the CF_Authentication instance has authenticated. - * - * Ensures that the instance variables necessary to communicate with - * Cloud Files have been set from a previous authenticate() call. - * - * @return boolean <kbd>True</kbd> if successfully authenticated - */ - function authenticated() - { - if (!($this->storage_url || $this->cdnm_url) || !$this->auth_token) { - return False; - } - return True; - } - - /** - * Toggle debugging - set cURL verbose flag - */ - function setDebug($bool) - { - $this->dbug = $bool; - $this->cfs_http->setDebug($bool); - } -} - -/** - * Class for establishing connections to the Cloud Files storage system. - * Connection instances are used to communicate with the storage system at - * the account level; listing and deleting Containers and returning Container - * instances. - * - * Example: - * <code> - * # Create the authentication instance - * # - * $auth = new CF_Authentication("username", "api_key"); - * - * # Perform authentication request - * # - * $auth->authenticate(); - * - * # Create a connection to the storage/cdn system(s) and pass in the - * # validated CF_Authentication instance. - * # - * $conn = new CF_Connection($auth); - * - * # NOTE: Some versions of cURL include an outdated certificate authority (CA) - * # file. This API ships with a newer version obtained directly from - * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle, - * # call the CF_Authentication instance's 'ssl_use_cabundle()' method. - * # - * # $conn->ssl_use_cabundle(); # bypass cURL's old CA bundle - * </code> - * - * @package php-cloudfiles - */ -class CF_Connection -{ - public $dbug; - public $cfs_http; - public $cfs_auth; - - /** - * Pass in a previously authenticated CF_Authentication instance. - * - * Example: - * <code> - * # Create the authentication instance - * # - * $auth = new CF_Authentication("username", "api_key"); - * - * # Perform authentication request - * # - * $auth->authenticate(); - * - * # Create a connection to the storage/cdn system(s) and pass in the - * # validated CF_Authentication instance. - * # - * $conn = new CF_Connection($auth); - * - * # If you are connecting via Rackspace servers and have access - * # to the servicenet network you can set the $servicenet to True - * # like this. - * - * $conn = new CF_Connection($auth, $servicenet=True); - * - * </code> - * - * If the environement variable RACKSPACE_SERVICENET is defined it will - * force to connect via the servicenet. - * - * @param obj $cfs_auth previously authenticated CF_Authentication instance - * @param boolean $servicenet enable/disable access via Rackspace servicenet. - * @throws AuthenticationException not authenticated - */ - function __construct($cfs_auth, $servicenet=False) - { - if (isset($_ENV['RACKSPACE_SERVICENET'])) - $servicenet=True; - $this->cfs_http = new CF_Http(DEFAULT_CF_API_VERSION); - $this->cfs_auth = $cfs_auth; - if (!$this->cfs_auth->authenticated()) { - $e = "Need to pass in a previously authenticated "; - $e .= "CF_Authentication instance."; - throw new AuthenticationException($e); - } - $this->cfs_http->setCFAuth($this->cfs_auth, $servicenet=$servicenet); - $this->dbug = False; - } - - /** - * Toggle debugging of instance and back-end HTTP module - * - * @param boolean $bool enable/disable cURL debugging - */ - function setDebug($bool) - { - $this->dbug = (boolean) $bool; - $this->cfs_http->setDebug($this->dbug); - } - - /** - * Close a connection - * - * Example: - * <code> - * - * $conn->close(); - * - * </code> - * - * Will close all current cUrl active connections. - * - */ - public function close() - { - $this->cfs_http->close(); - } - - /** - * Cloud Files account information - * - * Return an array of two floats (since PHP only supports 32-bit integers); - * number of containers on the account and total bytes used for the account. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * list($quantity, $bytes) = $conn->get_info(); - * print "Number of containers: " . $quantity . "\n"; - * print "Bytes stored in container: " . $bytes . "\n"; - * </code> - * - * @return array (number of containers, total bytes stored) - * @throws InvalidResponseException unexpected response - */ - function get_info() - { - list($status, $reason, $container_count, $total_bytes) = - $this->cfs_http->head_account(); - #if ($status == 401 && $this->_re_auth()) { - # return $this->get_info(); - #} - if ($status < 200 || $status > 299) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - return array($container_count, $total_bytes); - } - - /** - * Create a Container - * - * Given a Container name, return a Container instance, creating a new - * remote Container if it does not exit. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $images = $conn->create_container("my photos"); - * </code> - * - * @param string $container_name container name - * @return CF_Container - * @throws SyntaxException invalid name - * @throws InvalidResponseException unexpected response - */ - function create_container($container_name=NULL) - { - if ($container_name != "0" and !isset($container_name)) - throw new SyntaxException("Container name not set."); - - if (!isset($container_name) or $container_name == "") - throw new SyntaxException("Container name not set."); - - if (strpos($container_name, "/") !== False) { - $r = "Container name '".$container_name; - $r .= "' cannot contain a '/' character."; - throw new SyntaxException($r); - } - if (strlen($container_name) > MAX_CONTAINER_NAME_LEN) { - throw new SyntaxException(sprintf( - "Container name exeeds %d bytes.", - MAX_CONTAINER_NAME_LEN)); - } - - $return_code = $this->cfs_http->create_container($container_name); - if (!$return_code) { - throw new InvalidResponseException("Invalid response (" - . $return_code. "): " . $this->cfs_http->get_error()); - } - #if ($status == 401 && $this->_re_auth()) { - # return $this->create_container($container_name); - #} - if ($return_code != 201 && $return_code != 202) { - throw new InvalidResponseException( - "Invalid response (".$return_code."): " - . $this->cfs_http->get_error()); - } - return new CF_Container($this->cfs_auth, $this->cfs_http, $container_name); - } - - /** - * Delete a Container - * - * Given either a Container instance or name, remove the remote Container. - * The Container must be empty prior to removing it. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $conn->delete_container("my photos"); - * </code> - * - * @param string|obj $container container name or instance - * @return boolean <kbd>True</kbd> if successfully deleted - * @throws SyntaxException missing proper argument - * @throws InvalidResponseException invalid response - * @throws NonEmptyContainerException container not empty - * @throws NoSuchContainerException remote container does not exist - */ - function delete_container($container=NULL) - { - $container_name = NULL; - - if (is_object($container)) { - if (get_class($container) == "CF_Container") { - $container_name = $container->name; - } - } - if (is_string($container)) { - $container_name = $container; - } - - if ($container_name != "0" and !isset($container_name)) - throw new SyntaxException("Must specify container object or name."); - - $return_code = $this->cfs_http->delete_container($container_name); - - if (!$return_code) { - throw new InvalidResponseException("Failed to obtain http response"); - } - #if ($status == 401 && $this->_re_auth()) { - # return $this->delete_container($container); - #} - if ($return_code == 409) { - throw new NonEmptyContainerException( - "Container must be empty prior to removing it."); - } - if ($return_code == 404) { - throw new NoSuchContainerException( - "Specified container did not exist to delete."); - } - if ($return_code != 204) { - throw new InvalidResponseException( - "Invalid response (".$return_code."): " - . $this->cfs_http->get_error()); - } - return True; - } - - /** - * Return a Container instance - * - * For the given name, return a Container instance if the remote Container - * exists, otherwise throw a Not Found exception. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $images = $conn->get_container("my photos"); - * print "Number of Objects: " . $images->count . "\n"; - * print "Bytes stored in container: " . $images->bytes . "\n"; - * </code> - * - * @param string $container_name name of the remote Container - * @return container CF_Container instance - * @throws NoSuchContainerException thrown if no remote Container - * @throws InvalidResponseException unexpected response - */ - function get_container($container_name=NULL) - { - list($status, $reason, $count, $bytes) = - $this->cfs_http->head_container($container_name); - #if ($status == 401 && $this->_re_auth()) { - # return $this->get_container($container_name); - #} - if ($status == 404) { - throw new NoSuchContainerException("Container not found."); - } - if ($status < 200 || $status > 299) { - throw new InvalidResponseException( - "Invalid response: ".$this->cfs_http->get_error()); - } - return new CF_Container($this->cfs_auth, $this->cfs_http, - $container_name, $count, $bytes); - } - - /** - * Return array of Container instances - * - * Return an array of CF_Container instances on the account. The instances - * will be fully populated with Container attributes (bytes stored and - * Object count) - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $clist = $conn->get_containers(); - * foreach ($clist as $cont) { - * print "Container name: " . $cont->name . "\n"; - * print "Number of Objects: " . $cont->count . "\n"; - * print "Bytes stored in container: " . $cont->bytes . "\n"; - * } - * </code> - * - * @return array An array of CF_Container instances - * @throws InvalidResponseException unexpected response - */ - function get_containers($limit=0, $marker=NULL) - { - list($status, $reason, $container_info) = - $this->cfs_http->list_containers_info($limit, $marker); - #if ($status == 401 && $this->_re_auth()) { - # return $this->get_containers(); - #} - if ($status < 200 || $status > 299) { - throw new InvalidResponseException( - "Invalid response: ".$this->cfs_http->get_error()); - } - $containers = array(); - foreach ($container_info as $name => $info) { - $containers[] = new CF_Container($this->cfs_auth, $this->cfs_http, - $info['name'], $info["count"], $info["bytes"], False); - } - return $containers; - } - - /** - * Return list of remote Containers - * - * Return an array of strings containing the names of all remote Containers. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $container_list = $conn->list_containers(); - * print_r($container_list); - * Array - * ( - * [0] => "my photos", - * [1] => "my docs" - * ) - * </code> - * - * @param integer $limit restrict results to $limit Containers - * @param string $marker return results greater than $marker - * @return array list of remote Containers - * @throws InvalidResponseException unexpected response - */ - function list_containers($limit=0, $marker=NULL) - { - list($status, $reason, $containers) = - $this->cfs_http->list_containers($limit, $marker); - #if ($status == 401 && $this->_re_auth()) { - # return $this->list_containers($limit, $marker); - #} - if ($status < 200 || $status > 299) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - return $containers; - } - - /** - * Return array of information about remote Containers - * - * Return a nested array structure of Container info. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * - * $container_info = $conn->list_containers_info(); - * print_r($container_info); - * Array - * ( - * ["my photos"] => - * Array - * ( - * ["bytes"] => 78, - * ["count"] => 2 - * ) - * ["docs"] => - * Array - * ( - * ["bytes"] => 37323, - * ["count"] => 12 - * ) - * ) - * </code> - * - * @param integer $limit restrict results to $limit Containers - * @param string $marker return results greater than $marker - * @return array nested array structure of Container info - * @throws InvalidResponseException unexpected response - */ - function list_containers_info($limit=0, $marker=NULL) - { - list($status, $reason, $container_info) = - $this->cfs_http->list_containers_info($limit, $marker); - #if ($status == 401 && $this->_re_auth()) { - # return $this->list_containers_info($limit, $marker); - #} - if ($status < 200 || $status > 299) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - return $container_info; - } - - /** - * Return list of Containers that have been published to the CDN. - * - * Return an array of strings containing the names of published Containers. - * Note that this function returns the list of any Container that has - * ever been CDN-enabled regardless of it's existence in the storage - * system. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $public_containers = $conn->list_public_containers(); - * print_r($public_containers); - * Array - * ( - * [0] => "images", - * [1] => "css", - * [2] => "javascript" - * ) - * </code> - * - * @return array list of published Container names - * @throws InvalidResponseException unexpected response - */ - function list_public_containers() - { - list($status, $reason, $containers) = - $this->cfs_http->list_cdn_containers(); - #if ($status == 401 && $this->_re_auth()) { - # return $this->list_public_containers(); - #} - if ($status < 200 || $status > 299) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - return $containers; - } - - /** - * Set a user-supplied callback function to report download progress - * - * The callback function is used to report incremental progress of a data - * download functions (e.g. $container->list_objects(), $obj->read(), etc). - * The specified function will be periodically called with the number of - * bytes transferred until the entire download is complete. This callback - * function can be useful for implementing "progress bars" for large - * downloads. - * - * The specified callback function should take a single integer parameter. - * - * <code> - * function read_callback($bytes_transferred) { - * print ">> downloaded " . $bytes_transferred . " bytes.\n"; - * # ... do other things ... - * return; - * } - * - * $conn = new CF_Connection($auth_obj); - * $conn->set_read_progress_function("read_callback"); - * print_r($conn->list_containers()); - * - * # output would look like this: - * # - * >> downloaded 10 bytes. - * >> downloaded 11 bytes. - * Array - * ( - * [0] => fuzzy.txt - * [1] => space name - * ) - * </code> - * - * @param string $func_name the name of the user callback function - */ - function set_read_progress_function($func_name) - { - $this->cfs_http->setReadProgressFunc($func_name); - } - - /** - * Set a user-supplied callback function to report upload progress - * - * The callback function is used to report incremental progress of a data - * upload functions (e.g. $obj->write() call). The specified function will - * be periodically called with the number of bytes transferred until the - * entire upload is complete. This callback function can be useful - * for implementing "progress bars" for large uploads/downloads. - * - * The specified callback function should take a single integer parameter. - * - * <code> - * function write_callback($bytes_transferred) { - * print ">> uploaded " . $bytes_transferred . " bytes.\n"; - * # ... do other things ... - * return; - * } - * - * $conn = new CF_Connection($auth_obj); - * $conn->set_write_progress_function("write_callback"); - * $container = $conn->create_container("stuff"); - * $obj = $container->create_object("foo"); - * $obj->write("The callback function will be called during upload."); - * - * # output would look like this: - * # >> uploaded 51 bytes. - * # - * </code> - * - * @param string $func_name the name of the user callback function - */ - function set_write_progress_function($func_name) - { - $this->cfs_http->setWriteProgressFunc($func_name); - } - - /** - * Use the Certificate Authority bundle included with this API - * - * Most versions of PHP with cURL support include an outdated Certificate - * Authority (CA) bundle (the file that lists all valid certificate - * signing authorities). The SSL certificates used by the Cloud Files - * storage system are perfectly valid but have been created/signed by - * a CA not listed in these outdated cURL distributions. - * - * As a work-around, we've included an updated CA bundle obtained - * directly from cURL's web site (http://curl.haxx.se). You can direct - * the API to use this CA bundle by calling this method prior to making - * any remote calls. The best place to use this method is right after - * the CF_Authentication instance has been instantiated. - * - * You can specify your own CA bundle by passing in the full pathname - * to the bundle. You can use the included CA bundle by leaving the - * argument blank. - * - * @param string $path Specify path to CA bundle (default to included) - */ - function ssl_use_cabundle($path=NULL) - { - $this->cfs_http->ssl_use_cabundle($path); - } - - #private function _re_auth() - #{ - # $new_auth = new CF_Authentication( - # $this->cfs_auth->username, - # $this->cfs_auth->api_key, - # $this->cfs_auth->auth_host, - # $this->cfs_auth->account); - # $new_auth->authenticate(); - # $this->cfs_auth = $new_auth; - # $this->cfs_http->setCFAuth($this->cfs_auth); - # return True; - #} -} - -/** - * Container operations - * - * Containers are storage compartments where you put your data (objects). - * A container is similar to a directory or folder on a conventional filesystem - * with the exception that they exist in a flat namespace, you can not create - * containers inside of containers. - * - * You also have the option of marking a Container as "public" so that the - * Objects stored in the Container are publicly available via the CDN. - * - * @package php-cloudfiles - */ -class CF_Container -{ - public $cfs_auth; - public $cfs_http; - public $name; - public $object_count; - public $bytes_used; - - public $cdn_enabled; - public $cdn_uri; - public $cdn_ttl; - public $cdn_log_retention; - public $cdn_acl_user_agent; - public $cdn_acl_referrer; - - /** - * Class constructor - * - * Constructor for Container - * - * @param obj $cfs_auth CF_Authentication instance - * @param obj $cfs_http HTTP connection manager - * @param string $name name of Container - * @param int $count number of Objects stored in this Container - * @param int $bytes number of bytes stored in this Container - * @throws SyntaxException invalid Container name - */ - function __construct(&$cfs_auth, &$cfs_http, $name, $count=0, - $bytes=0, $docdn=True) - { - if (strlen($name) > MAX_CONTAINER_NAME_LEN) { - throw new SyntaxException("Container name exceeds " - . "maximum allowed length."); - } - if (strpos($name, "/") !== False) { - throw new SyntaxException( - "Container names cannot contain a '/' character."); - } - $this->cfs_auth = $cfs_auth; - $this->cfs_http = $cfs_http; - $this->name = $name; - $this->object_count = $count; - $this->bytes_used = $bytes; - $this->cdn_enabled = NULL; - $this->cdn_uri = NULL; - $this->cdn_ttl = NULL; - $this->cdn_log_retention = NULL; - $this->cdn_acl_user_agent = NULL; - $this->cdn_acl_referrer = NULL; - if ($this->cfs_http->getCDNMUrl() != NULL && $docdn) { - $this->_cdn_initialize(); - } - } - - /** - * String representation of Container - * - * Pretty print the Container instance. - * - * @return string Container details - */ - function __toString() - { - $me = sprintf("name: %s, count: %.0f, bytes: %.0f", - $this->name, $this->object_count, $this->bytes_used); - if ($this->cfs_http->getCDNMUrl() != NULL) { - $me .= sprintf(", cdn: %s, cdn uri: %s, cdn ttl: %.0f, logs retention: %s", - $this->is_public() ? "Yes" : "No", - $this->cdn_uri, $this->cdn_ttl, - $this->cdn_log_retention ? "Yes" : "No" - ); - - if ($this->cdn_acl_user_agent != NULL) { - $me .= ", cdn acl user agent: " . $this->cdn_acl_user_agent; - } - - if ($this->cdn_acl_referrer != NULL) { - $me .= ", cdn acl referrer: " . $this->cdn_acl_referrer; - } - - - } - return $me; - } - - /** - * Enable Container content to be served via CDN or modify CDN attributes - * - * Either enable this Container's content to be served via CDN or - * adjust its CDN attributes. This Container will always return the - * same CDN-enabled URI each time it is toggled public/private/public. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $public_container = $conn->create_container("public"); - * - * # CDN-enable the container and set it's TTL for a month - * # - * $public_container->make_public(86400/2); # 12 hours (86400 seconds/day) - * </code> - * - * @param int $ttl the time in seconds content will be cached in the CDN - * @returns string the CDN enabled Container's URI - * @throws CDNNotEnabledException CDN functionality not returned during auth - * @throws AuthenticationException if auth token is not valid/expired - * @throws InvalidResponseException unexpected response - */ - function make_public($ttl=86400) - { - if ($this->cfs_http->getCDNMUrl() == NULL) { - throw new CDNNotEnabledException( - "Authentication response did not indicate CDN availability"); - } - if ($this->cdn_uri != NULL) { - # previously published, assume we're setting new attributes - list($status, $reason, $cdn_uri) = - $this->cfs_http->update_cdn_container($this->name,$ttl, - $this->cdn_log_retention, - $this->cdn_acl_user_agent, - $this->cdn_acl_referrer); - #if ($status == 401 && $this->_re_auth()) { - # return $this->make_public($ttl); - #} - if ($status == 404) { - # this instance _thinks_ the container was published, but the - # cdn management system thinks otherwise - try again with a PUT - list($status, $reason, $cdn_uri) = - $this->cfs_http->add_cdn_container($this->name,$ttl); - - } - } else { - # publish it for first time - list($status, $reason, $cdn_uri) = - $this->cfs_http->add_cdn_container($this->name,$ttl); - } - #if ($status == 401 && $this->_re_auth()) { - # return $this->make_public($ttl); - #} - if (!in_array($status, array(201,202))) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - $this->cdn_enabled = True; - $this->cdn_ttl = $ttl; - $this->cdn_uri = $cdn_uri; - $this->cdn_log_retention = False; - $this->cdn_acl_user_agent = ""; - $this->cdn_acl_referrer = ""; - return $this->cdn_uri; - } - - /** - * Enable ACL restriction by User Agent for this container. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $public_container = $conn->get_container("public"); - * - * # Enable ACL by Referrer - * $public_container->acl_referrer("Mozilla"); - * </code> - * - * @returns boolean True if successful - * @throws CDNNotEnabledException CDN functionality not returned during auth - * @throws AuthenticationException if auth token is not valid/expired - * @throws InvalidResponseException unexpected response - */ - function acl_user_agent($cdn_acl_user_agent="") { - if ($this->cfs_http->getCDNMUrl() == NULL) { - throw new CDNNotEnabledException( - "Authentication response did not indicate CDN availability"); - } - list($status,$reason) = - $this->cfs_http->update_cdn_container($this->name, - $this->cdn_ttl, - $this->cdn_log_retention, - $cdn_acl_user_agent, - $this->cdn_acl_referrer - ); - if (!in_array($status, array(202,404))) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - $this->cdn_acl_user_agent = $cdn_acl_user_agent; - return True; - } - - /** - * Enable ACL restriction by referer for this container. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $public_container = $conn->get_container("public"); - * - * # Enable Referrer - * $public_container->acl_referrer("http://www.example.com/gallery.php"); - * </code> - * - * @returns boolean True if successful - * @throws CDNNotEnabledException CDN functionality not returned during auth - * @throws AuthenticationException if auth token is not valid/expired - * @throws InvalidResponseException unexpected response - */ - function acl_referrer($cdn_acl_referrer="") { - if ($this->cfs_http->getCDNMUrl() == NULL) { - throw new CDNNotEnabledException( - "Authentication response did not indicate CDN availability"); - } - list($status,$reason) = - $this->cfs_http->update_cdn_container($this->name, - $this->cdn_ttl, - $this->cdn_log_retention, - $this->cdn_acl_user_agent, - $cdn_acl_referrer - ); - if (!in_array($status, array(202,404))) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - $this->cdn_acl_referrer = $cdn_acl_referrer; - return True; - } - - /** - * Enable log retention for this CDN container. - * - * Enable CDN log retention on the container. If enabled logs will - * be periodically (at unpredictable intervals) compressed and - * uploaded to a ".CDN_ACCESS_LOGS" container in the form of - * "container_name.YYYYMMDDHH-XXXX.gz". Requires CDN be enabled on - * the account. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $public_container = $conn->get_container("public"); - * - * # Enable logs retention. - * $public_container->log_retention(True); - * </code> - * - * @returns boolean True if successful - * @throws CDNNotEnabledException CDN functionality not returned during auth - * @throws AuthenticationException if auth token is not valid/expired - * @throws InvalidResponseException unexpected response - */ - function log_retention($cdn_log_retention=False) { - if ($this->cfs_http->getCDNMUrl() == NULL) { - throw new CDNNotEnabledException( - "Authentication response did not indicate CDN availability"); - } - list($status,$reason) = - $this->cfs_http->update_cdn_container($this->name, - $this->cdn_ttl, - $cdn_log_retention, - $this->cdn_acl_user_agent, - $this->cdn_acl_referrer - ); - if (!in_array($status, array(202,404))) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - $this->cdn_log_retention = $cdn_log_retention; - return True; - } - - /** - * Disable the CDN sharing for this container - * - * Use this method to disallow distribution into the CDN of this Container's - * content. - * - * NOTE: Any content already cached in the CDN will continue to be served - * from its cache until the TTL expiration transpires. The default - * TTL is typically one day, so "privatizing" the Container will take - * up to 24 hours before the content is purged from the CDN cache. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $public_container = $conn->get_container("public"); - * - * # Disable CDN accessability - * # ... still cached up to a month based on previous example - * # - * $public_container->make_private(); - * </code> - * - * @returns boolean True if successful - * @throws CDNNotEnabledException CDN functionality not returned during auth - * @throws AuthenticationException if auth token is not valid/expired - * @throws InvalidResponseException unexpected response - */ - function make_private() - { - if ($this->cfs_http->getCDNMUrl() == NULL) { - throw new CDNNotEnabledException( - "Authentication response did not indicate CDN availability"); - } - list($status,$reason) = $this->cfs_http->remove_cdn_container($this->name); - #if ($status == 401 && $this->_re_auth()) { - # return $this->make_private(); - #} - if (!in_array($status, array(202,404))) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - $this->cdn_enabled = False; - $this->cdn_ttl = NULL; - $this->cdn_uri = NULL; - $this->cdn_log_retention = NULL; - $this->cdn_acl_user_agent = NULL; - $this->cdn_acl_referrer = NULL; - return True; - } - - /** - * Check if this Container is being publicly served via CDN - * - * Use this method to determine if the Container's content is currently - * available through the CDN. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $public_container = $conn->get_container("public"); - * - * # Display CDN accessability - * # - * $public_container->is_public() ? print "Yes" : print "No"; - * </code> - * - * @returns boolean True if enabled, False otherwise - */ - function is_public() - { - return $this->cdn_enabled == True ? True : False; - } - - /** - * Create a new remote storage Object - * - * Return a new Object instance. If the remote storage Object exists, - * the instance's attributes are populated. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $public_container = $conn->get_container("public"); - * - * # This creates a local instance of a storage object but only creates - * # it in the storage system when the object's write() method is called. - * # - * $pic = $public_container->create_object("baby.jpg"); - * </code> - * - * @param string $obj_name name of storage Object - * @return obj CF_Object instance - */ - function create_object($obj_name=NULL) - { - return new CF_Object($this, $obj_name); - } - - /** - * Return an Object instance for the remote storage Object - * - * Given a name, return a Object instance representing the - * remote storage object. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $public_container = $conn->get_container("public"); - * - * # This call only fetches header information and not the content of - * # the storage object. Use the Object's read() or stream() methods - * # to obtain the object's data. - * # - * $pic = $public_container->get_object("baby.jpg"); - * </code> - * - * @param string $obj_name name of storage Object - * @return obj CF_Object instance - */ - function get_object($obj_name=NULL) - { - return new CF_Object($this, $obj_name, True); - } - - /** - * Return a list of Objects - * - * Return an array of strings listing the Object names in this Container. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $images = $conn->get_container("my photos"); - * - * # Grab the list of all storage objects - * # - * $all_objects = $images->list_objects(); - * - * # Grab subsets of all storage objects - * # - * $first_ten = $images->list_objects(10); - * - * # Note the use of the previous result's last object name being - * # used as the 'marker' parameter to fetch the next 10 objects - * # - * $next_ten = $images->list_objects(10, $first_ten[count($first_ten)-1]); - * - * # Grab images starting with "birthday_party" and default limit/marker - * # to match all photos with that prefix - * # - * $prefixed = $images->list_objects(0, NULL, "birthday"); - * - * # Assuming you have created the appropriate directory marker Objects, - * # you can traverse your pseudo-hierarchical containers - * # with the "path" argument. - * # - * $animals = $images->list_objects(0,NULL,NULL,"pictures/animals"); - * $dogs = $images->list_objects(0,NULL,NULL,"pictures/animals/dogs"); - * </code> - * - * @param int $limit <i>optional</i> only return $limit names - * @param int $marker <i>optional</i> subset of names starting at $marker - * @param string $prefix <i>optional</i> Objects whose names begin with $prefix - * @param string $path <i>optional</i> only return results under "pathname" - * @return array array of strings - * @throws InvalidResponseException unexpected response - */ - function list_objects($limit=0, $marker=NULL, $prefix=NULL, $path=NULL) - { - list($status, $reason, $obj_list) = - $this->cfs_http->list_objects($this->name, $limit, - $marker, $prefix, $path); - #if ($status == 401 && $this->_re_auth()) { - # return $this->list_objects($limit, $marker, $prefix, $path); - #} - if ($status < 200 || $status > 299) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - return $obj_list; - } - - /** - * Return an array of Objects - * - * Return an array of Object instances in this Container. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $images = $conn->get_container("my photos"); - * - * # Grab the list of all storage objects - * # - * $all_objects = $images->get_objects(); - * - * # Grab subsets of all storage objects - * # - * $first_ten = $images->get_objects(10); - * - * # Note the use of the previous result's last object name being - * # used as the 'marker' parameter to fetch the next 10 objects - * # - * $next_ten = $images->list_objects(10, $first_ten[count($first_ten)-1]); - * - * # Grab images starting with "birthday_party" and default limit/marker - * # to match all photos with that prefix - * # - * $prefixed = $images->get_objects(0, NULL, "birthday"); - * - * # Assuming you have created the appropriate directory marker Objects, - * # you can traverse your pseudo-hierarchical containers - * # with the "path" argument. - * # - * $animals = $images->get_objects(0,NULL,NULL,"pictures/animals"); - * $dogs = $images->get_objects(0,NULL,NULL,"pictures/animals/dogs"); - * </code> - * - * @param int $limit <i>optional</i> only return $limit names - * @param int $marker <i>optional</i> subset of names starting at $marker - * @param string $prefix <i>optional</i> Objects whose names begin with $prefix - * @param string $path <i>optional</i> only return results under "pathname" - * @return array array of strings - * @throws InvalidResponseException unexpected response - */ - function get_objects($limit=0, $marker=NULL, $prefix=NULL, $path=NULL) - { - list($status, $reason, $obj_array) = - $this->cfs_http->get_objects($this->name, $limit, - $marker, $prefix, $path); - #if ($status == 401 && $this->_re_auth()) { - # return $this->get_objects($limit, $marker, $prefix, $path); - #} - if ($status < 200 || $status > 299) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - $objects = array(); - foreach ($obj_array as $obj) { - $tmp = new CF_Object($this, $obj["name"], False, False); - $tmp->content_type = $obj["content_type"]; - $tmp->content_length = (float) $obj["bytes"]; - $tmp->set_etag($obj["hash"]); - $tmp->last_modified = $obj["last_modified"]; - $objects[] = $tmp; - } - return $objects; - } - - /** - * Delete a remote storage Object - * - * Given an Object instance or name, permanently remove the remote Object - * and all associated metadata. - * - * Example: - * <code> - * # ... authentication code excluded (see previous examples) ... - * # - * $conn = new CF_Authentication($auth); - * - * $images = $conn->get_container("my photos"); - * - * # Delete specific object - * # - * $images->delete_object("disco_dancing.jpg"); - * </code> - * - * @param obj $obj name or instance of Object to delete - * @return boolean <kbd>True</kbd> if successfully removed - * @throws SyntaxException invalid Object name - * @throws NoSuchObjectException remote Object does not exist - * @throws InvalidResponseException unexpected response - */ - function delete_object($obj) - { - $obj_name = NULL; - if (is_object($obj)) { - if (get_class($obj) == "CF_Object") { - $obj_name = $obj->name; - } - } - if (is_string($obj)) { - $obj_name = $obj; - } - if (!$obj_name) { - throw new SyntaxException("Object name not set."); - } - $status = $this->cfs_http->delete_object($this->name, $obj_name); - #if ($status == 401 && $this->_re_auth()) { - # return $this->delete_object($obj); - #} - if ($status == 404) { - $m = "Specified object '".$this->name."/".$obj_name; - $m.= "' did not exist to delete."; - throw new NoSuchObjectException($m); - } - if ($status != 204) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - return True; - } - - /** - * Helper function to create "path" elements for a given Object name - * - * Given an Object whos name contains '/' path separators, this function - * will create the "directory marker" Objects of one byte with the - * Content-Type of "application/folder". - * - * It assumes the last element of the full path is the "real" Object - * and does NOT create a remote storage Object for that last element. - */ - function create_paths($path_name) - { - if ($path_name[0] == '/') { - $path_name = mb_substr($path_name, 0, 1); - } - $elements = explode('/', $path_name, -1); - $build_path = ""; - foreach ($elements as $idx => $val) { - if (!$build_path) { - $build_path = $val; - } else { - $build_path .= "/" . $val; - } - $obj = new CF_Object($this, $build_path); - $obj->content_type = "application/directory"; - $obj->write(".", 1); - } - } - - /** - * Internal method to grab CDN/Container info if appropriate to do so - * - * @throws InvalidResponseException unexpected response - */ - private function _cdn_initialize() - { - list($status, $reason, $cdn_enabled, $cdn_uri, $cdn_ttl, - $cdn_log_retention, $cdn_acl_user_agent, $cdn_acl_referrer) = - $this->cfs_http->head_cdn_container($this->name); - #if ($status == 401 && $this->_re_auth()) { - # return $this->_cdn_initialize(); - #} - if (!in_array($status, array(204,404))) { - throw new InvalidResponseException( - "Invalid response (".$status."): ".$this->cfs_http->get_error()); - } - $this->cdn_enabled = $cdn_enabled; - $this->cdn_uri = $cdn_uri; - $this->cdn_ttl = $cdn_ttl; - $this->cdn_log_retention = $cdn_log_retention; - $this->cdn_acl_user_agent = $cdn_acl_user_agent; - $this->cdn_acl_referrer = $cdn_acl_referrer; - } - - #private function _re_auth() - #{ - # $new_auth = new CF_Authentication( - # $this->cfs_auth->username, - # $this->cfs_auth->api_key, - # $this->cfs_auth->auth_host, - # $this->cfs_auth->account); - # $new_auth->authenticate(); - # $this->cfs_auth = $new_auth; - # $this->cfs_http->setCFAuth($this->cfs_auth); - # return True; - #} -} - - -/** - * Object operations - * - * An Object is analogous to a file on a conventional filesystem. You can - * read data from, or write data to your Objects. You can also associate - * arbitrary metadata with them. - * - * @package php-cloudfiles - */ -class CF_Object -{ - public $container; - public $name; - public $last_modified; - public $content_type; - public $content_length; - public $metadata; - private $etag; - - /** - * Class constructor - * - * @param obj $container CF_Container instance - * @param string $name name of Object - * @param boolean $force_exists if set, throw an error if Object doesn't exist - */ - function __construct(&$container, $name, $force_exists=False, $dohead=True) - { - if ($name[0] == "/") { - $r = "Object name '".$name; - $r .= "' cannot contain begin with a '/' character."; - throw new SyntaxException($r); - } - if (strlen($name) > MAX_OBJECT_NAME_LEN) { - throw new SyntaxException("Object name exceeds " - . "maximum allowed length."); - } - $this->container = $container; - $this->name = $name; - $this->etag = NULL; - $this->_etag_override = False; - $this->last_modified = NULL; - $this->content_type = NULL; - $this->content_length = 0; - $this->metadata = array(); - if ($dohead) { - if (!$this->_initialize() && $force_exists) { - throw new NoSuchObjectException("No such object '".$name."'"); - } - } - } - - /** - * String representation of Object - * - * Pretty print the Object's location and name - * - * @return string Object information - */ - function __toString() - { - return $this->container->name . "/" . $this->name; - } - - /** - * Internal check to get the proper mimetype. - * - * This function would go over the available PHP methods to get - * the MIME type. - * - * By default it will try to use the PHP fileinfo library which is - * available from PHP 5.3 or as an PECL extension - * (http://pecl.php.net/package/Fileinfo). - * - * It will get the magic file by default from the system wide file - * which is usually available in /usr/share/magic on Unix or try - * to use the file specified in the source directory of the API - * (share directory). - * - * if fileinfo is not available it will try to use the internal - * mime_content_type function. - * - * @param string $handle name of file or buffer to guess the type from - * @return boolean <kbd>True</kbd> if successful - * @throws BadContentTypeException - */ - function _guess_content_type($handle) { - if ($this->content_type) - return; - - if (function_exists("finfo_open")) { - $local_magic = dirname(__FILE__) . "/share/magic"; - $finfo = @finfo_open(FILEINFO_MIME, $local_magic); - - if (!$finfo) - $finfo = @finfo_open(FILEINFO_MIME); - - if ($finfo) { - - if (is_file((string)$handle)) - $ct = @finfo_file($finfo, $handle); - else - $ct = @finfo_buffer($finfo, $handle); - - /* PHP 5.3 fileinfo display extra information like - charset so we remove everything after the ; since - we are not into that stuff */ - if ($ct) { - $extra_content_type_info = strpos($ct, "; "); - if ($extra_content_type_info) - $ct = substr($ct, 0, $extra_content_type_info); - } - - if ($ct && $ct != 'application/octet-stream') - $this->content_type = $ct; - - @finfo_close($finfo); - } - } - - if (!$this->content_type && (string)is_file($handle) && function_exists("mime_content_type")) { - $this->content_type = @mime_content_type($handle); - } - - if (!$this->content_type) { - throw new BadContentTypeException("Required Content-Type not set"); - } - return True; - } - - /** - * String representation of the Object's public URI - * - * A string representing the Object's public URI assuming that it's - * parent Container is CDN-enabled. - * - * Example: - * <code> - * # ... authentication/connection/container code excluded - * # ... see previous examples - * - * # Print out the Object's CDN URI (if it has one) in an HTML img-tag - * # - * print "<img src='$pic->public_uri()' />\n"; - * </code> - * - * @return string Object's public URI or NULL - */ - function public_uri() - { - if ($this->container->cdn_enabled) { - return $this->container->cdn_uri . "/" . $this->name; - } - return NULL; - } - - /** - * Read the remote Object's data - * - * Returns the Object's data. This is useful for smaller Objects such - * as images or office documents. Object's with larger content should use - * the stream() method below. - * - * Pass in $hdrs array to set specific custom HTTP headers such as - * If-Match, If-None-Match, If-Modified-Since, Range, etc. - * - * Example: - * <code> - * # ... authentication/connection/container code excluded - * # ... see previous examples - * - * $my_docs = $conn->get_container("documents"); - * $doc = $my_docs->get_object("README"); - * $data = $doc->read(); # read image content into a string variable - * print $data; - * - * # Or see stream() below for a different example. - * # - * </code> - * - * @param array $hdrs user-defined headers (Range, If-Match, etc.) - * @return string Object's data - * @throws InvalidResponseException unexpected response - */ - function read($hdrs=array()) - { - list($status, $reason, $data) = - $this->container->cfs_http->get_object_to_string($this, $hdrs); - #if ($status == 401 && $this->_re_auth()) { - # return $this->read($hdrs); - #} - if (($status < 200) || ($status > 299 - && $status != 412 && $status != 304)) { - throw new InvalidResponseException("Invalid response (".$status."): " - . $this->container->cfs_http->get_error()); - } - return $data; - } - - /** - * Streaming read of Object's data - * - * Given an open PHP resource (see PHP's fopen() method), fetch the Object's - * data and write it to the open resource handle. This is useful for - * streaming an Object's content to the browser (videos, images) or for - * fetching content to a local file. - * - * Pass in $hdrs array to set specific custom HTTP headers such as - * If-Match, If-None-Match, If-Modified-Since, Range, etc. - * - * Example: - * <code> - * # ... authentication/connection/container code excluded - * # ... see previous examples - * - * # Assuming this is a web script to display the README to the - * # user's browser: - * # - * <?php - * // grab README from storage system - * // - * $my_docs = $conn->get_container("documents"); - * $doc = $my_docs->get_object("README"); - * - * // Hand it back to user's browser with appropriate content-type - * // - * header("Content-Type: " . $doc->content_type); - * $output = fopen("php://output", "w"); - * $doc->stream($output); # stream object content to PHP's output buffer - * fclose($output); - * ?> - * - * # See read() above for a more simple example. - * # - * </code> - * - * @param resource $fp open resource for writing data to - * @param array $hdrs user-defined headers (Range, If-Match, etc.) - * @return string Object's data - * @throws InvalidResponseException unexpected response - */ - function stream(&$fp, $hdrs=array()) - { - list($status, $reason) = - $this->container->cfs_http->get_object_to_stream($this,$fp,$hdrs); - #if ($status == 401 && $this->_re_auth()) { - # return $this->stream($fp, $hdrs); - #} - if (($status < 200) || ($status > 299 - && $status != 412 && $status != 304)) { - throw new InvalidResponseException("Invalid response (".$status."): " - .$reason); - } - return True; - } - - /** - * Store new Object metadata - * - * Write's an Object's metadata to the remote Object. This will overwrite - * an prior Object metadata. - * - * Example: - * <code> - * # ... authentication/connection/container code excluded - * # ... see previous examples - * - * $my_docs = $conn->get_container("documents"); - * $doc = $my_docs->get_object("README"); - * - * # Define new metadata for the object - * # - * $doc->metadata = array( - * "Author" => "EJ", - * "Subject" => "How to use the PHP tests", - * "Version" => "1.2.2" - * ); - * - * # Push the new metadata up to the storage system - * # - * $doc->sync_metadata(); - * </code> - * - * @return boolean <kbd>True</kbd> if successful, <kbd>False</kbd> otherwise - * @throws InvalidResponseException unexpected response - */ - function sync_metadata() - { - if (!empty($this->metadata)) { - $status = $this->container->cfs_http->update_object($this); - #if ($status == 401 && $this->_re_auth()) { - # return $this->sync_metadata(); - #} - if ($status != 202) { - throw new InvalidResponseException("Invalid response (" - .$status."): ".$this->container->cfs_http->get_error()); - } - return True; - } - return False; - } - - /** - * Upload Object's data to Cloud Files - * - * Write data to the remote Object. The $data argument can either be a - * PHP resource open for reading (see PHP's fopen() method) or an in-memory - * variable. If passing in a PHP resource, you must also include the $bytes - * parameter. - * - * Example: - * <code> - * # ... authentication/connection/container code excluded - * # ... see previous examples - * - * $my_docs = $conn->get_container("documents"); - * $doc = $my_docs->get_object("README"); - * - * # Upload placeholder text in my README - * # - * $doc->write("This is just placeholder text for now..."); - * </code> - * - * @param string|resource $data string or open resource - * @param float $bytes amount of data to upload (required for resources) - * @param boolean $verify generate, send, and compare MD5 checksums - * @return boolean <kbd>True</kbd> when data uploaded successfully - * @throws SyntaxException missing required parameters - * @throws BadContentTypeException if no Content-Type was/could be set - * @throws MisMatchedChecksumException $verify is set and checksums unequal - * @throws InvalidResponseException unexpected response - */ - function write($data=NULL, $bytes=0, $verify=True) - { - if (!$data) { - throw new SyntaxException("Missing data source."); - } - if ($bytes > MAX_OBJECT_SIZE) { - throw new SyntaxException("Bytes exceeds maximum object size."); - } - if ($verify) { - if (!$this->_etag_override) { - $this->etag = $this->compute_md5sum($data); - } - } else { - $this->etag = NULL; - } - - $close_fh = False; - if (!is_resource($data)) { - # A hack to treat string data as a file handle. php://memory feels - # like a better option, but it seems to break on Windows so use - # a temporary file instead. - # - $fp = fopen("php://temp", "wb+"); - #$fp = fopen("php://memory", "wb+"); - fwrite($fp, $data, strlen($data)); - rewind($fp); - $close_fh = True; - $this->content_length = (float) strlen($data); - if ($this->content_length > MAX_OBJECT_SIZE) { - throw new SyntaxException("Data exceeds maximum object size"); - } - $ct_data = substr($data, 0, 64); - } else { - $this->content_length = $bytes; - $fp = $data; - $ct_data = fread($data, 64); - rewind($data); - } - - $this->_guess_content_type($ct_data); - - list($status, $reason, $etag) = - $this->container->cfs_http->put_object($this, $fp); - #if ($status == 401 && $this->_re_auth()) { - # return $this->write($data, $bytes, $verify); - #} - if ($status == 412) { - if ($close_fh) { fclose($fp); } - throw new SyntaxException("Missing Content-Type header"); - } - if ($status == 422) { - if ($close_fh) { fclose($fp); } - throw new MisMatchedChecksumException( - "Supplied and computed checksums do not match."); - } - if ($status != 201) { - if ($close_fh) { fclose($fp); } - throw new InvalidResponseException("Invalid response (".$status."): " - . $this->container->cfs_http->get_error()); - } - if (!$verify) { - $this->etag = $etag; - } - if ($close_fh) { fclose($fp); } - return True; - } - - /** - * Upload Object data from local filename - * - * This is a convenience function to upload the data from a local file. A - * True value for $verify will cause the method to compute the Object's MD5 - * checksum prior to uploading. - * - * Example: - * <code> - * # ... authentication/connection/container code excluded - * # ... see previous examples - * - * $my_docs = $conn->get_container("documents"); - * $doc = $my_docs->get_object("README"); - * - * # Upload my local README's content - * # - * $doc->load_from_filename("/home/ej/cloudfiles/readme"); - * </code> - * - * @param string $filename full path to local file - * @param boolean $verify enable local/remote MD5 checksum validation - * @return boolean <kbd>True</kbd> if data uploaded successfully - * @throws SyntaxException missing required parameters - * @throws BadContentTypeException if no Content-Type was/could be set - * @throws MisMatchedChecksumException $verify is set and checksums unequal - * @throws InvalidResponseException unexpected response - * @throws IOException error opening file - */ - function load_from_filename($filename, $verify=True) - { - $fp = @fopen($filename, "r"); - if (!$fp) { - throw new IOException("Could not open file for reading: ".$filename); - } - - clearstatcache(); - - $size = (float) sprintf("%u", filesize($filename)); - if ($size > MAX_OBJECT_SIZE) { - throw new SyntaxException("File size exceeds maximum object size."); - } - - $this->_guess_content_type($filename); - - $this->write($fp, $size, $verify); - fclose($fp); - return True; - } - - /** - * Save Object's data to local filename - * - * Given a local filename, the Object's data will be written to the newly - * created file. - * - * Example: - * <code> - * # ... authentication/connection/container code excluded - * # ... see previous examples - * - * # Whoops! I deleted my local README, let me download/save it - * # - * $my_docs = $conn->get_container("documents"); - * $doc = $my_docs->get_object("README"); - * - * $doc->save_to_filename("/home/ej/cloudfiles/readme.restored"); - * </code> - * - * @param string $filename name of local file to write data to - * @return boolean <kbd>True</kbd> if successful - * @throws IOException error opening file - * @throws InvalidResponseException unexpected response - */ - function save_to_filename($filename) - { - $fp = @fopen($filename, "wb"); - if (!$fp) { - throw new IOException("Could not open file for writing: ".$filename); - } - $result = $this->stream($fp); - fclose($fp); - return $result; - } - - /** - * Set Object's MD5 checksum - * - * Manually set the Object's ETag. Including the ETag is mandatory for - * Cloud Files to perform end-to-end verification. Omitting the ETag forces - * the user to handle any data integrity checks. - * - * @param string $etag MD5 checksum hexidecimal string - */ - function set_etag($etag) - { - $this->etag = $etag; - $this->_etag_override = True; - } - - /** - * Object's MD5 checksum - * - * Accessor method for reading Object's private ETag attribute. - * - * @return string MD5 checksum hexidecimal string - */ - function getETag() - { - return $this->etag; - } - - /** - * Compute the MD5 checksum - * - * Calculate the MD5 checksum on either a PHP resource or data. The argument - * may either be a local filename, open resource for reading, or a string. - * - * <b>WARNING:</b> if you are uploading a big file over a stream - * it could get very slow to compute the md5 you probably want to - * set the $verify parameter to False in the write() method and - * compute yourself the md5 before if you have it. - * - * @param filename|obj|string $data filename, open resource, or string - * @return string MD5 checksum hexidecimal string - */ - function compute_md5sum(&$data) - { - - if (function_exists("hash_init") && is_resource($data)) { - $ctx = hash_init('md5'); - while (!feof($data)) { - $buffer = fgets($data, 65536); - hash_update($ctx, $buffer); - } - $md5 = hash_final($ctx, false); - rewind($data); - } elseif ((string)is_file($data)) { - $md5 = md5_file($data); - } else { - $md5 = md5($data); - } - return $md5; - } - - /** - * PRIVATE: fetch information about the remote Object if it exists - */ - private function _initialize() - { - list($status, $reason, $etag, $last_modified, $content_type, - $content_length, $metadata) = - $this->container->cfs_http->head_object($this); - #if ($status == 401 && $this->_re_auth()) { - # return $this->_initialize(); - #} - if ($status == 404) { - return False; - } - if ($status < 200 || $status > 299) { - throw new InvalidResponseException("Invalid response (".$status."): " - . $this->container->cfs_http->get_error()); - } - $this->etag = $etag; - $this->last_modified = $last_modified; - $this->content_type = $content_type; - $this->content_length = $content_length; - $this->metadata = $metadata; - return True; - } - - #private function _re_auth() - #{ - # $new_auth = new CF_Authentication( - # $this->cfs_auth->username, - # $this->cfs_auth->api_key, - # $this->cfs_auth->auth_host, - # $this->cfs_auth->account); - # $new_auth->authenticate(); - # $this->container->cfs_auth = $new_auth; - # $this->container->cfs_http->setCFAuth($this->cfs_auth); - # return True; - #} -} - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * c-hanging-comment-ender-p: nil - * End: - */ -?> diff --git a/cloudfiles/cloudfiles_exceptions.php b/cloudfiles/cloudfiles_exceptions.php deleted file mode 100644 index 5624d6b..0000000 --- a/cloudfiles/cloudfiles_exceptions.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php -/** - * Custom Exceptions for the CloudFiles API - * - * Requres PHP 5.x (for Exceptions and OO syntax) - * - * See COPYING for license information. - * - * @author Eric "EJ" Johnson <ej@racklabs.com> - * @copyright Copyright (c) 2008, Rackspace US, Inc. - * @package php-cloudfiles-exceptions - */ - -/** - * Custom Exceptions for the CloudFiles API - * @package php-cloudfiles-exceptions - */ -class SyntaxException extends Exception { } -class AuthenticationException extends Exception { } -class InvalidResponseException extends Exception { } -class NonEmptyContainerException extends Exception { } -class NoSuchObjectException extends Exception { } -class NoSuchContainerException extends Exception { } -class NoSuchAccountException extends Exception { } -class MisMatchedChecksumException extends Exception { } -class IOException extends Exception { } -class CDNNotEnabledException extends Exception { } -class BadContentTypeException extends Exception { } -class InvalidUTF8Exception extends Exception { } -class ConnectionNotOpenException extends Exception { } - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * c-hanging-comment-ender-p: nil - * End: - */ -?> diff --git a/cloudfiles/cloudfiles_http.php b/cloudfiles/cloudfiles_http.php deleted file mode 100644 index 5409293..0000000 --- a/cloudfiles/cloudfiles_http.php +++ /dev/null @@ -1,1338 +0,0 @@ -<?php -/** - * This is an HTTP client class for Cloud Files. It uses PHP's cURL module - * to handle the actual HTTP request/response. This is NOT a generic HTTP - * client class and is only used to abstract out the HTTP communication for - * the PHP Cloud Files API. - * - * This module was designed to re-use existing HTTP(S) connections between - * subsequent operations. For example, performing multiple PUT operations - * will re-use the same connection. - * - * This modules also provides support for streaming content into and out - * of Cloud Files. The majority (all?) of the PHP HTTP client modules expect - * to read the server's response into a string variable. This will not work - * with large files without killing your server. Methods like, - * get_object_to_stream() and put_object() take an open filehandle - * argument for streaming data out of or into Cloud Files. - * - * Requres PHP 5.x (for Exceptions and OO syntax) - * - * See COPYING for license information. - * - * @author Eric "EJ" Johnson <ej@racklabs.com> - * @copyright Copyright (c) 2008, Rackspace US, Inc. - * @package php-cloudfiles-http - */ - -/** - */ -require_once("cloudfiles_exceptions.php"); - -define("PHP_CF_VERSION", "1.7.4"); -define("USER_AGENT", sprintf("PHP-CloudFiles/%s", PHP_CF_VERSION)); -define("ACCOUNT_CONTAINER_COUNT", "X-Account-Container-Count"); -define("ACCOUNT_BYTES_USED", "X-Account-Bytes-Used"); -define("CONTAINER_OBJ_COUNT", "X-Container-Object-Count"); -define("CONTAINER_BYTES_USED", "X-Container-Bytes-Used"); -define("METADATA_HEADER", "X-Object-Meta-"); -define("CDN_URI", "X-CDN-URI"); -define("CDN_ENABLED", "X-CDN-Enabled"); -define("CDN_LOG_RETENTION", "X-Log-Retention"); -define("CDN_ACL_USER_AGENT", "X-User-Agent-ACL"); -define("CDN_ACL_REFERRER", "X-Referrer-ACL"); -define("CDN_TTL", "X-TTL"); -define("CDNM_URL", "X-CDN-Management-Url"); -define("STORAGE_URL", "X-Storage-Url"); -define("AUTH_TOKEN", "X-Auth-Token"); -define("AUTH_USER_HEADER", "X-Auth-User"); -define("AUTH_KEY_HEADER", "X-Auth-Key"); -define("AUTH_USER_HEADER_LEGACY", "X-Storage-User"); -define("AUTH_KEY_HEADER_LEGACY", "X-Storage-Pass"); -define("AUTH_TOKEN_LEGACY", "X-Storage-Token"); - -/** - * HTTP/cURL wrapper for Cloud Files - * - * This class should not be used directly. It's only purpose is to abstract - * out the HTTP communication from the main API. - * - * @package php-cloudfiles-http - */ -class CF_Http -{ - private $error_str; - private $dbug; - private $cabundle_path; - private $api_version; - - # Authentication instance variables - # - private $storage_url; - private $cdnm_url; - private $auth_token; - - # Request/response variables - # - private $response_status; - private $response_reason; - private $connections; - - # Variables used for content/header callbacks - # - private $_user_read_progress_callback_func; - private $_user_write_progress_callback_func; - private $_write_callback_type; - private $_text_list; - private $_account_container_count; - private $_account_bytes_used; - private $_container_object_count; - private $_container_bytes_used; - private $_obj_etag; - private $_obj_last_modified; - private $_obj_content_type; - private $_obj_content_length; - private $_obj_metadata; - private $_obj_write_resource; - private $_obj_write_string; - private $_cdn_enabled; - private $_cdn_uri; - private $_cdn_ttl; - private $_cdn_log_retention; - private $_cdn_acl_user_agent; - private $_cdn_acl_referrer; - - function __construct($api_version) - { - $this->dbug = False; - $this->cabundle_path = NULL; - $this->api_version = $api_version; - $this->error_str = NULL; - - $this->storage_url = NULL; - $this->cdnm_url = NULL; - $this->auth_token = NULL; - - $this->response_status = NULL; - $this->response_reason = NULL; - - # Curl connections array - since there is no way to "re-set" the - # connection paramaters for a cURL handle, we keep an array of - # the unique use-cases and funnel all of those same type - # requests through the appropriate curl connection. - # - $this->connections = array( - "GET_CALL" => NULL, # GET objects/containers/lists - "PUT_OBJ" => NULL, # PUT object - "HEAD" => NULL, # HEAD requests - "PUT_CONT" => NULL, # PUT container - "DEL_POST" => NULL, # DELETE containers/objects, POST objects - ); - - $this->_user_read_progress_callback_func = NULL; - $this->_user_write_progress_callback_func = NULL; - $this->_write_callback_type = NULL; - $this->_text_list = array(); - $this->_return_list = NULL; - $this->_account_container_count = 0; - $this->_account_bytes_used = 0; - $this->_container_object_count = 0; - $this->_container_bytes_used = 0; - $this->_obj_write_resource = NULL; - $this->_obj_write_string = ""; - $this->_obj_etag = NULL; - $this->_obj_last_modified = NULL; - $this->_obj_content_type = NULL; - $this->_obj_content_length = NULL; - $this->_obj_metadata = array(); - $this->_cdn_enabled = NULL; - $this->_cdn_uri = NULL; - $this->_cdn_ttl = NULL; - $this->_cdn_log_retention = NULL; - $this->_cdn_acl_user_agent = NULL; - $this->_cdn_acl_referrer = NULL; - - # The OS list with a PHP without an updated CA File for CURL to - # connect to SSL Websites. It is the first 3 letters of the PHP_OS - # variable. - $OS_CAFILE_NONUPDATED=array( - "win","dar" - ); - - if (in_array((strtolower (substr(PHP_OS, 0,3))), $OS_CAFILE_NONUPDATED)) - $this->ssl_use_cabundle(); - - } - - function ssl_use_cabundle($path=NULL) - { - if ($path) { - $this->cabundle_path = $path; - } else { - $this->cabundle_path = dirname(__FILE__) . "/share/cacert.pem"; - } - if (!file_exists($this->cabundle_path)) { - throw new IOException("Could not use CA bundle: " - . $this->cabundle_path); - } - return; - } - - # Uses separate cURL connection to authenticate - # - function authenticate($user, $pass, $acct=NULL, $host=NULL) - { - $path = array(); - if (isset($acct) || isset($host)) { - $headers = array( - sprintf("%s: %s", AUTH_USER_HEADER_LEGACY, $user), - sprintf("%s: %s", AUTH_KEY_HEADER_LEGACY, $pass), - ); - $path[] = $host; - $path[] = rawurlencode(sprintf("v%d",$this->api_version)); - $path[] = rawurlencode($acct); - } else { - $headers = array( - sprintf("%s: %s", AUTH_USER_HEADER, $user), - sprintf("%s: %s", AUTH_KEY_HEADER, $pass), - ); - $path[] = "https://auth.api.rackspacecloud.com"; - } - $path[] = "v1.0"; - $url = implode("/", $path); - - $curl_ch = curl_init(); - if (!is_null($this->cabundle_path)) { - curl_setopt($curl_ch, CURLOPT_SSL_VERIFYPEER, True); - curl_setopt($curl_ch, CURLOPT_CAINFO, $this->cabundle_path); - } - curl_setopt($curl_ch, CURLOPT_VERBOSE, $this->dbug); - curl_setopt($curl_ch, CURLOPT_FOLLOWLOCATION, 1); - curl_setopt($curl_ch, CURLOPT_MAXREDIRS, 4); - curl_setopt($curl_ch, CURLOPT_HEADER, 0); - curl_setopt($curl_ch, CURLOPT_HTTPHEADER, $headers); - curl_setopt($curl_ch, CURLOPT_USERAGENT, USER_AGENT); - curl_setopt($curl_ch, CURLOPT_RETURNTRANSFER, TRUE); - curl_setopt($curl_ch, CURLOPT_HEADERFUNCTION,array(&$this,'_auth_hdr_cb')); - curl_setopt($curl_ch, CURLOPT_URL, $url); - curl_exec($curl_ch); - curl_close($curl_ch); - - return array($this->response_status, $this->response_reason, - $this->storage_url, $this->cdnm_url, $this->auth_token); - } - - # (CDN) GET /v1/Account - # - function list_cdn_containers() - { - $conn_type = "GET_CALL"; - $url_path = $this->_make_path("CDN", $container_name); - - $this->_write_callback_type = "TEXT_LIST"; - $return_code = $this->_send_request($conn_type, $url_path); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - array(0,$this->error_str,array()); - } - if ($return_code == 401) { - return array($return_code,"Unauthorized",array()); - } - if ($return_code == 404) { - return array($return_code,"Account not found.",array()); - } - if ($return_code == 204) { - return array($return_code,"Account has no CDN enabled Containers.", - array()); - } - if ($return_code == 200) { - $this->create_array(); - return array($return_code,$this->response_reason,$this->_text_list); - } - $this->error_str = "Unexpected HTTP response: ".$this->response_reason; - return array($return_code,$this->error_str,array()); - } - - # (CDN) POST /v1/Account/Container - # - function update_cdn_container($container_name, $ttl=86400, $cdn_log_retention=False, - $cdn_acl_user_agent="", $cdn_acl_referrer) - { - if ($container_name == "") - throw new SyntaxException("Container name not set."); - - if ($container_name != "0" and !isset($container_name)) - throw new SyntaxException("Container name not set."); - - $url_path = $this->_make_path("CDN", $container_name); - $hdrs = array( - CDN_ENABLED => "True", - CDN_TTL => $ttl, - CDN_LOG_RETENTION => $cdn_log_retention ? "True" : "False", - CDN_ACL_USER_AGENT => $cdn_acl_user_agent, - CDN_ACL_REFERRER => $cdn_acl_referrer, - ); - $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST"); - if ($return_code == 401) { - $this->error_str = "Unauthorized"; - return array($return_code, $this->error_str, NULL); - } - if ($return_code == 404) { - $this->error_str = "Container not found."; - return array($return_code, $this->error_str, NULL); - } - if ($return_code != 202) { - $this->error_str="Unexpected HTTP response: ".$this->response_reason; - return array($return_code, $this->error_str, NULL); - } - return array($return_code, "Accepted", $this->_cdn_uri); - - } - - # (CDN) PUT /v1/Account/Container - # - function add_cdn_container($container_name, $ttl=86400) - { - if ($container_name == "") - throw new SyntaxException("Container name not set."); - - if ($container_name != "0" and !isset($container_name)) - throw new SyntaxException("Container name not set."); - - $url_path = $this->_make_path("CDN", $container_name); - $hdrs = array( - CDN_ENABLED => "True", - CDN_TTL => $ttl, - ); - $return_code = $this->_send_request("PUT_CONT", $url_path, $hdrs); - if ($return_code == 401) { - $this->error_str = "Unauthorized"; - return array($return_code,$this->response_reason,False); - } - if (!in_array($return_code, array(201,202))) { - $this->error_str="Unexpected HTTP response: ".$this->response_reason; - return array($return_code,$this->response_reason,False); - } - return array($return_code,$this->response_reason,$this->_cdn_uri); - } - - # (CDN) POST /v1/Account/Container - # - function remove_cdn_container($container_name) - { - if ($container_name == "") - throw new SyntaxException("Container name not set."); - - if ($container_name != "0" and !isset($container_name)) - throw new SyntaxException("Container name not set."); - - $url_path = $this->_make_path("CDN", $container_name); - $hdrs = array(CDN_ENABLED => "False"); - $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST"); - if ($return_code == 401) { - $this->error_str = "Unauthorized"; - return array($return_code, $this->error_str); - } - if ($return_code == 404) { - $this->error_str = "Container not found."; - return array($return_code, $this->error_str); - } - if ($return_code != 202) { - $this->error_str="Unexpected HTTP response: ".$this->response_reason; - return array($return_code, $this->error_str); - } - return array($return_code, "Accepted"); - } - - # (CDN) HEAD /v1/Account - # - function head_cdn_container($container_name) - { - if ($container_name == "") - throw new SyntaxException("Container name not set."); - - if ($container_name != "0" and !isset($container_name)) - throw new SyntaxException("Container name not set."); - - $conn_type = "HEAD"; - $url_path = $this->_make_path("CDN", $container_name); - $return_code = $this->_send_request($conn_type, $url_path); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - return array(0,$this->error_str,NULL,NULL,NULL,NULL,NULL,NULL); - } - if ($return_code == 401) { - return array($return_code,"Unauthorized",NULL,NULL,NULL,NULL,NULL,NULL); - } - if ($return_code == 404) { - return array($return_code,"Account not found.",NULL,NULL,NULL,NULL,NULL,NULL); - } - if ($return_code == 204) { - return array($return_code,$this->response_reason, - $this->_cdn_enabled, $this->_cdn_uri, $this->_cdn_ttl, - $this->_cdn_log_retention, - $this->_cdn_acl_user_agent, - $this->_cdn_acl_referrer - ); - } - return array($return_code,$this->response_reason, - NULL,NULL,NULL, - $this->_cdn_log_retention, - $this->_cdn_acl_user_agent, - $this->_cdn_acl_referrer - ); - } - - # GET /v1/Account - # - function list_containers($limit=0, $marker=NULL) - { - $conn_type = "GET_CALL"; - $url_path = $this->_make_path(); - - $limit = intval($limit); - $params = array(); - if ($limit > 0) { - $params[] = "limit=$limit"; - } - if ($marker) { - $params[] = "marker=".rawurlencode($marker); - } - if (!empty($params)) { - $url_path .= "?" . implode("&", $params); - } - - $this->_write_callback_type = "TEXT_LIST"; - $return_code = $this->_send_request($conn_type, $url_path); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - return array(0,$this->error_str,array()); - } - if ($return_code == 204) { - return array($return_code, "Account has no containers.", array()); - } - if ($return_code == 404) { - $this->error_str = "Invalid account name for authentication token."; - return array($return_code,$this->error_str,array()); - } - if ($return_code == 200) { - $this->create_array(); - return array($return_code, $this->response_reason, $this->_text_list); - } - $this->error_str = "Unexpected HTTP response: ".$this->response_reason; - return array($return_code,$this->error_str,array()); - } - - # GET /v1/Account?format=json - # - function list_containers_info($limit=0, $marker=NULL) - { - $conn_type = "GET_CALL"; - $url_path = $this->_make_path() . "?format=json"; - - $limit = intval($limit); - $params = array(); - if ($limit > 0) { - $params[] = "limit=$limit"; - } - if ($marker) { - $params[] = "marker=".rawurlencode($marker); - } - if (!empty($params)) { - $url_path .= "&" . implode("&", $params); - } - - $this->_write_callback_type = "OBJECT_STRING"; - $return_code = $this->_send_request($conn_type, $url_path); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - return array(0,$this->error_str,array()); - } - if ($return_code == 204) { - return array($return_code, "Account has no containers.", array()); - } - if ($return_code == 404) { - $this->error_str = "Invalid account name for authentication token."; - return array($return_code,$this->error_str,array()); - } - if ($return_code == 200) { - $json_body = json_decode($this->_obj_write_string, True); - return array($return_code, $this->response_reason, $json_body); - } - $this->error_str = "Unexpected HTTP response: ".$this->response_reason; - return array($return_code,$this->error_str,array()); - } - - # HEAD /v1/Account - # - function head_account() - { - $conn_type = "HEAD"; - - $url_path = $this->_make_path(); - $return_code = $this->_send_request($conn_type,$url_path); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - array(0,$this->error_str,0,0); - } - if ($return_code == 404) { - return array($return_code,"Account not found.",0,0); - } - if ($return_code == 204) { - return array($return_code,$this->response_reason, - $this->_account_container_count, $this->_account_bytes_used); - } - return array($return_code,$this->response_reason,0,0); - } - - # PUT /v1/Account/Container - # - function create_container($container_name) - { - if ($container_name == "") - throw new SyntaxException("Container name not set."); - - if ($container_name != "0" and !isset($container_name)) - throw new SyntaxException("Container name not set."); - - $url_path = $this->_make_path("STORAGE", $container_name); - $return_code = $this->_send_request("PUT_CONT",$url_path); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - return False; - } - return $return_code; - } - - # DELETE /v1/Account/Container - # - function delete_container($container_name) - { - if ($container_name == "") - throw new SyntaxException("Container name not set."); - - if ($container_name != "0" and !isset($container_name)) - throw new SyntaxException("Container name not set."); - - $url_path = $this->_make_path("STORAGE", $container_name); - $return_code = $this->_send_request("DEL_POST",$url_path,array(),"DELETE"); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - } - if ($return_code == 409) { - $this->error_str = "Container must be empty prior to removing it."; - } - if ($return_code == 404) { - $this->error_str = "Specified container did not exist to delete."; - } - if ($return_code != 204) { - $this->error_str = "Unexpected HTTP return code: $return_code."; - } - return $return_code; - } - - # GET /v1/Account/Container - # - function list_objects($cname,$limit=0,$marker=NULL,$prefix=NULL,$path=NULL) - { - if (!$cname) { - $this->error_str = "Container name not set."; - return array(0, $this->error_str, array()); - } - - $url_path = $this->_make_path("STORAGE", $cname); - - $limit = intval($limit); - $params = array(); - if ($limit > 0) { - $params[] = "limit=$limit"; - } - if ($marker) { - $params[] = "marker=".rawurlencode($marker); - } - if ($prefix) { - $params[] = "prefix=".rawurlencode($prefix); - } - if ($path) { - $params[] = "path=".rawurlencode($path); - } - if (!empty($params)) { - $url_path .= "?" . implode("&", $params); - } - - $conn_type = "GET_CALL"; - $this->_write_callback_type = "TEXT_LIST"; - $return_code = $this->_send_request($conn_type,$url_path); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - return array(0,$this->error_str,array()); - } - if ($return_code == 204) { - $this->error_str = "Container has no Objects."; - return array($return_code,$this->error_str,array()); - } - if ($return_code == 404) { - $this->error_str = "Container has no Objects."; - return array($return_code,$this->error_str,array()); - } - if ($return_code == 200) { - $this->create_array(); - return array($return_code,$this->response_reason, $this->_text_list); - } - $this->error_str = "Unexpected HTTP response code: $return_code"; - return array(0,$this->error_str,array()); - } - - # GET /v1/Account/Container?format=json - # - function get_objects($cname,$limit=0,$marker=NULL,$prefix=NULL,$path=NULL) - { - if (!$cname) { - $this->error_str = "Container name not set."; - return array(0, $this->error_str, array()); - } - - $url_path = $this->_make_path("STORAGE", $cname); - - $limit = intval($limit); - $params = array(); - $params[] = "format=json"; - if ($limit > 0) { - $params[] = "limit=$limit"; - } - if ($marker) { - $params[] = "marker=".rawurlencode($marker); - } - if ($prefix) { - $params[] = "prefix=".rawurlencode($prefix); - } - if ($path) { - $params[] = "path=".rawurlencode($path); - } - if (!empty($params)) { - $url_path .= "?" . implode("&", $params); - } - - $conn_type = "GET_CALL"; - $this->_write_callback_type = "OBJECT_STRING"; - $return_code = $this->_send_request($conn_type,$url_path); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - return array(0,$this->error_str,array()); - } - if ($return_code == 204) { - $this->error_str = "Container has no Objects."; - return array($return_code,$this->error_str,array()); - } - if ($return_code == 404) { - $this->error_str = "Container has no Objects."; - return array($return_code,$this->error_str,array()); - } - if ($return_code == 200) { - $json_body = json_decode($this->_obj_write_string, True); - return array($return_code,$this->response_reason, $json_body); - } - $this->error_str = "Unexpected HTTP response code: $return_code"; - return array(0,$this->error_str,array()); - } - - - # HEAD /v1/Account/Container - # - function head_container($container_name) - { - - if ($container_name == "") { - $this->error_str = "Container name not set."; - return False; - } - - if ($container_name != "0" and !isset($container_name)) { - $this->error_str = "Container name not set."; - return False; - } - - $conn_type = "HEAD"; - - $url_path = $this->_make_path("STORAGE", $container_name); - $return_code = $this->_send_request($conn_type,$url_path); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - array(0,$this->error_str,0,0); - } - if ($return_code == 404) { - return array($return_code,"Container not found.",0,0); - } - if ($return_code == 204 or 200) { - return array($return_code,$this->response_reason, - $this->_container_object_count, $this->_container_bytes_used); - } - return array($return_code,$this->response_reason,0,0); - } - - # GET /v1/Account/Container/Object - # - function get_object_to_string(&$obj, $hdrs=array()) - { - if (!is_object($obj) || get_class($obj) != "CF_Object") { - throw new SyntaxException( - "Method argument is not a valid CF_Object."); - } - - $conn_type = "GET_CALL"; - - $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name); - $this->_write_callback_type = "OBJECT_STRING"; - $return_code = $this->_send_request($conn_type,$url_path,$hdrs); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - return array($return_code0,$this->error_str,NULL); - } - if ($return_code == 404) { - $this->error_str = "Object not found."; - return array($return_code0,$this->error_str,NULL); - } - if (($return_code < 200) || ($return_code > 299 - && $return_code != 412 && $return_code != 304)) { - $this->error_str = "Unexpected HTTP return code: $return_code"; - return array($return_code,$this->error_str,NULL); - } - return array($return_code,$this->response_reason, $this->_obj_write_string); - } - - # GET /v1/Account/Container/Object - # - function get_object_to_stream(&$obj, &$resource=NULL, $hdrs=array()) - { - if (!is_object($obj) || get_class($obj) != "CF_Object") { - throw new SyntaxException( - "Method argument is not a valid CF_Object."); - } - if (!is_resource($resource)) { - throw new SyntaxException( - "Resource argument not a valid PHP resource."); - } - - $conn_type = "GET_CALL"; - - $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name); - $this->_obj_write_resource = $resource; - $this->_write_callback_type = "OBJECT_STREAM"; - $return_code = $this->_send_request($conn_type,$url_path,$hdrs); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - return array($return_code,$this->error_str); - } - if ($return_code == 404) { - $this->error_str = "Object not found."; - return array($return_code,$this->error_str); - } - if (($return_code < 200) || ($return_code > 299 - && $return_code != 412 && $return_code != 304)) { - $this->error_str = "Unexpected HTTP return code: $return_code"; - return array($return_code,$this->error_str); - } - return array($return_code,$this->response_reason); - } - - # PUT /v1/Account/Container/Object - # - function put_object(&$obj, &$fp) - { - if (!is_object($obj) || get_class($obj) != "CF_Object") { - throw new SyntaxException( - "Method argument is not a valid CF_Object."); - } - if (!is_resource($fp)) { - throw new SyntaxException( - "File pointer argument is not a valid resource."); - } - - $conn_type = "PUT_OBJ"; - $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name); - - $hdrs = $this->_metadata_headers($obj); - - $etag = $obj->getETag(); - if (isset($etag)) { - $hdrs[] = "ETag: " . $etag; - } - if (!$obj->content_type) { - $hdrs[] = "Content-Type: application/octet-stream"; - } else { - $hdrs[] = "Content-Type: " . $obj->content_type; - } - - $this->_init($conn_type); - curl_setopt($this->connections[$conn_type], - CURLOPT_INFILE, $fp); - if (!$obj->content_length) { - # We don''t know the Content-Length, so assumed "chunked" PUT - # - curl_setopt($this->connections[$conn_type], CURLOPT_UPLOAD, True); - $hdrs[] = 'Transfer-Encoding: chunked'; - } else { - # We know the Content-Length, so use regular transfer - # - curl_setopt($this->connections[$conn_type], - CURLOPT_INFILESIZE, $obj->content_length); - } - $return_code = $this->_send_request($conn_type,$url_path,$hdrs); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - return array(0,$this->error_str,NULL); - } - if ($return_code == 412) { - $this->error_str = "Missing Content-Type header"; - return array($return_code,$this->error_str,NULL); - } - if ($return_code == 422) { - $this->error_str = "Derived and computed checksums do not match."; - return array($return_code,$this->error_str,NULL); - } - if ($return_code != 201) { - $this->error_str = "Unexpected HTTP return code: $return_code"; - return array($return_code,$this->error_str,NULL); - } - return array($return_code,$this->response_reason,$this->_obj_etag); - } - - # POST /v1/Account/Container/Object - # - function update_object(&$obj) - { - if (!is_object($obj) || get_class($obj) != "CF_Object") { - throw new SyntaxException( - "Method argument is not a valid CF_Object."); - } - - if (!is_array($obj->metadata) || empty($obj->metadata)) { - $this->error_str = "Metadata array is empty."; - return 0; - } - - $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name); - - $hdrs = $this->_metadata_headers($obj); - $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST"); - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - return 0; - } - if ($return_code == 404) { - $this->error_str = "Account, Container, or Object not found."; - } - if ($return_code != 202) { - $this->error_str = "Unexpected HTTP return code: $return_code"; - } - return $return_code; - } - - # HEAD /v1/Account/Container/Object - # - function head_object(&$obj) - { - if (!is_object($obj) || get_class($obj) != "CF_Object") { - throw new SyntaxException( - "Method argument is not a valid CF_Object."); - } - - $conn_type = "HEAD"; - - $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name); - $return_code = $this->_send_request($conn_type,$url_path); - - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - return array(0, $this->error_str." ".$this->response_reason, - NULL, NULL, NULL, NULL, array()); - } - - if ($return_code == 404) { - return array($return_code, $this->response_reason, - NULL, NULL, NULL, NULL, array()); - } - if ($return_code == 204 or 200) { - return array($return_code,$this->response_reason, - $this->_obj_etag, - $this->_obj_last_modified, - $this->_obj_content_type, - $this->_obj_content_length, - $this->_obj_metadata); - } - $this->error_str = "Unexpected HTTP return code: $return_code"; - return array($return_code, $this->error_str." ".$this->response_reason, - NULL, NULL, NULL, NULL, array()); - } - - # DELETE /v1/Account/Container/Object - # - function delete_object($container_name, $object_name) - { - if ($container_name == "") { - $this->error_str = "Container name not set."; - return 0; - } - - if ($container_name != "0" and !isset($container_name)) { - $this->error_str = "Container name not set."; - return 0; - } - - if (!$object_name) { - $this->error_str = "Object name not set."; - return 0; - } - - $url_path = $this->_make_path("STORAGE", $container_name,$object_name); - $return_code = $this->_send_request("DEL_POST",$url_path,NULL,"DELETE"); - if (!$return_code) { - $this->error_str .= ": Failed to obtain valid HTTP response."; - return 0; - } - if ($return_code == 404) { - $this->error_str = "Specified container did not exist to delete."; - } - if ($return_code != 204) { - $this->error_str = "Unexpected HTTP return code: $return_code."; - } - return $return_code; - } - - function get_error() - { - return $this->error_str; - } - - function setDebug($bool) - { - $this->dbug = $bool; - foreach ($this->connections as $k => $v) { - if (!is_null($v)) { - curl_setopt($this->connections[$k], CURLOPT_VERBOSE, $this->dbug); - } - } - } - - function getCDNMUrl() - { - return $this->cdnm_url; - } - - function getStorageUrl() - { - return $this->storage_url; - } - - function getAuthToken() - { - return $this->auth_token; - } - - function setCFAuth($cfs_auth, $servicenet=False) - { - if ($servicenet) { - $this->storage_url = "https://snet-" . substr($cfs_auth->storage_url, 8); - } else { - $this->storage_url = $cfs_auth->storage_url; - } - $this->auth_token = $cfs_auth->auth_token; - $this->cdnm_url = $cfs_auth->cdnm_url; - } - - function setReadProgressFunc($func_name) - { - $this->_user_read_progress_callback_func = $func_name; - } - - function setWriteProgressFunc($func_name) - { - $this->_user_write_progress_callback_func = $func_name; - } - - private function _header_cb($ch, $header) - { - preg_match("/^HTTP\/1\.[01] (\d{3}) (.*)/", $header, $matches); - if (isset($matches[1])) { - $this->response_status = $matches[1]; - } - if (isset($matches[2])) { - $this->response_reason = $matches[2]; - } - if (stripos($header, CDN_ENABLED) === 0) { - $val = trim(substr($header, strlen(CDN_ENABLED)+1)); - if (strtolower($val) == "true") { - $this->_cdn_enabled = True; - } elseif (strtolower($val) == "false") { - $this->_cdn_enabled = False; - } else { - $this->_cdn_enabled = NULL; - } - return strlen($header); - } - if (stripos($header, CDN_URI) === 0) { - $this->_cdn_uri = trim(substr($header, strlen(CDN_URI)+1)); - return strlen($header); - } - if (stripos($header, CDN_TTL) === 0) { - $this->_cdn_ttl = trim(substr($header, strlen(CDN_TTL)+1))+0; - return strlen($header); - } - if (stripos($header, CDN_LOG_RETENTION) === 0) { - $this->_cdn_log_retention = - trim(substr($header, strlen(CDN_LOG_RETENTION)+1)) == "True" ? True : False; - return strlen($header); - } - - if (stripos($header, CDN_ACL_USER_AGENT) === 0) { - $this->_cdn_acl_user_agent = - trim(substr($header, strlen(CDN_ACL_USER_AGENT)+1)); - return strlen($header); - } - - if (stripos($header, CDN_ACL_REFERRER) === 0) { - $this->_cdn_acl_referrer = - trim(substr($header, strlen(CDN_ACL_REFERRER)+1)); - return strlen($header); - } - - if (stripos($header, ACCOUNT_CONTAINER_COUNT) === 0) { - $this->_account_container_count = (float) trim(substr($header, - strlen(ACCOUNT_CONTAINER_COUNT)+1))+0; - return strlen($header); - } - if (stripos($header, ACCOUNT_BYTES_USED) === 0) { - $this->_account_bytes_used = (float) trim(substr($header, - strlen(ACCOUNT_BYTES_USED)+1))+0; - return strlen($header); - } - if (stripos($header, CONTAINER_OBJ_COUNT) === 0) { - $this->_container_object_count = (float) trim(substr($header, - strlen(CONTAINER_OBJ_COUNT)+1))+0; - return strlen($header); - } - if (stripos($header, CONTAINER_BYTES_USED) === 0) { - $this->_container_bytes_used = (float) trim(substr($header, - strlen(CONTAINER_BYTES_USED)+1))+0; - return strlen($header); - } - if (stripos($header, METADATA_HEADER) === 0) { - # $header => X-Object-Meta-Foo: bar baz - $temp = substr($header, strlen(METADATA_HEADER)); - # $temp => Foo: bar baz - $parts = explode(":", $temp); - # $parts[0] => Foo - $val = substr(strstr($temp, ":"), 1); - # $val => bar baz - $this->_obj_metadata[$parts[0]] = trim($val); - return strlen($header); - } - if (stripos($header, "ETag:") === 0) { - # $header => ETag: abc123def456... - $val = substr(strstr($header, ":"), 1); - # $val => abc123def456... - $this->_obj_etag = trim($val); - return strlen($header); - } - if (stripos($header, "Last-Modified:") === 0) { - $val = substr(strstr($header, ":"), 1); - $this->_obj_last_modified = trim($val); - return strlen($header); - } - if (stripos($header, "Content-Type:") === 0) { - $val = substr(strstr($header, ":"), 1); - $this->_obj_content_type = trim($val); - return strlen($header); - } - if (stripos($header, "Content-Length:") === 0) { - $val = substr(strstr($header, ":"), 1); - $this->_obj_content_length = (float) trim($val)+0; - return strlen($header); - } - return strlen($header); - } - - private function _read_cb($ch, $fd, $length) - { - $data = fread($fd, $length); - $len = strlen($data); - if (isset($this->_user_write_progress_callback_func)) { - call_user_func($this->_user_write_progress_callback_func, $len); - } - return $data; - } - - private function _write_cb($ch, $data) - { - $dlen = strlen($data); - switch ($this->_write_callback_type) { - case "TEXT_LIST": - $this->_return_list = $this->_return_list . $data; - //= explode("\n",$data); # keep tab,space - //his->_text_list[] = rtrim($data,"\n\r\x0B"); # keep tab,space - break; - case "OBJECT_STREAM": - fwrite($this->_obj_write_resource, $data, $dlen); - break; - case "OBJECT_STRING": - $this->_obj_write_string .= $data; - break; - } - if (isset($this->_user_read_progress_callback_func)) { - call_user_func($this->_user_read_progress_callback_func, $dlen); - } - return $dlen; - } - - private function _auth_hdr_cb($ch, $header) - { - preg_match("/^HTTP\/1\.[01] (\d{3}) (.*)/", $header, $matches); - if (isset($matches[1])) { - $this->response_status = $matches[1]; - } - if (isset($matches[2])) { - $this->response_reason = $matches[2]; - } - if (stripos($header, STORAGE_URL) === 0) { - $this->storage_url = trim(substr($header, strlen(STORAGE_URL)+1)); - } - if (stripos($header, CDNM_URL) === 0) { - $this->cdnm_url = trim(substr($header, strlen(CDNM_URL)+1)); - } - if (stripos($header, AUTH_TOKEN) === 0) { - $this->auth_token = trim(substr($header, strlen(AUTH_TOKEN)+1)); - } - if (stripos($header, AUTH_TOKEN_LEGACY) === 0) { - $this->auth_token = trim(substr($header,strlen(AUTH_TOKEN_LEGACY)+1)); - } - return strlen($header); - } - - private function _make_headers($hdrs=NULL) - { - $new_headers = array(); - $has_stoken = False; - $has_uagent = False; - if (is_array($hdrs)) { - foreach ($hdrs as $h => $v) { - if (is_int($h)) { - $parts = explode(":", $v); - $header = $parts[0]; - $value = trim(substr(strstr($v, ":"), 1)); - } else { - $header = $h; - $value = trim($v); - } - - if (stripos($header, AUTH_TOKEN) === 0) { - $has_stoken = True; - } - if (stripos($header, "user-agent") === 0) { - $has_uagent = True; - } - $new_headers[] = $header . ": " . $value; - } - } - if (!$has_stoken) { - $new_headers[] = AUTH_TOKEN . ": " . $this->auth_token; - } - if (!$has_uagent) { - $new_headers[] = "User-Agent: " . USER_AGENT; - } - return $new_headers; - } - - private function _init($conn_type, $force_new=False) - { - if (!array_key_exists($conn_type, $this->connections)) { - $this->error_str = "Invalid CURL_XXX connection type"; - return False; - } - - if (is_null($this->connections[$conn_type]) || $force_new) { - $ch = curl_init(); - } else { - return; - } - - if ($this->dbug) { curl_setopt($ch, CURLOPT_VERBOSE, 1); } - - if (!is_null($this->cabundle_path)) { - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, True); - curl_setopt($ch, CURLOPT_CAINFO, $this->cabundle_path); - } - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, True); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); - curl_setopt($ch, CURLOPT_MAXREDIRS, 4); - curl_setopt($ch, CURLOPT_HEADER, 0); - curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this, '_header_cb')); - - if ($conn_type == "GET_CALL") { - curl_setopt($ch, CURLOPT_WRITEFUNCTION, array(&$this, '_write_cb')); - } - - if ($conn_type == "PUT_OBJ") { - curl_setopt($ch, CURLOPT_PUT, 1); - curl_setopt($ch, CURLOPT_READFUNCTION, array(&$this, '_read_cb')); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - } - if ($conn_type == "HEAD") { - curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "HEAD"); - curl_setopt($ch, CURLOPT_NOBODY, 1); - } - if ($conn_type == "PUT_CONT") { - curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); - curl_setopt($ch, CURLOPT_INFILESIZE, 0); - curl_setopt($ch, CURLOPT_NOBODY, 1); - } - if ($conn_type == "DEL_POST") { - curl_setopt($ch, CURLOPT_NOBODY, 1); - } - $this->connections[$conn_type] = $ch; - return; - } - - private function _reset_callback_vars() - { - $this->_text_list = array(); - $this->_return_list = NULL; - $this->_account_container_count = 0; - $this->_account_bytes_used = 0; - $this->_container_object_count = 0; - $this->_container_bytes_used = 0; - $this->_obj_etag = NULL; - $this->_obj_last_modified = NULL; - $this->_obj_content_type = NULL; - $this->_obj_content_length = NULL; - $this->_obj_metadata = array(); - $this->_obj_write_string = ""; - $this->_cdn_enabled = NULL; - $this->_cdn_uri = NULL; - $this->_cdn_ttl = NULL; - $this->response_status = 0; - $this->response_reason = ""; - } - - private function _make_path($t="STORAGE",$c=NULL,$o=NULL) - { - $path = array(); - switch ($t) { - case "STORAGE": - $path[] = $this->storage_url; break; - case "CDN": - $path[] = $this->cdnm_url; break; - } - if ($c == "0") - $path[] = rawurlencode($c); - - if ($c) { - $path[] = rawurlencode($c); - } - if ($o) { - # mimic Python''s urllib.quote() feature of a "safe" '/' character - # - $path[] = str_replace("%2F","/",rawurlencode($o)); - } - return implode("/",$path); - } - - private function _metadata_headers(&$obj) - { - $hdrs = array(); - foreach ($obj->metadata as $k => $v) { - if (strpos($k,":") !== False) { - throw new SyntaxException( - "Metadata keys cannot contain a ':' character."); - } - $k = trim($k); - $key = sprintf("%s%s", METADATA_HEADER, $k); - if (!array_key_exists($key, $hdrs)) { - if (strlen($k) > 128 || strlen($v) > 256) { - $this->error_str = "Metadata key or value exceeds "; - $this->error_str .= "maximum length: ($k: $v)"; - return 0; - } - $hdrs[] = sprintf("%s%s: %s", METADATA_HEADER, $k, trim($v)); - } - } - return $hdrs; - } - - private function _send_request($conn_type, $url_path, $hdrs=NULL, $method="GET") - { - $this->_init($conn_type); - $this->_reset_callback_vars(); - $headers = $this->_make_headers($hdrs); - - if (gettype($this->connections[$conn_type]) == "unknown type") - throw new ConnectionNotOpenException ( - "Connection is not open." - ); - - switch ($method) { - case "DELETE": - curl_setopt($this->connections[$conn_type], - CURLOPT_CUSTOMREQUEST, "DELETE"); - break; - case "POST": - curl_setopt($this->connections[$conn_type], - CURLOPT_CUSTOMREQUEST, "POST"); - default: - break; - } - - curl_setopt($this->connections[$conn_type], - CURLOPT_HTTPHEADER, $headers); - - curl_setopt($this->connections[$conn_type], - CURLOPT_URL, $url_path); - - if (!curl_exec($this->connections[$conn_type]) && curl_errno($this->connections[$conn_type]) !== 0) { - $this->error_str = "(curl error: " - . curl_errno($this->connections[$conn_type]) . ") "; - $this->error_str .= curl_error($this->connections[$conn_type]); - return False; - } - return curl_getinfo($this->connections[$conn_type], CURLINFO_HTTP_CODE); - } - - function close() - { - foreach ($this->connections as $cnx) { - if (isset($cnx)) { - curl_close($cnx); - $this->connections[$cnx] = NULL; - } - } - } - private function create_array() - { - $this->_text_list = explode("\n",rtrim($this->_return_list,"\n\x0B")); - return True; - } - -} - -/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * c-hanging-comment-ender-p: nil - * End: - */ -?> diff --git a/cloudfiles/share/cacert.pem b/cloudfiles/share/cacert.pem deleted file mode 100644 index 10cd6b9..0000000 --- a/cloudfiles/share/cacert.pem +++ /dev/null @@ -1,3113 +0,0 @@ -## -## cacert.pem-foo -- Bundle of CA Root Certificates -## -## Converted at: Sat Aug 23 21:39:56 2008 UTC -## -## This is a bundle of X.509 certificates of public Certificate Authorities -## (CA). These were automatically extracted from Mozilla's root certificates -## file (certdata.txt). This file can be found in the mozilla source tree: -## '/mozilla/security/nss/lib/ckfw/builtins/certdata.txt' -## -## It contains the certificates in PEM format and therefore -## can be directly used with curl / libcurl / php_curl, or with -## an Apache+mod_ssl webserver for SSL client authentication. -## Just configure this file as the SSLCACertificateFile. -## - -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is the Netscape security libraries. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1994-2000 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** -# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.49 $ $Date: 2008/08/14 18:15:56 $ - -Verisign/RSA Secure Server CA -============================= ------BEGIN CERTIFICATE----- -MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx -IDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2VydmVy -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVow -XzELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQL -EyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUA -A4GJADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII0haGN1Xp -sSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphIuR2nKRoTLkoRWZweFdVJ -VCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZIhvcNAQECBQADfgBl3X7hsuyw4jrg7HFG -mhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2 -qUtN8iD3zV9/ZHuO3ABc1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA== ------END CERTIFICATE----- - -GTE CyberTrust Root CA -====================== ------BEGIN CERTIFICATE----- -MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg -Q29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJvb3QwHhcNOTYwMjIzMjMwMTAw -WhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9u -MRwwGgYDVQQDExNHVEUgQ3liZXJUcnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB -gQC45k+625h8cXyvRLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH -6X4MypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/51KiOQswk -wB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKzdcZfHeFhVYAA1IFLezEP -I2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWlIjeaY8JIILTbcuPI9tl8vrGvU9oUtCG4 -1tWW4/5ODFlitppK+ULdjG+BqXH/9ApybW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY ------END CERTIFICATE----- - -GTE CyberTrust Global Root -========================== ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg -Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG -A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz -MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL -Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0 -IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u -sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql -HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID -AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW -M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF -NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- - -Thawte Personal Basic CA -======================== ------BEGIN CERTIFICATE----- -MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs -dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMY -VGhhd3RlIFBlcnNvbmFsIEJhc2ljIENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0 -aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpB -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhh -d3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24x -ITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBDQTEoMCYGCSqGSIb3DQEJARYZcGVyc29u -YWwtYmFzaWNAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+C -FeZIlDWmWr5vQvoPR+53dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJ -l+A1OFdKwPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7G1sY -0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAt4plrsD16 -iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7c8a914phXAPjLSeoF+CEhULcXpvG -t7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN -92NWod8isQ== ------END CERTIFICATE----- - -Thawte Personal Premium CA -========================== ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs -dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMa -VGhhd3RlIFBlcnNvbmFsIFByZW1pdW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1p -dW1AdGhhd3RlLmNvbTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQG -EwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAYBgNVBAoT -EVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlz -aW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJlbWl1bSBDQTEqMCgGCSqGSIb3DQEJARYb -cGVyc29uYWwtcHJlbWl1bUB0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ -Ztn4B0TPuYwu8KHvE0VsBd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ -8/JE2dWIEt12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYDZicR -FTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GB -AGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIHb4Vnjt4rueIXsDqg8A6iAJrf8xQV -brvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBhKXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+W -jS9Q2wfD6h+rM+D1KzGJ ------END CERTIFICATE----- - -Thawte Personal Freemail CA -=========================== ------BEGIN CERTIFICATE----- -MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs -dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMb -VGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVl -bWFpbEB0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNV -BAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE -ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2 -aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJ -ARYccGVyc29uYWwtZnJlZW1haWxAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC -gYEA1GnX1LCUZFtx6UfYDFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6W -ZBrCFG5ErHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVquzgk -CGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF -AAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjPMPuoSpaKH2JCI4wXD/S6ZJwXrEcp -352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK -/qarigd1iwzdUYRr5PjRzneigQ== ------END CERTIFICATE----- - -Thawte Server CA -================ ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs -dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE -AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j -b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV -BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u -c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG -A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0 -ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl -/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7 -1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J -GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ -GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- - -Thawte Premium Server CA -======================== ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs -dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE -AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl -ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT -AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU -VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2 -aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ -cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2 -aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh -Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/ -qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm -SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf -8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t -UCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- - -Equifax Secure CA -================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE -ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 -MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT -B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB -nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR -fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW -8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG -A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE -CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG -A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS -spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB -Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961 -zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB -BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 -70+sB3c4 ------END CERTIFICATE----- - -ABAecom (sub., Am. Bankers Assn.) Root CA -========================================= ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIRANAeQJAAAEZSAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAwgYkxCzAJBgNV -BAYTAlVTMQswCQYDVQQIEwJEQzETMBEGA1UEBxMKV2FzaGluZ3RvbjEXMBUGA1UEChMOQUJBLkVD -T00sIElOQy4xGTAXBgNVBAMTEEFCQS5FQ09NIFJvb3QgQ0ExJDAiBgkqhkiG9w0BCQEWFWFkbWlu -QGRpZ3NpZ3RydXN0LmNvbTAeFw05OTA3MTIxNzMzNTNaFw0wOTA3MDkxNzMzNTNaMIGJMQswCQYD -VQQGEwJVUzELMAkGA1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24xFzAVBgNVBAoTDkFCQS5F -Q09NLCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBSb290IENBMSQwIgYJKoZIhvcNAQkBFhVhZG1p -bkBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx0xHgeVVD -BwhMywVCAOINg0Y95JO6tgbTDVm9PsHOQ2cBiiGo77zM0KLMsFWWU4RmBQDaREmA2FQKpSWGlO1j -Vv9wbKOhGdJ4vmgqRF4vz8wYXke8OrFGPR7wuSw0X4x8TAgpnUBV6zx9g9618PeKgw6hTLQ6pbNf -WiKX7BmbwQVo/ea3qZGULOR4SCQaJRk665WcOQqKz0Ky8BzVX/tr7WhWezkscjiw7pOp03t3POtx -A6k4ShZsiSrK2jMTecJVjO2cu/LLWxD4LmE1xilMKtAqY9FlWbT4zfn0AIS2V0KFnTKo+SpU+/94 -Qby9cSj0u5C8/5Y0BONFnqFGKECBAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQgwDQYJKoZI -hvcNAQEFBQADggEBAARvJYbk5pYntNlCwNDJALF/VD6Hsm0kqS8Kfv2kRLD4VAe9G52dyntQJHsR -W0mjpr8SdNWJt7cvmGQlFLdh6X9ggGvTZOirvRrWUfrAtF13Gn9kCF55xgVM8XrdTX3O5kh7VNJh -koHWG9YA8A6eKHegTYjHInYZw8eeG6Z3ePhfm1bR8PIXrI6dWeYf/le22V7hXZ9F7GFoGUHhsiAm -/lowdiT/QHI8eZ98IkirRs3bs4Ysj78FQdPB4xTjQRcm0HyncUwZ6EoPclgxfexgeqMiKL0ZJGA/ -O4dzwGvky663qyVDslUte6sGDnVdNOVdc22esnVApVnJTzFxiNmIf1Q= ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 1 -======================================= ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE -ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy -MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs -IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE -NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i -o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo -BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 -dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw -IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM -BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB -ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq -kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4 -RbyhkwS7hp86W0N6w4pl ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 3 -======================================= ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE -ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy -MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs -IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD -VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS -xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo -BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 -dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw -IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM -BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB -AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi -up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1 -mPnHfxsb1gYgAlihw6ID ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 2 -======================================= ------BEGIN CERTIFICATE----- -MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQswCQYDVQQGEwJ1 -czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0 -YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBS -b290Q0EgWDExITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4 -NTVaFw0wODExMjgxODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UE -BxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjER -MA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0BCQEW -EmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANLGJrbn -pT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdfWvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZ -PdJEjdd0IG03Ao9pk1uKxBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGA -vqPYUrBEzUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F5X5y -P4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMvOnNn7pTKBBMFYgZw -I7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAojeyP2n714Z5 -VEkxlTMr89EJFEliYIalsBHiUMIdBlc+LegzZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2 -vAd5ZWRzfdd5ynvVWlHG4VMElo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX -8ngvYzZAOONGDx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q -gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2kYtdo+o56T9II -2pPc8JIRetDccpMMc5NihWjQ9A== ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 4 -======================================= ------BEGIN CERTIFICATE----- -MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQswCQYDVQQGEwJ1 -czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0 -YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBS -b290Q0EgWDIxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2 -MTZaFw0wODExMjcyMjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UE -BxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjER -MA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0BCQEW -EmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANx18IzA -dZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbVp9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva -3G3WqZlVUmfpKAOS3OWwBZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9 -kVySVGkl5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi3sOP -17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+QVCvbK4iNC7Va26D -unm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAtTYOXeFhKFoR -ZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT -4EOvkTvRyyzYdFQ6HE3K1GjNI3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV -6YyDfFk/xPEL553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q -10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbINuBVd8d+6ybVK -1GSYsyapMMj9puyrliGtf8J4tg== ------END CERTIFICATE----- - -Verisign Class 1 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTla -MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3Mg -MSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEF -AAOBjQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0NH8xlbgyw -0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR4k5FVmkfeAKA2txHkSm7 -NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATANBgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf -7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZoEWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnx -giJduLHdgSOjeyUVRjB5FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0A -NACY89FxlA== ------END CERTIFICATE----- - -Verisign Class 2 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx -FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow -XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAy -IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyhYGt+eSz6 -Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7FYCTXOvnzAhsPz6zSvz/ -S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBAIobK/o5wXTX -XtgZZKJYSi034DNHD6zt96rbHuSLBlxgJ8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUY -YAS/QoD90KioHgE796Ncr6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2 -lw0Xd8rY ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx -FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow -XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz -IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 -f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol -hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA -TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah -WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf -Tqj/ZA1k ------END CERTIFICATE----- - -Verisign Class 1 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd -k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq -WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB -MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM -XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC -lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ ------END CERTIFICATE----- - -Verisign Class 2 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h -cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp -Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h -cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp -Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx -nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC -wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA -ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK -1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk -LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg== ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO -FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71 -lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB -MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT -1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD -Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9 ------END CERTIFICATE----- - -Verisign Class 4 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4 -xBewRNzjMHPVKmIquNDMHO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDH -qGKB3FtKqsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwIDAQAB -MA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwjcSGIL4LcY/oCRaxF -WdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0ycyfYaT5DdPauxYma51N86Xv2S/PB -ZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRPT8qAkbYp ------END CERTIFICATE----- - -GlobalSign Root CA -================== ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx -GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds -b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV -BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD -VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa -DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc -THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb -Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP -c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX -gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF -AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj -Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG -j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH -hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC -X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -GlobalSign Root CA - R2 -======================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 -ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp -s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN -S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL -TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C -ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i -YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN -BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp -9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu -01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 -9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -ValiCert Class 1 VA -=================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp -b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh -bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy -MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 -d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg -UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 -LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi -GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm -DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG -lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX -icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP -Orf1LXLI ------END CERTIFICATE----- - -ValiCert Class 2 VA -=================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp -b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh -bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw -MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 -d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg -UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 -LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC -CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf -ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ -SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV -UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8 -W9ViH0Pd ------END CERTIFICATE----- - -RSA Root Certificate 1 -====================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp -b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh -bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw -MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 -d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg -UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 -LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td -3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H -BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs -3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF -V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r -on+jjBXu ------END CERTIFICATE----- - -Verisign Class 1 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E -bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ -rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+ -Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB -FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N -y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 -ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h -a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc -D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== ------END CERTIFICATE----- - -Verisign Class 2 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y -azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug -b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y -aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6 -tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7 -C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS -0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs -Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0 -JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf -0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU -sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx -JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j -GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 -EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc -cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw -EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj -055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f -j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 -xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa -t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -Verisign Class 4 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS -tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM -8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW -Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX -Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt -mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd -RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG -UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- - -Entrust.net Secure Server CA -============================ ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV -BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg -cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl -ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG -A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi -eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p -dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ -aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5 -gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw -ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw -CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l -dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw -NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow -HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA -BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN -Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9 -n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- - -Entrust.net Secure Personal CA -============================== ------BEGIN CERTIFICATE----- -MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMCVVMxFDASBgNV -BAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5uZXQvQ2xpZW50X0NBX0luZm8v -Q1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlhYi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1 -c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9u -IEF1dGhvcml0eTAeFw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJV -UzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRf -Q0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMpIDE5 -OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdv -kHvkGf9FozTC28GoT/Bo6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGp -OZ5V+Pux5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zmAqTm -T173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSCARkwggEVMIHkoIHh -oIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3 -dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBs -aWFiLjElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50 -cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg -KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNVHRAEJDAigA8x -OTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU -xPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYEFMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1Ud -EwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K -8ddmAwWePvrqHEa7pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6h -URzzwy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/aEkP/TOYG -JqibGapEPHayXOw= ------END CERTIFICATE----- - -Entrust.net Premium 2048 Secure Server CA -========================================= ------BEGIN CERTIFICATE----- -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u -ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp -bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV -BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx -NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 -d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u -ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL -Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr -hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW -nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi -VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC -AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER -gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B -AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS -o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z -2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX -OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ== ------END CERTIFICATE----- - -Baltimore CyberTrust Root -========================= ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE -ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li -ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC -SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs -dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME -uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB -UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C -G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 -XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr -l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI -VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB -BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh -cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 -hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa -Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H -RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -Equifax Secure Global eBusiness CA -================================== ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp -bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx -HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds -b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV -PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN -qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn -hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j -BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs -MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN -I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY -NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- - -Equifax Secure eBusiness CA 1 -============================= ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB -LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE -ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz -IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ -1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a -IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk -MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW -Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF -AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5 -lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+ -KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- - -Equifax Secure eBusiness CA 2 -============================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE -ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y -MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT -DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB -nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn -2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5 -BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG -A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx -JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG -A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e -uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB -Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1 -jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia -78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm -V+GRMOrN ------END CERTIFICATE----- - -Visa International Global Root 2 -================================ ------BEGIN CERTIFICATE----- -MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMxDTALBgNVBAoT -BFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2aWNlIEFzc29jaWF0aW9uMRIw -EAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYD -VQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZp -Y2UgQXNzb2NpYXRpb24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdXZFwgBuHW -73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i/SN8RnNPflRzHqgsVVh1 -t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU58fy+pmjIlC++QU3o63tmsPm7Igbthkn -GziLgE3sucfFicv8GjLtI/C1AVj59o/ghalMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhl -V7or7zaMavrZ2UT0qt2E1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYE -FJ59SzS/ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0G -CSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHbmQdpNSYx/scuhMKZ -YdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQkIqUs38oW26sTTMs7WXcFsziza6k -PWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhNdBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOe -yti12HvOdUVmB/RtLdh6yumJivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8 -ofyrEK9ca3CnB+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G ------END CERTIFICATE----- - -beTRUSTed Root CA -================= ------BEGIN CERTIFICATE----- -MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJXVzESMBAGA1UE -ChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBDQXMxGjAYBgNVBAMTEWJlVFJV -U1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoXDTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMC -V1cxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYD -VQQDExFiZVRSVVNUZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0 -c3oTCjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P6j41ffgz -eubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwMjmVZxXH/YgmPqsWPzGCg -c0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNn -mrRhyxdviTX/507AMhLn7uzf/5cwdO2NR47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5 -c4gW9JZDnGdzF5DYCW5jrEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8w -ggFZBgNVHSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQagfFS -ZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFu -Y2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv -ZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJl -IGZvdW5kIGF0IGJlVFJVU1RlZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29t -L3ZhdWx0L3Rlcm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0 -L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQxCzAJBgNVBAYT -AldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNVHSMEGDAWgBQquZtpLjub2M3e -KjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJKoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR -+csVm8tpvuaBa58oH2U+3RGFktToQb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/b -ow6be3ga8wSGWsb2jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ -1gMe1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5mlWXKWWu -GVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYctmBjRYoQtLpGEK5BV2Vs -PyMQPyEQWbfkQN0mDCP2qq4= ------END CERTIFICATE----- - -AddTrust Low-Value Services Root -================================ ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU -cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw -CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO -ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 -54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr -oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 -Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui -GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w -HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT -RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw -HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt -ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph -iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr -mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj -ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- - -AddTrust External Root -====================== ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD -VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw -NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU -cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg -Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 -+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw -Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo -aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy -2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 -7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL -VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk -VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl -j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 -e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u -G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -AddTrust Public Services Root -============================= ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU -cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ -BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l -dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu -nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i -d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG -Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw -HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G -A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G -A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 -JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL -+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 -Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H -EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- - -AddTrust Qualified Certificates Root -==================================== ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU -cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx -CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ -IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx -64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 -KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o -L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR -wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU -MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE -BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y -azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG -GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze -RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB -iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= ------END CERTIFICATE----- - -Verisign Time Stamping Authority CA -=================================== ------BEGIN CERTIFICATE----- -MIIDzTCCAzagAwIBAgIQU2GyYK7bcY6nlLMTM/QHCTANBgkqhkiG9w0BAQUFADCBwTELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAzIFB1YmxpYyBQ -cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZl -cmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWdu -IFRydXN0IE5ldHdvcmswHhcNMDAwOTI2MDAwMDAwWhcNMTAwOTI1MjM1OTU5WjCBpTEXMBUGA1UE -ChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNV -BAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTAwMSww -KgYDVQQDEyNWZXJpU2lnbiBUaW1lIFN0YW1waW5nIEF1dGhvcml0eSBDQTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEA0hmdZ8IAIVlizrQJIkRpivglWtvtDbc2fk7gu5Q+kCWHwmFHKdm9VLhj -zCx9abQzNvQ3B5rB3UBU/OB4naCTuQk9I1F/RMIUdNsKvsvJMDRAmD7Q1yUQgZS9B0+c1lQn3y6o -v8uQjI11S7zi6ESHzeZBCiVu6PQkAsVSD27smHUCAwEAAaOB3zCB3DAPBgNVHRMECDAGAQH/AgEA -MEUGA1UdIAQ+MDwwOgYMYIZIAYb4RQEHFwEDMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZl -cmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL2NybC52ZXJpc2lnbi5jb20v -cGNhMy5jcmwwCwYDVR0PBAQDAgEGMEIGCCsGAQUFBwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRw -Oi8vb2NzcC52ZXJpc2lnbi5jb20vb2NzcC9zdGF0dXMwDQYJKoZIhvcNAQEFBQADgYEAgnBold+2 -DcIBcBlK0lRWHqzyRUyHuPU163hLBanInTsZIS5wNEqi9YngFXVF5yg3ADQnKeg3S/LvRJdrF1Ea -w1adPBqK9kpGRjeM+sv1ZFo4aC4cw+9wzrhGBha/937ntag+RaypJXUie28/sJyU58dzq6wf7iWb -wBbtt8pb8BQ= ------END CERTIFICATE----- - -Thawte Time Stamping CA -======================= ------BEGIN CERTIFICATE----- -MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG -A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcg -Q0EwHhcNOTcwMTAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNV -BAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEd -MBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBp -bmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT6jR7UZztsOYuGA7+4F+o -J9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQaWt9MevPZQx08EHp5JduQ/vBR5zDWQQD9 -nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzAR -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCo -uqoEiYbC9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQpgCe -d/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZCayJSdM= ------END CERTIFICATE----- - -Entrust.net Global Secure Server CA -=================================== ------BEGIN CERTIFICATE----- -MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChMLRW50cnVzdC5u -ZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGluY29ycC4gYnkgcmVmLiAobGlt -aXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UE -AxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0w -MDAyMDQxNzIwMDBaFw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0G -A1UECxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlh -Yi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRy -dXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3 -DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55l -xyKbc+bT3QgON1WqJUaBbL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439P -mrkDQYC2dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4QgEB -BAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoTC0VudHJ1c3QubmV0 -MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxpbWl0 -cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMT -MUVudHJ1c3QubmV0IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNV -BAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD -VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1UdDgQWBBTLbMBr -47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w -AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsiad0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbv -H9X07t9WLebKahlzqlO+krNQAraFJnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3 -a9kC9n8O6mUE8c1UyrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw== ------END CERTIFICATE----- - -Entrust.net Global Secure Personal CA -===================================== ------BEGIN CERTIFICATE----- -MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u -ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxp -bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV -BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcx -NjE2NDBaFw0yMDAyMDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 -d3d3LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl -MCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u -ZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB -iQKBgQCTdLS25MVL1qFof2LV7PdRV7NySpj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQl -hK8pK5/jgOLZy93GRUk0iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKkl -Wb1m9fkn5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHdBgNV -HR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUAwPgYDVQQLFDd3 -d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUw -IwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5l -dCBDbGllbnQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw -IoAPMjAwMDAyMDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdFfP4tzrrTfTAM -BgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQF -AAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMShAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xK -p9U1PL6oXOpLu5OOgGarDyn9TS2/GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQ -Gof4T4HHdguEOnKdzmVml64mXg== ------END CERTIFICATE----- - -Entrust Root Certification Authority -==================================== ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw -b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG -A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 -MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu -MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu -Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v -dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz -A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww -Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 -j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN -rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 -MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH -hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM -Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa -v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS -W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 -tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -AOL Time Warner Root Certification Authority 1 -============================================== ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMxHTAbBgNVBAoT -FEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNhIE9ubGluZSBJbmMuMTcwNQYD -VQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAy -MDUyOTA2MDAwMFoXDTM3MTEyMDE1MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wg -VGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMu -QU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U0pPlLYnKhHw/EEMbjIt8 -hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItITuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkG -IBKOQuHfD5YQUqjPnF+VFNivO3ULMSAfRC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93 -f7DKeHEMXRZxcKLXwjqFzQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQI -fHNlIAqhBC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEAAaNj -MGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jYPXy+XxIwHwYDVR0j -BBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUA -A4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u -0FIy2VkyvNp5ctZ7CegCgTXTCt8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77Bf -WgDrvq2g+EQFZ7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX -n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoWH1iCC+GWaQVL -juyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S ------END CERTIFICATE----- - -AOL Time Warner Root Certification Authority 2 -============================================== ------BEGIN CERTIFICATE----- -MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMxHTAbBgNVBAoT -FEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNhIE9ubGluZSBJbmMuMTcwNQYD -VQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAy -MDUyOTA2MDAwMFoXDTM3MDkyODIzNDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wg -VGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMu -QU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZI -hvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ7ouZzU9AhqS2TcnZsdw8 -TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilbm2BPJoPRYxJWSXakFsKlnUWsi4SVqBax -7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOYxFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17n -OirYlxcwfACtCJ0zr7iZYYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2w -TPDaRrbqJS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fxI2rS -AG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETzkxmlJ85per5n0/xQ -pCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFhEVsVS6kkUfykXPcXnbDS+gfpj1bk -GoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/SBtc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuW -CpTehTacyH+BCQJJKg71ZDIMgtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1Ex -MVCgyhwn2RAurda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO1b+pxCAoMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyuguh4X7ZVnnrREUpVe8WJ8kEle7 -+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdPyXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI -5Rq8NEQh3q0l/HYWdyGQgJhXnU7q7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcC -tQVBynlQboIOcXKTRuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ -68W/ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyBM5kYJRF3 -p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQmy8YJPamTQr5O8t1wswv -ziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xOAU++CrYD062KRffaJ00psUjf5BHklka9 -bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4o -GKQWDzH9OmwjkyB24f0HhdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2 -uBOLZ8/5fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg= ------END CERTIFICATE----- - -beTRUSTed Root CA-Baltimore Implementation -========================================== ------BEGIN CERTIFICATE----- -MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwliZVRSVVNUZWQx -GzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0Et -QmFsdGltb3JlIEltcGxlbWVudGF0aW9uMB4XDTAyMDQxMTA3Mzg1MVoXDTIyMDQxMTA3Mzg1MVow -ZjESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNV -BAMTKmJlVFJVU1RlZCBSb290IENBLUJhbHRpbW9yZSBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBALx+xDmcjOPWHIb/ymKt4H8wRXqOGrO4x/nRNv8i805qX4QQ -+2aBw5R5MdKR4XeOGCrDFN5R9U+jK7wYFuK13XneIviCfsuBH/0nLI/6l2Qijvj/YaOcGx6Sj8Co -Cd8JEey3fTGaGuqDIQY8n7pc/5TqarjDa1U0Tz0yH92BFODEPM2dMPgwqZfT7syj0B9fHBOB1Bir -lNFjw55/NZKeX0Tq7PQiXLfoPX2k+YmpkbIq2eszh+6l/ePazIjmiSZuxyuC0F6dWdsU7JGDBcNe -DsYq0ATdcT0gTlgn/FP7eHgZFLL8kFKJOGJgB7Sg7KxrUNb9uShr71ItOrL/8QFArDcCAwEAAaOC -Ah4wggIaMA8GA1UdEwEB/wQFMAMBAf8wggG1BgNVHSAEggGsMIIBqDCCAaQGDysGAQQBsT4AAAEJ -KIORMTCCAY8wggFIBggrBgEFBQcCAjCCAToaggE2UmVsaWFuY2Ugb24gb3IgdXNlIG9mIHRoaXMg -Q2VydGlmaWNhdGUgY3JlYXRlcyBhbiBhY2tub3dsZWRnbWVudCBhbmQgYWNjZXB0YW5jZSBvZiB0 -aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwg -dGhlIENlcnRpZmljYXRpb24gUHJhY3RpY2UgU3RhdGVtZW50IGFuZCB0aGUgUmVseWluZyBQYXJ0 -eSBBZ3JlZW1lbnQsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdCB0aGUgYmVUUlVTVGVkIHdlYiBzaXRl -LCBodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDBB -BggrBgEFBQcCARY1aHR0cDovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2VzL2lu -ZGV4Lmh0bWwwHQYDVR0OBBYEFEU9w6nR3D8kVpgccxiIav+DR+22MB8GA1UdIwQYMBaAFEU9w6nR -3D8kVpgccxiIav+DR+22MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEASZK8o+6s -vfoNyYt5hhwjdrCAWXf82n+0S9/DZEtqTg6t8n1ZdwWtColzsPq8y9yNAIiPpqCy6qxSJ7+hSHyX -EHu67RMdmgduyzFiEuhjA6p9beP4G3YheBufS0OM00mG9htc9i5gFdPp43t1P9ACg9AYgkHNZTfq -jjJ+vWuZXTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb4cV97yHgjQ5dUX2xZ/2j -vTg2xvI4hocalmhgRvsoFEdV4aeADGvi6t9NfJBIoDa9CReJf8Py05yc493EG931t3GzUwWJBtDL -SoDByFOQtTwxiBdQn8nEDovYqAJjDQ== ------END CERTIFICATE----- - -beTRUSTed Root CA - Entrust Implementation -========================================== ------BEGIN CERTIFICATE----- -MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwliZVRSVVNUZWQx -GzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0Eg -LSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAyMDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1ow -ZjESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNV -BAMTKmJlVFJVU1RlZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtOK2/b9a0c -S12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtDd5eHI8XbQ6P1KqNRXuE7 -0mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdjDheT389Lrm5zdeDzqrmkwAkbhepxKYhB -MvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCeyv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1i -JAzqHHVOwBLkuhMdMCktVjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOC -AwUwggMBMIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYIKwYB -BQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNyZWF0 -ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs -ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9u -IFByYWN0aWNlIFN0YXRlbWVudCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGlj -aCBjYW4gYmUgZm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0 -cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUFBwIBFjZodHRw -czovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWwwEQYJYIZI -AYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHugeaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEb -MBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAt -IEVudHJ1c3QgSW1wbGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0 -MTEwODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFH1w5a44 -iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQwqoSEFjAMBgNVHRMEBTAD -AQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEAKrgX -zh8QlOu4mre5X+za95IkrNySO8cgjfKZ5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevd -kObRVlTa4y0MnxEylCIBevZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/ -T220Y/ozADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2kXgCl -zMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYhxKlkqu9FNtEaZnz4 -6TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w== ------END CERTIFICATE----- - -beTRUSTed Root CA - RSA Implementation -====================================== ------BEGIN CERTIFICATE----- -MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBiMRIwEAYDVQQK -EwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMmYmVUUlVT -VGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEy -MTEwNzI1WjBiMRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB -czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILnHGhwhRuj -brWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I1DpAa5LxmZZk3tv/ePTu -lh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPktPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xs -N+lFrYWMU8NghpBKlsmzVLC7F/AcRdnUGxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQh -hlkwk75TMzf270HPM8ercmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMB -AAGjggIYMIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+AAAD -CSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNf -c2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIBOhqCATZSZWxpYW5jZSBvbiBvciB1 -c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVhdGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2Nl -cHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlv -bnMgb2YgdXNlLCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS -ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRoZSBiZVRSVVNU -ZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9p -bmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSMEGDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAd -BgNVHQ4EFgQUqewUfvnZQ8xTKxStz/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTB -mMpWBcCorSZIry0g6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05 -pmuKmET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbdLrML3kqN -Wz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28BbJ1zTcwfBwvNMm2+fG8oe -qqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3SK41ty8ymmFei74pnykkiFY5LKjSq5YD -WtRIn7lAhAuYaPsBQ9Yb4gmxlxw= ------END CERTIFICATE----- - -RSA Security 2048 v3 -==================== ------BEGIN CERTIFICATE----- -MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK -ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy -MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb -BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 -Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb -WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH -KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP -+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ -MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E -FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY -v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj -0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj -VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 -nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA -pKnXwiJPZ9d37CAFYd4= ------END CERTIFICATE----- - -RSA Security 1024 v3 -==================== ------BEGIN CERTIFICATE----- -MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK -ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMTAyNCBWMzAeFw0wMTAy -MjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb -BgNVBAsTFFJTQSBTZWN1cml0eSAxMDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV -3f5mCc8kPD6ugU5OisRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4m -mdxY78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9zp9+1Blq -FikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAf -BgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAdBgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUM -X96uBVowDQYJKoZIhvcNAQEFBQADgYEAPy1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBD -leMf6XbN3Ou8k6BlCsdNT1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNu -mU4/iXgDmMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E= ------END CERTIFICATE----- - -GeoTrust Global CA -================== ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw -MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo -BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet -8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc -T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU -vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk -DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q -zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 -d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 -mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p -XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm -Mw== ------END CERTIFICATE----- - -GeoTrust Global CA 2 -==================== ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw -MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ -NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k -LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA -Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b -HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH -K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 -srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh -ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL -OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC -x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF -H4z1Ir+rzoPz4iIprn2DQKi6bA== ------END CERTIFICATE----- - -GeoTrust Universal CA -===================== ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 -MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu -Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t -JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e -RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs -7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d -8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V -qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga -Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB -Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu -KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 -ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 -XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB -hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 -qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL -oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK -xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF -KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 -DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK -xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU -p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI -P/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -GeoTrust Universal CA 2 -======================= ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 -MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg -SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 -DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 -j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q -JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a -QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 -WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP -20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn -ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC -SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG -8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 -+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E -BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ -4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ -mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq -A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg -Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP -pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d -FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp -gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm -X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -UTN-USER First-Network Applications -=================================== ------BEGIN CERTIFICATE----- -MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp -BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5 -WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T -YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB -cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug -mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj -DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu -Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi -P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE -j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w -HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j -cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G -CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y -IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK -RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp -xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq -DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE ------END CERTIFICATE----- - -America Online Root Certification Authority 1 -============================================= ------BEGIN CERTIFICATE----- -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG -A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg -T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG -v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z -DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh -sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP -8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T -AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z -o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf -GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF -VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft -3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g -Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 ------END CERTIFICATE----- - -America Online Root Certification Authority 2 -============================================= ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG -A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg -T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en -fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8 -f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO -qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN -RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0 -gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn -6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid -FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6 -Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj -B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op -aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY -T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p -+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg -JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy -zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO -ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh -1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf -GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff -Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP -cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk= ------END CERTIFICATE----- - -Visa eCommerce Root -=================== ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG -EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug -QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 -WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm -VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL -F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b -RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 -TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI -/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs -GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG -MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc -CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW -YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz -zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu -YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- - -TC TrustCenter, Germany, Class 2 CA -=================================== ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQI -EwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig -U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBD -bGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05 -ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFt -YnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3Vy -aXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3Mg -MiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZI -hvcNAQEBBQADgY0AMIGJAoGBANo46O0yAClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLs -qh1R1z2zUbKDTl3LSbDwTFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5N -u6hLVxa8/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVy -LmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBBAUAA4GBAIRS+yjf -/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ2 -9ELw+HkuCkhcq8xRT3h2oNmsGb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/Ac -ASZ4smZHcFFk ------END CERTIFICATE----- - -TC TrustCenter, Germany, Class 3 CA -=================================== ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQI -EwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig -U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBD -bGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05 -ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFt -YnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3Vy -aXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3Mg -MyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZI -hvcNAQEBBQADgY0AMIGJAoGBALa0wTUFLg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN -2U4CdhHBC/KNecoAtvGwDtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+7 -7uMMfTDWw1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVy -LmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBBAUAA4GBABY9xs3B -u4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIETb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm -5gZOngylerpuw3yCGdHHsbHD2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQS -CdS7kjXvD9s0 ------END CERTIFICATE----- - -Certum Root CA -============== ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK -ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla -Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u -by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x -wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL -kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ -89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K -Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P -NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ -GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg -GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ -0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS -qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== ------END CERTIFICATE----- - -Comodo AAA Services root -======================== ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw -MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl -c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV -BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG -C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs -i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW -Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH -Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK -Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f -BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl -cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz -LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm -7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z -8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C -12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -Comodo Secure Services root -=========================== ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw -MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu -Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi -BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP -9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc -rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC -oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V -p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E -FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w -gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj -YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm -aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm -4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL -DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw -pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H -RR3B7Hzs/Sk= ------END CERTIFICATE----- - -Comodo Trusted Services root -============================ ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw -MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h -bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw -IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 -3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y -/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 -juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS -ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud -DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp -ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl -cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw -uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA -BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l -R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O -9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - -IPS Chained CAs root -==================== ------BEGIN CERTIFICATE----- -MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVTMRIwEAYDVQQI -EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1 -Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg -Qi02MDkyOTQ1MjEzMDEGA1UECxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MTMwMQYDVQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMjkwMDUzNThaFw0yNTEy -MjcwMDUzNThaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJ -QmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwu -MSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJ -UFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBD -QSBDaGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBz -QG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcVpJJspQgvJhPUOtopKdJ -C7/SMejHT8KGC/po/UNaivNgkjWZOLtNA1IhW/A3mTXhQSCBhYEFcYGdtJUZqV92NC5jNzVXjrQf -Qj8VXOF6wV8TGDIxya2+o8eDZh65nAQTy2nBBt4wBrszo7Uf8I9vzv+W6FS+ZoCua9tBhDaiPQID -AQABo4IEQzCCBD8wHQYDVR0OBBYEFKGtMbH5PuEXpsirNPxShwkeYlJBMIIBTgYDVR0jBIIBRTCC -AUGAFKGtMbH5PuEXpsirNPxShwkeYlJBoYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE -CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBw -dWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g -IEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBDaGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTEzMDEGA1UEAxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9y -aXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNV -HQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUF -BwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGC -NwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud -EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ2hhaW5lZCBDQSBDZXJ0aWZp -Y2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8v -d3d3Lmlwcy5lcy9pcHMyMDAyLzA3BglghkgBhvhCAQQEKhYoaHR0cDovL3d3dy5pcHMuZXMvaXBz -MjAwMi9pcHMyMDAyQ0FDLmNybDA8BglghkgBhvhCAQMELxYtaHR0cDovL3d3dy5pcHMuZXMvaXBz -MjAwMi9yZXZvY2F0aW9uQ0FDLmh0bWw/MDkGCWCGSAGG+EIBBwQsFipodHRwOi8vd3d3Lmlwcy5l -cy9pcHMyMDAyL3JlbmV3YWxDQUMuaHRtbD8wNwYJYIZIAYb4QgEIBCoWKGh0dHA6Ly93d3cuaXBz -LmVzL2lwczIwMDIvcG9saWN5Q0FDLmh0bWwwbQYDVR0fBGYwZDAuoCygKoYoaHR0cDovL3d3dy5p -cHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAyoDCgLoYsaHR0cDovL3d3d2JhY2suaXBzLmVz -L2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw -Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAERyMJ1WWKJBGyi3leGmGpVfp3hAK+/b -lkr8THFj2XOVvQLiogbHvpcqk4A0hgP63Ng9HgfNHnNDJGD1HWHc3JagvPsd4+cSACczAsDAK1M9 -2GsDgaPb1pOVIO/Tln4mkImcJpvNb2ar7QMiRDjMWb2f2/YHogF/JsRj9SVCXmK9 ------END CERTIFICATE----- - -IPS CLASE1 root -=============== ------BEGIN CERTIFICATE----- -MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVTMRIwEAYDVQQI -EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1 -Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg -Qi02MDkyOTQ1MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqG -SIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAwNTkzOFow -ggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmEx -LjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoU -Imlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFT -RTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkq -hkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywSzHb5BlmvXSHU0lq4 -oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBSYmL9Yzt9fuzuOOpi9GyocY3h6YvJ -P8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQKD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQW -BBTrsxl588GlHKzcuh9morKbadB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKb -adB4CKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE -BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBz -LmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQL -EyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0Eg -Q0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p -cHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMB -BggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB -BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0R -BBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBBBglghkgB -hvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5l -cy8wKQYJYIZIAYb4QgECBBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIB -BAQtFitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCGSAGG -+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25DTEFTRTEuaHRtbD8w -PAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMS5o -dG1sPzA6BglghkgBhvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT -RTEuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIw -MDJDTEFTRTEuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy -Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l -cy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuKYn4VLenZMdMu9Ccj/1urxUq2 -ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpjV4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmO -DszFV0VRFOlOHIilkfSj945RyKm+hjM+5i9Ibq9UkE6tsSU= ------END CERTIFICATE----- - -IPS CLASE3 root -=============== ------BEGIN CERTIFICATE----- -MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVTMRIwEAYDVQQI -EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1 -Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg -Qi02MDkyOTQ1MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqG -SIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAxMDE0NFow -ggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmEx -LjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoU -Imlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFT -RTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkq -hkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZH49NzjaY2uQARIwo -2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY8jjsbJ0gA8DvqqPGZARRLXgNo9Ko -OtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVrSXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQW -BBS4k/8uy9wsjqLnev42USGjmFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGj -mFsMNKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE -BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBz -LmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQL -EyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0Eg -Q0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p -cHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMB -BggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB -BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0R -BBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBBBglghkgB -hvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5l -cy8wKQYJYIZIAYb4QgECBBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIB -BAQtFitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCGSAGG -+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25DTEFTRTMuaHRtbD8w -PAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMy5o -dG1sPzA6BglghkgBhvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT -RTMuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIw -MDJDTEFTRTMuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy -Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l -cy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dDqsfwfewPxqmurpYPdikc4gYt -fibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUE -NPjDfxZ4IwwHJPJGR607VNCv1TGyr33I6unUVtkOE7LFRVA= ------END CERTIFICATE----- - -IPS CLASEA1 root -================ ------BEGIN CERTIFICATE----- -MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQI -EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1 -Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg -Qi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ -KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3MDEwNTMy -WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9u -YTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENM -QVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8w -DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8m2mdd81u4D/u6zJf -X5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4WwdByOgF9H5fahGRpEiqLJpxq339fWU -oTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNV -HQ4EFgQUZyaW56G/2LUDnf473P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf47 -3P7yiuYV3TChggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2Vydmlj -ZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0G -A1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQ -UyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNA -bWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsG -AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB -FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw -GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC -BglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3 -dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7Bglg -hkgBhvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmww -QAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNMQVNF -QTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdh -bENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv -cG9saWN5Q0xBU0VBMS5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lw -czIwMDIvaXBzMjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz -MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw -Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyAAIQVCtWYUQxkxZwCWINmyq0e -B81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeFaQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5bi -KcJboOeXNp13XjFr/tOn2yrb25aLH2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG ------END CERTIFICATE----- - -IPS CLASEA3 root -================ ------BEGIN CERTIFICATE----- -MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQI -EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1 -Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg -Qi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ -KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3MDEwNzUw -WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9u -YTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENM -QVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8w -DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvNG7uGBiJ2MwwSbUhW -YdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHUVqLyjRGZ/fZ98cfEXgIqmuJKtROK -AP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNV -HQ4EFgQUHp9XUEe2YZM50yz82l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz8 -2l09BXW3mQKhggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2Vydmlj -ZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0G -A1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQ -UyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNA -bWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsG -AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB -FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw -GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC -BglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3 -dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7Bglg -hkgBhvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmww -QAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNMQVNF -QTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdh -bENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv -cG9saWN5Q0xBU0VBMy5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lw -czIwMDIvaXBzMjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz -MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw -Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca2on0eisxeewBwMwB9dbB/MjD -81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9S -KcJQrSRE7SOzSMtEQMEDlQwKeAYSAfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv ------END CERTIFICATE----- - -IPS Servidores root -=================== ------BEGIN CERTIFICATE----- -MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCQVJD -RUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYG -A1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3 -DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMx -CzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcG -A1UEChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD -Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMIGfMA0GCSqG -SIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyYXZhkJAk8IbPMGbWOlI6H0fg3PqHILVik -gDVboXVsHUUMH2Fjal5vmwpMwci4YSM1gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Eh -im51KODFDzT9NthFf+G4Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GB -ACzzw3lYJN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsUdx+2 -/iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14cJ58GNCr+Lh3B0Zx -8coLY1xq+XKU1QFPoNtC ------END CERTIFICATE----- - -IPS Timestamping root -===================== ------BEGIN CERTIFICATE----- -MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVTMRIwEAYDVQQI -EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1 -Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg -Qi02MDkyOTQ1MjE0MDIGA1UECxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTE0MDIGA1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMTAxOFoXDTI1 -MTIyNzAxMTAxOFowggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQH -EwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMu -bC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsT -K0lQUyBDQSBUaW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQ -UyBDQSBUaW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEW -D2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLjuVqWajOY2ycJi -oGaBjRrVetJznw6EZLqVtJCneK/K/lRhW86yIFcBrkSSQxA4Efdo/BdApWgnMjvEp+ZCccWZ73b/ -K5Uk9UmSGGjKALWkWi9uy9YbLA1UZ2t6KaFYq6JaANZbuxjC3/YeE1Z2m6Vo4pjOxgOKNNtMg0Gm -qaMCAwEAAaOCBIAwggR8MB0GA1UdDgQWBBSL0BBQCYHynQnVDmB4AyKiP8jKZjCCAVAGA1UdIwSC -AUcwggFDgBSL0BBQCYHynQnVDmB4AyKiP8jKZqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ -BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJu -ZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5J -LkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MTQwMgYDVQQDEytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB -/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG -CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYK -KwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVz -MBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBHBglghkgBhvhCAQ0EOhY4VGltZXN0YW1waW5n -IENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC -BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMEAGCWCGSAGG+EIBBAQzFjFodHRwOi8vd3d3 -Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEUGCWCGSAGG+EIBAwQ4FjZo -dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25UaW1lc3RhbXBpbmcuaHRtbD8wQgYJ -YIZIAYb4QgEHBDUWM2h0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbFRpbWVzdGFtcGlu -Zy5odG1sPzBABglghkgBhvhCAQgEMxYxaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lU -aW1lc3RhbXBpbmcuaHRtbDB/BgNVHR8EeDB2MDegNaAzhjFodHRwOi8vd3d3Lmlwcy5lcy9pcHMy -MDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMDugOaA3hjVodHRwOi8vd3d3YmFjay5pcHMuZXMv -aXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUH -MAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAZbrBzAAalZHK6Ww6vzoe -FAh8+4Pua2JR0zORtWB5fgTYXXk36MNbsMRnLWhasl8OCvrNPzpFoeo2zyYepxEoxZSPhExTCMWT -s/zif/WN87GphV+I3pGW7hdbrqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU= ------END CERTIFICATE----- - -QuoVadis Root CA -================ ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE -ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz -MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp -cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD -EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk -J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL -F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL -YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen -AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w -PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y -ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 -MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj -YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs -ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW -Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu -BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw -FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 -tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo -fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul -LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x -gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi -5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi -5nrQNiOKSnQ2+Q== ------END CERTIFICATE----- - -QuoVadis Root CA 2 -================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -QuoVadis Root CA 3 -================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -Security Communication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw -8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM -DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX -5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd -DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 -JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g -0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a -mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ -s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ -6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi -FL39vmwLAw== ------END CERTIFICATE----- - -Sonera Class 1 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw -NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88 -7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9 -EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl -0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645 -2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa -HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT -iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9 -28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV -yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR -vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P -qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z -IRlXvVWa ------END CERTIFICATE----- - -Sonera Class 2 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw -NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 -/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT -dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG -f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P -tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH -nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT -XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt -0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI -cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph -Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx -EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH -llpwrN9M ------END CERTIFICATE----- - -Staat der Nederlanden Root CA -============================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE -ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w -HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh -bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt -vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P -jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca -C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth -vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 -22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV -HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v -dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN -BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR -EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw -MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y -nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR -iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== ------END CERTIFICATE----- - -TDC Internet Root CA -==================== ------BEGIN CERTIFICATE----- -MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE -ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx -NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu -ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j -xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL -znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc -5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6 -otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI -AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM -VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM -MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC -AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe -UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G -CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m -gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ -2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb -O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU -Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l ------END CERTIFICATE----- - -TDC OCES Root CA -================ ------BEGIN CERTIFICATE----- -MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE -ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5 -MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH -nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0 -zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV -iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde -dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO -3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB -5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k -ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm -cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp -Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x -LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM -MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm -aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy -MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647 -+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6 -NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4 -A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc -A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9 -AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1 -AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw== ------END CERTIFICATE----- - -UTN DATACorp SGC Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ -BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa -MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w -HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy -dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys -raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo -wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA -9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv -33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud -DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9 -BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD -LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3 -DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0 -I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx -EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP -DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - -UTN USERFirst Email Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0 -BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05 -OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx -FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx -ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz -dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx -B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8 -om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG -TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl -yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE -AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV -HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll -bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH -AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne -xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+ -5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV -NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ -w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= ------END CERTIFICATE----- - -UTN USERFirst Hardware Root CA -============================== ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd -BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx -OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 -eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz -ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI -wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd -tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 -i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf -Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw -gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF -lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF -UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF -BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW -XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 -lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn -iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 -nfhmqA== ------END CERTIFICATE----- - -UTN USERFirst Object Root CA -============================ ------BEGIN CERTIFICATE----- -MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb -BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz -NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx -HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy -dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR -loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ -w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu -lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7 -RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL -BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8 -ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly -c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw -DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw -NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO -PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE -qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG -hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= ------END CERTIFICATE----- - -Camerfirma Chambers of Commerce Root -==================================== ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe -QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i -ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx -NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp -cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn -MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC -AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU -xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH -NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW -DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV -d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud -EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v -cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P -AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh -bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD -VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz -aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi -fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD -L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN -UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n -ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 -erfutGWaIZDgqtCYvDi1czyL+Nw= ------END CERTIFICATE----- - -Camerfirma Global Chambersign Root -================================== ------BEGIN CERTIFICATE----- -MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe -QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i -ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx -NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt -YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg -MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw -ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J -1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O -by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl -6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c -8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ -BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j -aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B -Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj -aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y -ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh -bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA -PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y -gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ -PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 -IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes -t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== ------END CERTIFICATE----- - -NetLock Qualified (Class QA) Root -================================= ------BEGIN CERTIFICATE----- -MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn -eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0 -bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER -MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0 -LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0 -dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP -aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV -CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e -8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb -m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ -0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM -0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV -HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2 -YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh -biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p -a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz -YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg -YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg -ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov -L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr -Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0 -aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg -YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0 -IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3 -DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN -wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg -W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc -R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR -5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko ------END CERTIFICATE----- - -NetLock Notary (Class A) Root -============================= ------BEGIN CERTIFICATE----- -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI -EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 -dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j -ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX -DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH -EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD -VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz -cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM -D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ -z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC -/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 -tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 -4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG -A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC -Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv -bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn -LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 -ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz -IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh -IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu -b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh -bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg -Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp -bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 -ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP -ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB -CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr -KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM -8CgHrTwXZoi1/baI ------END CERTIFICATE----- - -NetLock Business (Class B) Root -=============================== ------BEGIN CERTIFICATE----- -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg -VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD -VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv -bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg -VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB -iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S -o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr -1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV -HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ -RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh -dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0 -ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv -c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg -YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz -Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA -bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl -IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2 -YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj -cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM -43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR -stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI ------END CERTIFICATE----- - -NetLock Express (Class C) Root -============================== ------BEGIN CERTIFICATE----- -MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD -KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ -BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 -dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j -ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB -jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z -W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63 -euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw -DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN -RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn -YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB -IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i -aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0 -ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs -ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y -emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k -IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ -UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg -YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2 -xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW -gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A== ------END CERTIFICATE----- - -XRamp Global CA Root -==================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE -BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj -dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx -HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg -U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu -IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx -foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE -zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs -AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry -xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap -oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC -AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc -/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n -nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz -8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -Go Daddy Class 2 CA -=================== ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY -VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG -A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g -RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD -ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv -2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 -qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j -YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY -vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O -BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o -atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu -MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim -PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt -I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI -Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b -vZ8= ------END CERTIFICATE----- - -Starfield Class 2 CA -==================== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc -U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo -MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG -A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG -SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY -bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ -JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm -epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN -F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF -MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f -hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo -bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs -afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM -PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD -KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 -QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -StartCom Ltd. -============= ------BEGIN CERTIFICATE----- -MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT -BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xGjAYBgNVBAsT -EUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoX -DTM1MDMxMDE3Mzc0OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcT -BUVpbGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3JpdHkgRGVw -LjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxITAfBgkqhkiG9w0B -CQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOe -yEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+ -o5c5s7XvIywI6Nivcy+5yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2 -IhULpNYILzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0GA1Ud -DgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOWzL3+MtUNjIExtpid -jShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWls -YXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkw -JwYDVQQDEyBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS -YWRtaW5Ac3RhcnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV -HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8GCWCGSAGG+EIB -DQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAyBglghkgBhvhCAQQEJRYjaHR0 -cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5jcmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9j -ZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJYIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9y -Zy9pbmRleC5waHA/YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhB -OlP1ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p00UOpO6w -NnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLbcCOxgN8aIDjnfg== ------END CERTIFICATE----- - -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu -ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 -NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk -LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg -U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y -o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ -Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d -eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt -2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z -6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ -osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ -untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc -UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT -37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj -YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH -AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw -Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg -U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 -LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh -cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT -dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC -AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh -3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm -vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk -fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 -fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ -EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl -1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ -lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro -g14= ------END CERTIFICATE----- - -Taiwan GRCA -=========== ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG -EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X -DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv -dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN -w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 -BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O -1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO -htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov -J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 -Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t -B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB -O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 -lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV -HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 -09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj -Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 -Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU -D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz -DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk -Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk -7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ -CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy -+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS ------END CERTIFICATE----- - -Firmaprofesional Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT -GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp -Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA -ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL -MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT -OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2 -ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V -j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH -lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf -3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8 -NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww -KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG -AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD -ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq -u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf -wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm -7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG -VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA= ------END CERTIFICATE----- - -Wells Fargo Root CA -=================== ------BEGIN CERTIFICATE----- -MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV -BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN -MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl -bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv -MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX -x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3 -E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5 -OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j -sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj -YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF -BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD -ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv -m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R -OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx -x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023 -tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= ------END CERTIFICATE----- - -Swisscom Root CA 1 -================== ------BEGIN CERTIFICATE----- -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 -NY6E0F/6MBr1mmz0DlP5OlvRHA== ------END CERTIFICATE----- - -DigiCert Assured ID Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx -MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO -9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy -UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW -/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy -oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf -GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF -66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq -hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc -EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn -SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i -8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -DigiCert Global Root CA -======================= ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw -MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn -TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 -BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H -4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y -7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB -o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm -8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF -BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr -EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt -tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 -UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -DigiCert High Assurance EV Root CA -================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw -KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw -MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ -MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu -Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t -Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS -OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 -MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ -NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe -h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB -Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY -JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ -V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp -myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK -mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K ------END CERTIFICATE----- - -Certplus Class 2 Primary CA -=========================== ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE -BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN -OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy -dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR -5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ -Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO -YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e -e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME -CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ -YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t -L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD -P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R -TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ -7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW -//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -DST Root CA X3 -============== ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK -ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X -DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 -cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT -rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 -UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy -xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d -utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ -MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug -dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE -GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw -RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS -fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -DST ACES CA X6 -============== ------BEGIN CERTIFICATE----- -MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT -MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha -MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE -CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI -DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa -pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow -GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy -MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu -Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy -dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU -CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 -5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t -Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq -nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs -vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 -oKfN5XozNmr6mis= ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 1 -============================================== ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP -MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 -acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx -MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg -U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB -TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC -aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX -yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i -Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ -8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4 -W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME -BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46 -sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE -q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy -B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY -nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 2 -============================================== ------BEGIN CERTIFICATE----- -MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP -MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg -QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN -MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr -dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G -A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls -acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe -LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI -x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g -QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr -5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB -AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt -Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 -Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+ -hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P -9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5 -UrbnBEI= ------END CERTIFICATE----- - -SwissSign Platinum CA - G2 -========================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -SwissSign Gold CA - G2 -====================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -SwissSign Silver CA - G2 -======================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority -======================================== ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx -CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ -cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN -b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 -nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge -RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt -tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI -hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K -Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN -NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa -Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG -1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -thawte Primary Root CA -====================== ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 -MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg -SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv -KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT -FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs -oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ -1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc -q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K -aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p -afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF -AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE -uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 -jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH -z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G5 -============================================================ ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln -biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh -dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz -j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD -Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ -Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r -fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv -Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG -SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ -X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE -KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC -Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE -ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -SecureTrust CA -============== ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy -dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe -BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX -OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t -DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH -GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b -01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH -ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj -aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu -SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf -mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ -nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -Secure Global CA -================ ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH -bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg -MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg -Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx -YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ -bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g -8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV -HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi -0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn -oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA -MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ -OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn -CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 -3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -COMODO Certification Authority -============================== ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE -BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG -A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb -MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD -T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH -+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww -xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV -4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA -1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI -rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k -b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC -AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP -OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc -IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN -+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== ------END CERTIFICATE----- - -DigiNotar Root CA -================= ------BEGIN CERTIFICATE----- -MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQG -EwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEgMB4G -CSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwHhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgx -OTIxWjBfMQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90 -YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3 -DQEBAQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B8cp86Yxq -7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXYtsMW2YiwsYcdcNqGtA8U -i3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIlHgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8 -ZkqQfioLBQftFl9VkHXYRskbg+IIvvEjzJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEq -bYRAhU52mXyC8/O3AlnUJgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4 -iHomGgVMktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXva5pk -XuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57pK6kwe6AYHw4YC+Vb -qdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMipuih2TkGl/VujQKQjBR7P4DNG5y6 -xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovTyD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHc -BmfFlHqabWJMfczgZICynkeOowIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC -jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXyfJ9oHbtdzno5 -wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBoY6pFITlIYXg23PFDk9Qlx/KA -ZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHoM/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedT -FLJgQT2EkTFoPSdE2+Xe9PpjRchMPpj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKf -yvBovWsdst+Nbwed2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoA -ZbwH/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQlnQ7KN+ZQ -/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jEO1hZibCMjFCz2IbLaKPE -CudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU9jQZjHkJNsphFyUXC4KYcwx3dMPVDceo -EkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr ------END CERTIFICATE----- - -Network Solutions Certificate Authority -======================================= ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG -EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr -IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx -MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx -jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT -aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT -crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc -/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB -AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv -bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA -A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q -4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ -GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD -ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -WellsSecure Public Root Certificate Authority -============================================= ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM -F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw -NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN -MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl -bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD -VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 -iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 -i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 -bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB -K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB -AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu -cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm -lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB -i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww -GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI -K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 -bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj -qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es -E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ -tylv2G0xffX8oRAHh84vWdw+WNs= ------END CERTIFICATE----- diff --git a/cloudfiles/share/magic b/cloudfiles/share/magic deleted file mode 100644 index 7ae875d..0000000 --- a/cloudfiles/share/magic +++ /dev/null @@ -1,15283 +0,0 @@ -# Magic data for file(1) command. -# Format is described in magic(5). -# Don't edit this file, edit /etc/magic or send your suggested inclusions to -# this file as a wishlist bug against file (using the reportbug utility). - - -#------------------------------------------------------------------------------ -# Localstuff: file(1) magic for locally observed files -# -# $File: Localstuff,v 1.4 2003/03/23 04:17:27 christos Exp $ -# Add any locally observed files here. Remember: -# text if readable, executable if runnable binary, data if unreadable. -#------------------------------------------------------------------------------ -# acorn: file(1) magic for files found on Acorn systems -# - -# RISC OS Chunk File Format -# From RISC OS Programmer's Reference Manual, Appendix D -# We guess the file type from the type of the first chunk. -0 lelong 0xc3cbc6c5 RISC OS Chunk data ->12 string OBJ_ \b, AOF object ->12 string LIB_ \b, ALF library - -# RISC OS AIF, contains "SWI OS_Exit" at offset 16. -16 lelong 0xef000011 RISC OS AIF executable - -# RISC OS Draw files -# From RISC OS Programmer's Reference Manual, Appendix E -0 string Draw RISC OS Draw file data - -# RISC OS new format font files -# From RISC OS Programmer's Reference Manual, Appendix E -0 string FONT\0 RISC OS outline font data, ->5 byte x version %d -0 string FONT\1 RISC OS 1bpp font data, ->5 byte x version %d -0 string FONT\4 RISC OS 4bpp font data ->5 byte x version %d - -# RISC OS Music files -# From RISC OS Programmer's Reference Manual, Appendix E -0 string Maestro\r RISC OS music file ->8 byte x version %d - ->8 byte x type %d - -# Digital Symphony data files -# From: Bernard Jungen (bern8817@euphonynet.be) -0 string \x02\x01\x13\x13\x13\x01\x0d\x10 Digital Symphony sound sample (RISC OS), ->8 byte x version %d, ->9 pstring x named "%s", ->(9.b+19) byte =0 8-bit logarithmic ->(9.b+19) byte =1 LZW-compressed linear ->(9.b+19) byte =2 8-bit linear signed ->(9.b+19) byte =3 16-bit linear signed ->(9.b+19) byte =4 SigmaDelta-compressed linear ->(9.b+19) byte =5 SigmaDelta-compressed logarithmic ->(9.b+19) byte >5 unknown format - -0 string \x02\x01\x13\x13\x14\x12\x01\x0b Digital Symphony song (RISC OS), ->8 byte x version %d, ->9 byte =1 1 voice, ->9 byte !1 %d voices, ->10 leshort =1 1 track, ->10 leshort !1 %d tracks, ->12 leshort =1 1 pattern ->12 leshort !1 %d patterns - -0 string \x02\x01\x13\x13\x10\x14\x12\x0e ->9 byte =0 Digital Symphony sequence (RISC OS), ->>8 byte x version %d, ->>10 byte =1 1 line, ->>10 byte !1 %d lines, ->>11 leshort =1 1 position ->>11 leshort !1 %d positions ->9 byte =1 Digital Symphony pattern data (RISC OS), ->>8 byte x version %d, ->>10 leshort =1 1 pattern ->>10 leshort !1 %d patterns - -#------------------------------------------------------------------------------ -# adi: file(1) magic for ADi's objects -# From Gregory McGarry <g.mcgarry@ieee.org> -# -0 leshort 0x521c COFF DSP21k ->18 lelong &02 executable, ->18 lelong ^02 ->>18 lelong &01 static object, ->>18 lelong ^01 relocatable object, ->18 lelong &010 stripped ->18 lelong ^010 not stripped - -#------------------------------------------------------------------------------ -# adventure: file(1) magic for Adventure game files -# -# from Allen Garvin <earendil@faeryland.tamu-commerce.edu> -# Edited by Dave Chapeskie <dchapes@ddm.on.ca> Jun 28, 1998 -# Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002 -# -# ALAN -# I assume there are other, lower versions, but these are the only ones I -# saw in the archive. -0 beshort 0x0206 ALAN game data ->2 byte <10 version 2.6%d - - -# Infocom (see z-machine) -#------------------------------------------------------------------------------ -# Z-machine: file(1) magic for Z-machine binaries. -# -# Updated by Adam Buchbinder <adam.buchbinder@gmail.com> -# -# The first byte is the Z-machine revision; it is always between 1 and 8. We -# had false matches (for instance, inbig5.ocp from the Omega TeX extension as -# well as an occasional MP3 file), so we sanity-check the version number. -# -# It might be possible to sanity-check the release number as well, as it seems -# (at least in classic Infocom games) to always be a relatively small number, -# always under 150 or so, but as this isn't rigorous, we'll wait on that until -# it becomes clear that it's needed. -# -0 ubyte >0 ->0 ubyte <9 ->>16 belong&0xfe00f0f0 0x3030 Infocom game data ->>>0 ubyte x (Z-machine %d, ->>>>2 ubeshort x Release %d / ->>>>18 string >\0 Serial %.6s) - -#------------------------------------------------------------------------------ -# Glulx: file(1) magic for Glulx binaries. -# -# I haven't checked for false matches yet. -# -0 string Glul Glulx game data ->4 beshort x (Version %d ->>6 byte x \b.%d ->>8 byte x \b.%d) ->36 string Info Compiled by Inform - - - -# For Quetzal and blorb magic see iff - - -# TADS (Text Adventure Development System) -# All files are machine-independent (games compile to byte-code) and are tagged -# with a version string of the form "V2.<digit>.<digit>\0" (but TADS 3 is -# on the way). -# Game files start with "TADS2 bin\n\r\032\0" then the compiler version. -0 string TADS2\ bin TADS ->9 belong !0x0A0D1A00 game data, CORRUPTED ->9 belong 0x0A0D1A00 ->>13 string >\0 %s game data -# Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version. -0 string TADS2\ rsc TADS ->9 belong !0x0A0D1A00 resource data, CORRUPTED ->9 belong 0x0A0D1A00 ->>13 string >\0 %s resource data -# Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian -# 2-byte length N, the N-char name of the game file *without* a NUL (darn!), -# "TADS2 save\n\r\032\0" and the interpreter version. -0 string TADS2\ save/g TADS ->12 belong !0x0A0D1A00 saved game data, CORRUPTED ->12 belong 0x0A0D1A00 ->>(16.s+32) string >\0 %s saved game data -# Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter -# version. -0 string TADS2\ save TADS ->10 belong !0x0A0D1A00 saved game data, CORRUPTED ->10 belong 0x0A0D1A00 ->>14 string >\0 %s saved game data - -# Danny Milosavljevic <danny.milo@gmx.net> -# this are adrift (adventure game standard) game files, extension .taf -# depending on version magic continues with 0x93453E6139FA (V 4.0) -# 0x9445376139FA (V 3.90) -# 0x9445366139FA (V 3.80) -# this is from source (http://www.adrift.org.uk/) and I have some taf -# files, and checked them. -#0 belong 0x3C423FC9 -#>4 belong 0x6A87C2CF Adrift game file -#!:mime application/x-adrift -#------------------------------------------------------------------------------ -# allegro: file(1) magic for Allegro datafiles -# Toby Deshane <hac@shoelace.digivill.net> -# -0 belong 0x736C6821 Allegro datafile (packed) -0 belong 0x736C682E Allegro datafile (not packed/autodetect) -0 belong 0x736C682B Allegro datafile (appended exe data) - -#------------------------------------------------------------------------------ -# alliant: file(1) magic for Alliant FX series a.out files -# -# If the FX series is the one that had a processor with a 68K-derived -# instruction set, the "short" should probably become "beshort" and the -# "long" should probably become "belong". -# If it's the i860-based one, they should probably become either the -# big-endian or little-endian versions, depending on the mode they ran -# the 860 in.... -# -0 short 0420 0420 Alliant virtual executable ->2 short &0x0020 common library ->16 long >0 not stripped -0 short 0421 0421 Alliant compact executable ->2 short &0x0020 common library ->16 long >0 not stripped -#------------------------------------------------------------------------------ -# alpha architecture description -# - -0 leshort 0603 COFF format alpha ->22 leshort&030000 !020000 executable ->24 leshort 0410 pure ->24 leshort 0413 paged ->22 leshort&020000 !0 dynamically linked ->16 lelong !0 not stripped ->16 lelong 0 stripped ->22 leshort&030000 020000 shared library ->24 leshort 0407 object ->27 byte x - version %d ->26 byte x .%d ->28 byte x -%d - -# Basic recognition of Digital UNIX core dumps - Mike Bremford <mike@opac.bl.uk> -# -# The actual magic number is just "Core", followed by a 2-byte version -# number; however, treating any file that begins with "Core" as a Digital -# UNIX core dump file may produce too many false hits, so we include one -# byte of the version number as well; DU 5.0 appears only to be up to -# version 2. -# -0 string Core\001 Alpha COFF format core dump (Digital UNIX) ->24 string >\0 \b, from '%s' -0 string Core\002 Alpha COFF format core dump (Digital UNIX) ->24 string >\0 \b, from '%s' - -#------------------------------------------------------------------------------ -# amanda: file(1) magic for amanda file format -# -0 string AMANDA:\ AMANDA ->8 string TAPESTART\ DATE tape header file, ->>23 string X ->>>25 string >\ Unused %s ->>23 string >\ DATE %s ->8 string FILE\ dump file, ->>13 string >\ DATE %s -#------------------------------------------------------------------------------ -# amigaos: file(1) magic for AmigaOS binary formats: - -# -# From ignatios@cs.uni-bonn.de (Ignatios Souvatzis) -# -0 belong 0x000003fa AmigaOS shared library -0 belong 0x000003f3 AmigaOS loadseg()ble executable/binary -0 belong 0x000003e7 AmigaOS object/library data -# -0 beshort 0xe310 Amiga Workbench ->2 beshort 1 ->>48 byte 1 disk icon ->>48 byte 2 drawer icon ->>48 byte 3 tool icon ->>48 byte 4 project icon ->>48 byte 5 garbage icon ->>48 byte 6 device icon ->>48 byte 7 kickstart icon ->>48 byte 8 workbench application icon ->2 beshort >1 icon, vers. %d -# -# various sound formats from the Amiga -# G=F6tz Waschk <waschk@informatik.uni-rostock.de> -# -0 string FC14 Future Composer 1.4 Module sound file -0 string SMOD Future Composer 1.3 Module sound file -0 string AON4artofnoise Art Of Noise Module sound file -1 string MUGICIAN/SOFTEYES Mugician Module sound file -58 string SIDMON\ II\ -\ THE Sidmon 2.0 Module sound file -0 string Synth4.0 Synthesis Module sound file -0 string ARP. The Holy Noise Module sound file -0 string BeEp\0 JamCracker Module sound file -0 string COSO\0 Hippel-COSO Module sound file -# Too simple (short, pure ASCII, deep), MPi -#26 string V.3 Brian Postma's Soundmon Module sound file v3 -#26 string BPSM Brian Postma's Soundmon Module sound file v3 -#26 string V.2 Brian Postma's Soundmon Module sound file v2 - -# The following are from: "Stefan A. Haubenthal" <polluks@web.de> -0 beshort 0x0f00 AmigaOS bitmap font -0 beshort 0x0f03 AmigaOS outline font -0 belong 0x80001001 AmigaOS outline tag -0 string ##\ version catalog translation -0 string EMOD\0 Amiga E module -8 string ECXM\0 ECX module -0 string/c @database AmigaGuide file - -# Amiga disk types -# -0 string RDSK Rigid Disk Block ->160 string x on %.24s -0 string DOS\0 Amiga DOS disk -0 string DOS\1 Amiga FFS disk -0 string DOS\2 Amiga Inter DOS disk -0 string DOS\3 Amiga Inter FFS disk -0 string DOS\4 Amiga Fastdir DOS disk -0 string DOS\5 Amiga Fastdir FFS disk -0 string KICK Kickstart disk - -# From: Alex Beregszaszi <alex@fsn.hu> -0 string LZX LZX compressed archive (Amiga) - - -#------------------------------------------------------------------------------ -# animation: file(1) magic for animation/movie formats -# -# animation formats -# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8) -# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com) - -# SGI and Apple formats -0 string MOVI Silicon Graphics movie file -!:mime video/x-sgi-movie -4 string moov Apple QuickTime -!:mime video/quicktime ->12 string mvhd \b movie (fast start) ->12 string mdra \b URL ->12 string cmov \b movie (fast start, compressed header) ->12 string rmra \b multiple URLs -4 string mdat Apple QuickTime movie (unoptimized) -!:mime video/quicktime -#4 string wide Apple QuickTime movie (unoptimized) -#!:mime video/quicktime -#4 string skip Apple QuickTime movie (modified) -#!:mime video/quicktime -#4 string free Apple QuickTime movie (modified) -#!:mime video/quicktime -4 string idsc Apple QuickTime image (fast start) -!:mime image/x-quicktime -#4 string idat Apple QuickTime image (unoptimized) -#!:mime image/x-quicktime -4 string pckg Apple QuickTime compressed archive -!:mime application/x-quicktime-player -4 string/B jP JPEG 2000 image -!:mime image/jp2 -4 string ftyp ISO Media ->8 string isom \b, MPEG v4 system, version 1 -!:mime video/mp4 ->8 string iso2 \b, MPEG v4 system, part 12 revision ->8 string mp41 \b, MPEG v4 system, version 1 -!:mime video/mp4 ->8 string mp42 \b, MPEG v4 system, version 2 -!:mime video/mp4 ->8 string mp7t \b, MPEG v4 system, MPEG v7 XML ->8 string mp7b \b, MPEG v4 system, MPEG v7 binary XML ->8 string/B jp2 \b, JPEG 2000 -!:mime image/jp2 ->8 string 3gp \b, MPEG v4 system, 3GPP -!:mime video/3gpp ->>11 byte 4 \b v4 (H.263/AMR GSM 6.10) ->>11 byte 5 \b v5 (H.263/AMR GSM 6.10) ->>11 byte 6 \b v6 (ITU H.264/AMR GSM 6.10) ->8 string mmp4 \b, MPEG v4 system, 3GPP Mobile -!:mime video/mp4 ->8 string avc1 \b, MPEG v4 system, 3GPP JVT AVC -!:mime video/3gpp ->8 string/B M4A \b, MPEG v4 system, iTunes AAC-LC -!:mime audio/mp4 ->8 string/B M4V \b, MPEG v4 system, iTunes AVC-LC -!:mime video/mp4 ->8 string/B M4P \b, MPEG v4 system, iTunes AES encrypted ->8 string/B M4B \b, MPEG v4 system, iTunes bookmarked ->8 string/B qt \b, Apple QuickTime movie -!:mime video/quicktime - -# MPEG sequences -# Scans for all common MPEG header start codes -0 belong 0x00000001 ->4 byte&0x1F 0x07 JVT NAL sequence, H.264 video ->>5 byte 66 \b, baseline ->>5 byte 77 \b, main ->>5 byte 88 \b, extended ->>7 byte x \b @ L %u -0 belong&0xFFFFFF00 0x00000100 ->3 byte 0xBA MPEG sequence ->>4 byte &0x40 \b, v2, program multiplex ->>4 byte ^0x40 \b, v1, system multiplex ->3 byte 0xBB MPEG sequence, v1/2, multiplex (missing pack header) ->3 byte&0x1F 0x07 MPEG sequence, H.264 video ->>4 byte 66 \b, baseline ->>4 byte 77 \b, main ->>4 byte 88 \b, extended ->>6 byte x \b @ L %u ->3 byte 0xB0 MPEG sequence, v4 ->>5 belong 0x000001B5 ->>>9 byte &0x80 ->>>>10 byte&0xF0 16 \b, video ->>>>10 byte&0xF0 32 \b, still texture ->>>>10 byte&0xF0 48 \b, mesh ->>>>10 byte&0xF0 64 \b, face ->>>9 byte&0xF8 8 \b, video ->>>9 byte&0xF8 16 \b, still texture ->>>9 byte&0xF8 24 \b, mesh ->>>9 byte&0xF8 32 \b, face ->>4 byte 1 \b, simple @ L1 ->>4 byte 2 \b, simple @ L2 ->>4 byte 3 \b, simple @ L3 ->>4 byte 4 \b, simple @ L0 ->>4 byte 17 \b, simple scalable @ L1 ->>4 byte 18 \b, simple scalable @ L2 ->>4 byte 33 \b, core @ L1 ->>4 byte 34 \b, core @ L2 ->>4 byte 50 \b, main @ L2 ->>4 byte 51 \b, main @ L3 ->>4 byte 53 \b, main @ L4 ->>4 byte 66 \b, n-bit @ L2 ->>4 byte 81 \b, scalable texture @ L1 ->>4 byte 97 \b, simple face animation @ L1 ->>4 byte 98 \b, simple face animation @ L2 ->>4 byte 99 \b, simple face basic animation @ L1 ->>4 byte 100 \b, simple face basic animation @ L2 ->>4 byte 113 \b, basic animation text @ L1 ->>4 byte 114 \b, basic animation text @ L2 ->>4 byte 129 \b, hybrid @ L1 ->>4 byte 130 \b, hybrid @ L2 ->>4 byte 145 \b, advanced RT simple @ L! ->>4 byte 146 \b, advanced RT simple @ L2 ->>4 byte 147 \b, advanced RT simple @ L3 ->>4 byte 148 \b, advanced RT simple @ L4 ->>4 byte 161 \b, core scalable @ L1 ->>4 byte 162 \b, core scalable @ L2 ->>4 byte 163 \b, core scalable @ L3 ->>4 byte 177 \b, advanced coding efficiency @ L1 ->>4 byte 178 \b, advanced coding efficiency @ L2 ->>4 byte 179 \b, advanced coding efficiency @ L3 ->>4 byte 180 \b, advanced coding efficiency @ L4 ->>4 byte 193 \b, advanced core @ L1 ->>4 byte 194 \b, advanced core @ L2 ->>4 byte 209 \b, advanced scalable texture @ L1 ->>4 byte 210 \b, advanced scalable texture @ L2 ->>4 byte 211 \b, advanced scalable texture @ L3 ->>4 byte 225 \b, simple studio @ L1 ->>4 byte 226 \b, simple studio @ L2 ->>4 byte 227 \b, simple studio @ L3 ->>4 byte 228 \b, simple studio @ L4 ->>4 byte 229 \b, core studio @ L1 ->>4 byte 230 \b, core studio @ L2 ->>4 byte 231 \b, core studio @ L3 ->>4 byte 232 \b, core studio @ L4 ->>4 byte 240 \b, advanced simple @ L0 ->>4 byte 241 \b, advanced simple @ L1 ->>4 byte 242 \b, advanced simple @ L2 ->>4 byte 243 \b, advanced simple @ L3 ->>4 byte 244 \b, advanced simple @ L4 ->>4 byte 245 \b, advanced simple @ L5 ->>4 byte 247 \b, advanced simple @ L3b ->>4 byte 248 \b, FGS @ L0 ->>4 byte 249 \b, FGS @ L1 ->>4 byte 250 \b, FGS @ L2 ->>4 byte 251 \b, FGS @ L3 ->>4 byte 252 \b, FGS @ L4 ->>4 byte 253 \b, FGS @ L5 ->3 byte 0xB5 MPEG sequence, v4 ->>4 byte &0x80 ->>>5 byte&0xF0 16 \b, video (missing profile header) ->>>5 byte&0xF0 32 \b, still texture (missing profile header) ->>>5 byte&0xF0 48 \b, mesh (missing profile header) ->>>5 byte&0xF0 64 \b, face (missing profile header) ->>4 byte&0xF8 8 \b, video (missing profile header) ->>4 byte&0xF8 16 \b, still texture (missing profile header) ->>4 byte&0xF8 24 \b, mesh (missing profile header) ->>4 byte&0xF8 32 \b, face (missing profile header) ->3 byte 0xB3 MPEG sequence ->>12 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video ->>12 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video ->>12 belong 0x000001B5 \b, v2, ->>>16 byte&0x0F 1 \b HP ->>>16 byte&0x0F 2 \b Spt ->>>16 byte&0x0F 3 \b SNR ->>>16 byte&0x0F 4 \b MP ->>>16 byte&0x0F 5 \b SP ->>>17 byte&0xF0 64 \b@HL ->>>17 byte&0xF0 96 \b@H-14 ->>>17 byte&0xF0 128 \b@ML ->>>17 byte&0xF0 160 \b@LL ->>>17 byte &0x08 \b progressive ->>>17 byte ^0x08 \b interlaced ->>>17 byte&0x06 2 \b Y'CbCr 4:2:0 video ->>>17 byte&0x06 4 \b Y'CbCr 4:2:2 video ->>>17 byte&0x06 6 \b Y'CbCr 4:4:4 video ->>11 byte &0x02 ->>>75 byte &0x01 ->>>>140 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video ->>>>140 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video ->>>>140 belong 0x000001B5 \b, v2, ->>>>>144 byte&0x0F 1 \b HP ->>>>>144 byte&0x0F 2 \b Spt ->>>>>144 byte&0x0F 3 \b SNR ->>>>>144 byte&0x0F 4 \b MP ->>>>>144 byte&0x0F 5 \b SP ->>>>>145 byte&0xF0 64 \b@HL ->>>>>145 byte&0xF0 96 \b@H-14 ->>>>>145 byte&0xF0 128 \b@ML ->>>>>145 byte&0xF0 160 \b@LL ->>>>>145 byte &0x08 \b progressive ->>>>>145 byte ^0x08 \b interlaced ->>>>>145 byte&0x06 2 \b Y'CbCr 4:2:0 video ->>>>>145 byte&0x06 4 \b Y'CbCr 4:2:2 video ->>>>>145 byte&0x06 6 \b Y'CbCr 4:4:4 video ->>76 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video ->>76 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video ->>76 belong 0x000001B5 \b, v2, ->>>80 byte&0x0F 1 \b HP ->>>80 byte&0x0F 2 \b Spt ->>>80 byte&0x0F 3 \b SNR ->>>80 byte&0x0F 4 \b MP ->>>80 byte&0x0F 5 \b SP ->>>81 byte&0xF0 64 \b@HL ->>>81 byte&0xF0 96 \b@H-14 ->>>81 byte&0xF0 128 \b@ML ->>>81 byte&0xF0 160 \b@LL ->>>81 byte &0x08 \b progressive ->>>81 byte ^0x08 \b interlaced ->>>81 byte&0x06 2 \b Y'CbCr 4:2:0 video ->>>81 byte&0x06 4 \b Y'CbCr 4:2:2 video ->>>81 byte&0x06 6 \b Y'CbCr 4:4:4 video ->>4 belong&0xFFFFFF00 0x78043800 \b, HD-TV 1920P ->>>7 byte&0xF0 0x10 \b, 16:9 ->>4 belong&0xFFFFFF00 0x50002D00 \b, SD-TV 1280I ->>>7 byte&0xF0 0x10 \b, 16:9 ->>4 belong&0xFFFFFF00 0x30024000 \b, PAL Capture ->>>7 byte&0xF0 0x10 \b, 4:3 ->>4 beshort&0xFFF0 0x2C00 \b, 4CIF ->>>5 beshort&0x0FFF 0x01E0 \b NTSC ->>>5 beshort&0x0FFF 0x0240 \b PAL ->>>7 byte&0xF0 0x20 \b, 4:3 ->>>7 byte&0xF0 0x30 \b, 16:9 ->>>7 byte&0xF0 0x40 \b, 11:5 ->>>7 byte&0xF0 0x80 \b, PAL 4:3 ->>>7 byte&0xF0 0xC0 \b, NTSC 4:3 ->>4 belong&0xFFFFFF00 0x2801E000 \b, LD-TV 640P ->>>7 byte&0xF0 0x10 \b, 4:3 ->>4 belong&0xFFFFFF00 0x1400F000 \b, 320x240 ->>>7 byte&0xF0 0x10 \b, 4:3 ->>4 belong&0xFFFFFF00 0x0F00A000 \b, 240x160 ->>>7 byte&0xF0 0x10 \b, 4:3 ->>4 belong&0xFFFFFF00 0x0A007800 \b, 160x120 ->>>7 byte&0xF0 0x10 \b, 4:3 ->>4 beshort&0xFFF0 0x1600 \b, CIF ->>>5 beshort&0x0FFF 0x00F0 \b NTSC ->>>5 beshort&0x0FFF 0x0120 \b PAL ->>>7 byte&0xF0 0x20 \b, 4:3 ->>>7 byte&0xF0 0x30 \b, 16:9 ->>>7 byte&0xF0 0x40 \b, 11:5 ->>>7 byte&0xF0 0x80 \b, PAL 4:3 ->>>7 byte&0xF0 0xC0 \b, NTSC 4:3 ->>>5 beshort&0x0FFF 0x0240 \b PAL 625 ->>>>7 byte&0xF0 0x20 \b, 4:3 ->>>>7 byte&0xF0 0x30 \b, 16:9 ->>>>7 byte&0xF0 0x40 \b, 11:5 ->>4 beshort&0xFFF0 0x2D00 \b, CCIR/ITU ->>>5 beshort&0x0FFF 0x01E0 \b NTSC 525 ->>>5 beshort&0x0FFF 0x0240 \b PAL 625 ->>>7 byte&0xF0 0x20 \b, 4:3 ->>>7 byte&0xF0 0x30 \b, 16:9 ->>>7 byte&0xF0 0x40 \b, 11:5 ->>4 beshort&0xFFF0 0x1E00 \b, SVCD ->>>5 beshort&0x0FFF 0x01E0 \b NTSC 525 ->>>5 beshort&0x0FFF 0x0240 \b PAL 625 ->>>7 byte&0xF0 0x20 \b, 4:3 ->>>7 byte&0xF0 0x30 \b, 16:9 ->>>7 byte&0xF0 0x40 \b, 11:5 ->>7 byte&0x0F 1 \b, 23.976 fps ->>7 byte&0x0F 2 \b, 24 fps ->>7 byte&0x0F 3 \b, 25 fps ->>7 byte&0x0F 4 \b, 29.97 fps ->>7 byte&0x0F 5 \b, 30 fps ->>7 byte&0x0F 6 \b, 50 fps ->>7 byte&0x0F 7 \b, 59.94 fps ->>7 byte&0x0F 8 \b, 60 fps ->>11 byte &0x04 \b, Constrained - -# MPEG ADTS Audio (*.mpx/mxa/aac) -# from dreesen@math.fu-berlin.de -# modified to fully support MPEG ADTS - -# MP3, M1A -# modified by Joerg Jenderek -# GRR the original test are too common for many DOS files -# so don't accept as MP3 until we've tested the rate -0 beshort&0xFFFE 0xFFFA -# rates ->2 byte&0xF0 0x10 MPEG ADTS, layer III, v1, 32 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x20 MPEG ADTS, layer III, v1, 40 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x30 MPEG ADTS, layer III, v1, 48 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x40 MPEG ADTS, layer III, v1, 56 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x50 MPEG ADTS, layer III, v1, 64 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x60 MPEG ADTS, layer III, v1, 80 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x70 MPEG ADTS, layer III, v1, 96 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x80 MPEG ADTS, layer III, v1, 112 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x90 MPEG ADTS, layer III, v1, 128 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xA0 MPEG ADTS, layer III, v1, 160 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xB0 MPEG ADTS, layer III, v1, 192 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xC0 MPEG ADTS, layer III, v1, 224 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xD0 MPEG ADTS, layer III, v1, 256 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xE0 MPEG ADTS, layer III, v1, 320 kbps -!:mime audio/mpeg -# timing ->2 byte&0x0C 0x00 \b, 44.1 kHz ->2 byte&0x0C 0x04 \b, 48 kHz ->2 byte&0x0C 0x08 \b, 32 kHz -# channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 - -# MP2, M1A -0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1 -!:mime audio/mpeg -# rates ->2 byte&0xF0 0x10 \b, 32 kbps ->2 byte&0xF0 0x20 \b, 48 kbps ->2 byte&0xF0 0x30 \b, 56 kbps ->2 byte&0xF0 0x40 \b, 64 kbps ->2 byte&0xF0 0x50 \b, 80 kbps ->2 byte&0xF0 0x60 \b, 96 kbps ->2 byte&0xF0 0x70 \b, 112 kbps ->2 byte&0xF0 0x80 \b, 128 kbps ->2 byte&0xF0 0x90 \b, 160 kbps ->2 byte&0xF0 0xA0 \b, 192 kbps ->2 byte&0xF0 0xB0 \b, 224 kbps ->2 byte&0xF0 0xC0 \b, 256 kbps ->2 byte&0xF0 0xD0 \b, 320 kbps ->2 byte&0xF0 0xE0 \b, 384 kbps -# timing ->2 byte&0x0C 0x00 \b, 44.1 kHz ->2 byte&0x0C 0x04 \b, 48 kHz ->2 byte&0x0C 0x08 \b, 32 kHz -# channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 - -# MPA, M1A -# updated by Joerg Jenderek -# GRR the original test are too common for many DOS files, so test 32 <= kbits <= 448 -# GRR this test is still too general as it catches a BOM of UTF-16 files (0xFFFE) -# FIXME: Almost all little endian UTF-16 text with BOM are clobbered by these entries -#0 beshort&0xFFFE 0xFFFE -#>2 ubyte&0xF0 >0x0F -#>>2 ubyte&0xF0 <0xE1 MPEG ADTS, layer I, v1 -## rate -#>>>2 byte&0xF0 0x10 \b, 32 kbps -#>>>2 byte&0xF0 0x20 \b, 64 kbps -#>>>2 byte&0xF0 0x30 \b, 96 kbps -#>>>2 byte&0xF0 0x40 \b, 128 kbps -#>>>2 byte&0xF0 0x50 \b, 160 kbps -#>>>2 byte&0xF0 0x60 \b, 192 kbps -#>>>2 byte&0xF0 0x70 \b, 224 kbps -#>>>2 byte&0xF0 0x80 \b, 256 kbps -#>>>2 byte&0xF0 0x90 \b, 288 kbps -#>>>2 byte&0xF0 0xA0 \b, 320 kbps -#>>>2 byte&0xF0 0xB0 \b, 352 kbps -#>>>2 byte&0xF0 0xC0 \b, 384 kbps -#>>>2 byte&0xF0 0xD0 \b, 416 kbps -#>>>2 byte&0xF0 0xE0 \b, 448 kbps -## timing -#>>>2 byte&0x0C 0x00 \b, 44.1 kHz -#>>>2 byte&0x0C 0x04 \b, 48 kHz -#>>>2 byte&0x0C 0x08 \b, 32 kHz -## channels/options -#>>>3 byte&0xC0 0x00 \b, Stereo -#>>>3 byte&0xC0 0x40 \b, JntStereo -#>>>3 byte&0xC0 0x80 \b, 2x Monaural -#>>>3 byte&0xC0 0xC0 \b, Monaural -##>1 byte ^0x01 \b, Data Verify -##>2 byte &0x02 \b, Packet Pad -##>2 byte &0x01 \b, Custom Flag -##>3 byte &0x08 \b, Copyrighted -##>3 byte &0x04 \b, Original Source -##>3 byte&0x03 1 \b, NR: 50/15 ms -##>3 byte&0x03 3 \b, NR: CCIT J.17 - -# MP3, M2A -0 beshort&0xFFFE 0xFFF2 MPEG ADTS, layer III, v2 -!:mime audio/mpeg -# rate ->2 byte&0xF0 0x10 \b, 8 kbps ->2 byte&0xF0 0x20 \b, 16 kbps ->2 byte&0xF0 0x30 \b, 24 kbps ->2 byte&0xF0 0x40 \b, 32 kbps ->2 byte&0xF0 0x50 \b, 40 kbps ->2 byte&0xF0 0x60 \b, 48 kbps ->2 byte&0xF0 0x70 \b, 56 kbps ->2 byte&0xF0 0x80 \b, 64 kbps ->2 byte&0xF0 0x90 \b, 80 kbps ->2 byte&0xF0 0xA0 \b, 96 kbps ->2 byte&0xF0 0xB0 \b, 112 kbps ->2 byte&0xF0 0xC0 \b, 128 kbps ->2 byte&0xF0 0xD0 \b, 144 kbps ->2 byte&0xF0 0xE0 \b, 160 kbps -# timing ->2 byte&0x0C 0x00 \b, 22.05 kHz ->2 byte&0x0C 0x04 \b, 24 kHz ->2 byte&0x0C 0x08 \b, 16 kHz -# channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 - -# MP2, M2A -0 beshort&0xFFFE 0xFFF4 MPEG ADTS, layer II, v2 -# rate ->2 byte&0xF0 0x10 \b, 8 kbps ->2 byte&0xF0 0x20 \b, 16 kbps ->2 byte&0xF0 0x30 \b, 24 kbps ->2 byte&0xF0 0x40 \b, 32 kbps ->2 byte&0xF0 0x50 \b, 40 kbps ->2 byte&0xF0 0x60 \b, 48 kbps ->2 byte&0xF0 0x70 \b, 56 kbps ->2 byte&0xF0 0x80 \b, 64 kbps ->2 byte&0xF0 0x90 \b, 80 kbps ->2 byte&0xF0 0xA0 \b, 96 kbps ->2 byte&0xF0 0xB0 \b, 112 kbps ->2 byte&0xF0 0xC0 \b, 128 kbps ->2 byte&0xF0 0xD0 \b, 144 kbps ->2 byte&0xF0 0xE0 \b, 160 kbps -# timing ->2 byte&0x0C 0x00 \b, 22.05 kHz ->2 byte&0x0C 0x04 \b, 24 kHz ->2 byte&0x0C 0x08 \b, 16 kHz -# channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 - -# MPA, M2A -0 beshort&0xFFFE 0xFFF6 MPEG ADTS, layer I, v2 -# rate ->2 byte&0xF0 0x10 \b, 32 kbps ->2 byte&0xF0 0x20 \b, 48 kbps ->2 byte&0xF0 0x30 \b, 56 kbps ->2 byte&0xF0 0x40 \b, 64 kbps ->2 byte&0xF0 0x50 \b, 80 kbps ->2 byte&0xF0 0x60 \b, 96 kbps ->2 byte&0xF0 0x70 \b, 112 kbps ->2 byte&0xF0 0x80 \b, 128 kbps ->2 byte&0xF0 0x90 \b, 144 kbps ->2 byte&0xF0 0xA0 \b, 160 kbps ->2 byte&0xF0 0xB0 \b, 176 kbps ->2 byte&0xF0 0xC0 \b, 192 kbps ->2 byte&0xF0 0xD0 \b, 224 kbps ->2 byte&0xF0 0xE0 \b, 256 kbps -# timing ->2 byte&0x0C 0x00 \b, 22.05 kHz ->2 byte&0x0C 0x04 \b, 24 kHz ->2 byte&0x0C 0x08 \b, 16 kHz -# channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 - -# MP3, M25A -0 beshort&0xFFFE 0xFFE2 MPEG ADTS, layer III, v2.5 -# rate ->2 byte&0xF0 0x10 \b, 8 kbps ->2 byte&0xF0 0x20 \b, 16 kbps ->2 byte&0xF0 0x30 \b, 24 kbps ->2 byte&0xF0 0x40 \b, 32 kbps ->2 byte&0xF0 0x50 \b, 40 kbps ->2 byte&0xF0 0x60 \b, 48 kbps ->2 byte&0xF0 0x70 \b, 56 kbps ->2 byte&0xF0 0x80 \b, 64 kbps ->2 byte&0xF0 0x90 \b, 80 kbps ->2 byte&0xF0 0xA0 \b, 96 kbps ->2 byte&0xF0 0xB0 \b, 112 kbps ->2 byte&0xF0 0xC0 \b, 128 kbps ->2 byte&0xF0 0xD0 \b, 144 kbps ->2 byte&0xF0 0xE0 \b, 160 kbps -# timing ->2 byte&0x0C 0x00 \b, 11.025 kHz ->2 byte&0x0C 0x04 \b, 12 kHz ->2 byte&0x0C 0x08 \b, 8 kHz -# channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 - -# AAC (aka MPEG-2 NBC audio) and MPEG-4 audio - -# Stored AAC streams (instead of the MP4 format) -0 string ADIF MPEG ADIF, AAC -!:mime audio/x-hx-aac-adif ->4 byte &0x80 ->>13 byte &0x10 \b, VBR ->>13 byte ^0x10 \b, CBR ->>16 byte&0x1E 0x02 \b, single stream ->>16 byte&0x1E 0x04 \b, 2 streams ->>16 byte&0x1E 0x06 \b, 3 streams ->>16 byte &0x08 \b, 4 or more streams ->>16 byte &0x10 \b, 8 or more streams ->>4 byte &0x80 \b, Copyrighted ->>13 byte &0x40 \b, Original Source ->>13 byte &0x20 \b, Home Flag ->4 byte ^0x80 ->>4 byte &0x10 \b, VBR ->>4 byte ^0x10 \b, CBR ->>7 byte&0x1E 0x02 \b, single stream ->>7 byte&0x1E 0x04 \b, 2 streams ->>7 byte&0x1E 0x06 \b, 3 streams ->>7 byte &0x08 \b, 4 or more streams ->>7 byte &0x10 \b, 8 or more streams ->>4 byte &0x40 \b, Original Stream(s) ->>4 byte &0x20 \b, Home Source - -# Live or stored single AAC stream (used with MPEG-2 systems) -0 beshort&0xFFF6 0xFFF0 MPEG ADTS, AAC -!:mime audio/x-hx-aac-adts ->1 byte &0x08 \b, v2 ->1 byte ^0x08 \b, v4 -# profile ->>2 byte &0xC0 \b LTP ->2 byte&0xc0 0x00 \b Main ->2 byte&0xc0 0x40 \b LC ->2 byte&0xc0 0x80 \b SSR -# timing ->2 byte&0x3c 0x00 \b, 96 kHz ->2 byte&0x3c 0x04 \b, 88.2 kHz ->2 byte&0x3c 0x08 \b, 64 kHz ->2 byte&0x3c 0x0c \b, 48 kHz ->2 byte&0x3c 0x10 \b, 44.1 kHz ->2 byte&0x3c 0x14 \b, 32 kHz ->2 byte&0x3c 0x18 \b, 24 kHz ->2 byte&0x3c 0x1c \b, 22.05 kHz ->2 byte&0x3c 0x20 \b, 16 kHz ->2 byte&0x3c 0x24 \b, 12 kHz ->2 byte&0x3c 0x28 \b, 11.025 kHz ->2 byte&0x3c 0x2c \b, 8 kHz -# channels ->2 beshort&0x01c0 0x0040 \b, monaural ->2 beshort&0x01c0 0x0080 \b, stereo ->2 beshort&0x01c0 0x00c0 \b, stereo + center ->2 beshort&0x01c0 0x0100 \b, stereo+center+LFE ->2 beshort&0x01c0 0x0140 \b, surround ->2 beshort&0x01c0 0x0180 \b, surround + LFE ->2 beshort &0x01C0 \b, surround + side -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Custom Flag -#>3 byte &0x20 \b, Original Stream -#>3 byte &0x10 \b, Home Source -#>3 byte &0x08 \b, Copyrighted - -# Live MPEG-4 audio streams (instead of RTP FlexMux) -0 beshort&0xFFE0 0x56E0 MPEG-4 LOAS -!:mime audio/x-mp4a-latm -#>1 beshort&0x1FFF x \b, %u byte packet ->3 byte&0xE0 0x40 ->>4 byte&0x3C 0x04 \b, single stream ->>4 byte&0x3C 0x08 \b, 2 streams ->>4 byte&0x3C 0x0C \b, 3 streams ->>4 byte &0x08 \b, 4 or more streams ->>4 byte &0x20 \b, 8 or more streams ->3 byte&0xC0 0 ->>4 byte&0x78 0x08 \b, single stream ->>4 byte&0x78 0x10 \b, 2 streams ->>4 byte&0x78 0x18 \b, 3 streams ->>4 byte &0x20 \b, 4 or more streams ->>4 byte &0x40 \b, 8 or more streams -# This magic isn't strong enough (matches plausible ISO-8859-1 text) -#0 beshort 0x4DE1 MPEG-4 LO-EP audio stream -#!:mime audio/x-mp4a-latm - -# Summary: FLI animation format -# Created by: Daniel Quinlan <quinlan@yggdrasil.com> -# Modified by (1): Abel Cheung <abelcheung@gmail.com> (avoid over-generic detection) -4 leshort 0xAF11 -# standard FLI always has 320x200 resolution and 8 bit color ->8 leshort 320 ->>10 leshort 200 ->>>12 leshort 8 FLI animation, 320x200x8 -!:mime video/x-fli ->>>>6 leshort x \b, %d frames -# frame speed is multiple of 1/70s ->>>>16 leshort x \b, %d/70s per frame - -# Summary: FLC animation format -# Created by: Daniel Quinlan <quinlan@yggdrasil.com> -# Modified by (1): Abel Cheung <abelcheung@gmail.com> (avoid over-generic detection) -4 leshort 0xAF12 -# standard FLC always use 8 bit color ->12 leshort 8 FLC animation -!:mime video/x-flc ->>8 leshort x \b, %d ->>10 leshort x \bx%dx8 ->>6 uleshort x \b, %d frames ->>16 uleshort x \b, %dms per frame - -# DL animation format -# XXX - collision with most `mips' magic -# -# I couldn't find a real magic number for these, however, this -# -appears- to work. Note that it might catch other files, too, so be -# careful! -# -# Note that title and author appear in the two 20-byte chunks -# at decimal offsets 2 and 22, respectively, but they are XOR'ed with -# 255 (hex FF)! The DL format is really bad. -# -#0 byte 1 DL version 1, medium format (160x100, 4 images/screen) -#!:mime video/x-unknown -#>42 byte x - %d screens, -#>43 byte x %d commands -#0 byte 2 DL version 2 -#!:mime video/x-unknown -#>1 byte 1 - large format (320x200,1 image/screen), -#>1 byte 2 - medium format (160x100,4 images/screen), -#>1 byte >2 - unknown format, -#>42 byte x %d screens, -#>43 byte x %d commands -# Based on empirical evidence, DL version 3 have several nulls following the -# \003. Most of them start with non-null values at hex offset 0x34 or so. -#0 string \3\0\0\0\0\0\0\0\0\0\0\0 DL version 3 - -# iso 13818 transport stream -# -# from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001 (ISO 13818.1) -# (the following is a little bit restrictive and works fine for a stream -# that starts with PAT properly. it won't work for stream data, that is -# cut from an input device data right in the middle, but this shouldn't -# disturb) -# syncbyte 8 bit 0x47 -# error_ind 1 bit - -# payload_start 1 bit 1 -# priority 1 bit - -# PID 13 bit 0x0000 -# scrambling 2 bit - -# adaptfld_ctrl 2 bit 1 or 3 -# conti_count 4 bit 0 -0 belong&0xFF5FFF1F 0x47400010 MPEG transport stream data ->188 byte !0x47 CORRUPTED - -# DIF digital video file format <mpruett@sgi.com> -0 belong&0xffffff00 0x1f070000 DIF ->4 byte &0x01 (DVCPRO) movie file ->4 byte ^0x01 (DV) movie file ->3 byte &0x80 (PAL) ->3 byte ^0x80 (NTSC) - -# Microsoft Advanced Streaming Format (ASF) <mpruett@sgi.com> -0 belong 0x3026b275 Microsoft ASF -!:mime video/x-ms-asf - -# MNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/> -0 string \x8aMNG MNG video data, -!:mime video/x-mng ->4 belong !0x0d0a1a0a CORRUPTED, ->4 belong 0x0d0a1a0a ->>16 belong x %ld x ->>20 belong x %ld - -# JNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/> -0 string \x8bJNG JNG video data, -!:mime video/x-jng ->4 belong !0x0d0a1a0a CORRUPTED, ->4 belong 0x0d0a1a0a ->>16 belong x %ld x ->>20 belong x %ld - -# Vivo video (Wolfram Kleff) -3 string \x0D\x0AVersion:Vivo Vivo video data - -# VRML (Virtual Reality Modelling Language) -0 string/b #VRML\ V1.0\ ascii VRML 1 file -!:mime model/vrml -0 string/b #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file -!:mime model/vrml - -# X3D (Extensible 3D) [http://www.web3d.org/specifications/x3d-3.0.dtd] -# From Michel Briand <michelbriand@free.fr> -0 string \<?xml\ version=" -!:strength +1 ->20 search/1000/cb \<!DOCTYPE\ X3D X3D (Extensible 3D) model xml text -!:mime model/x3d - -#--------------------------------------------------------------------------- -# HVQM4: compressed movie format designed by Hudson for Nintendo GameCube -# From Mark Sheppard <msheppard@climax.co.uk>, 2002-10-03 -# -0 string HVQM4 %s ->6 string >\0 v%s ->0 byte x GameCube movie, ->0x34 ubeshort x %d x ->0x36 ubeshort x %d, ->0x26 ubeshort x %dµs, ->0x42 ubeshort 0 no audio ->0x42 ubeshort >0 %dHz audio - -# From: "Stefan A. Haubenthal" <polluks@web.de> -0 string DVDVIDEO-VTS Video title set, ->0x21 byte x v%x -0 string DVDVIDEO-VMG Video manager, ->0x21 byte x v%x - -# From: Behan Webster <behanw@websterwood.com> -# NuppelVideo used by Mythtv (*.nuv) -# Note: there are two identical stanzas here differing only in the -# initial string matched. It used to be done with a regex, but we're -# trying to get rid of those. -0 string NuppelVideo MythTV NuppelVideo ->12 string x v%s ->20 lelong x (%d ->24 lelong x \bx%d), ->36 string P \bprogressive, ->36 string I \binterlaced, ->40 ledouble x \baspect:%.2f, ->48 ledouble x \bfps:%.2f -0 string MythTV MythTV NuppelVideo ->12 string x v%s ->20 lelong x (%d ->24 lelong x \bx%d), ->36 string P \bprogressive, ->36 string I \binterlaced, ->40 ledouble x \baspect:%.2f, ->48 ledouble x \bfps:%.2f - -# MPEG file -# MPEG sequences -# FIXME: This section is from the old magic.mime file and needs integrating with the rest -0 belong 0x000001BA ->4 byte &0x40 -!:mime video/mp2p ->4 byte ^0x40 -!:mime video/mpeg -0 belong 0x000001BB -!:mime video/mpeg -0 belong 0x000001B0 -!:mime video/mp4v-es -0 belong 0x000001B5 -!:mime video/mp4v-es -0 belong 0x000001B3 -!:mime video/mpv -0 belong&0xFF5FFF1F 0x47400010 -!:mime video/mp2t -0 belong 0x00000001 ->4 byte&0x1F 0x07 -!:mime video/h264 - -# Type: Bink Video -# URL: http://wiki.multimedia.cx/index.php?title=3DBink_Container -# From: <hoehle@users.sourceforge.net> 2008-07-18 -0 string BIK Bink Video ->3 regex =[a-z] rev.%s -#>4 ulelong x size %d ->20 ulelong x \b, %d ->24 ulelong x \bx%d ->8 ulelong x \b, %d frames ->32 ulelong x at rate %d/ ->28 ulelong >1 \b%d ->40 ulelong =0 \b, no audio ->40 ulelong !0 \b, %d audio track ->>40 ulelong !1 \bs -# follow properties of the first audio track only ->>48 uleshort x %dHz ->>51 byte&0x20 0 mono ->>51 byte&0x20 !0 stereo -#>>51 byte&0x10 0 FFT -#>>51 byte&0x10 !0 DCT - -#------------------------------------------------------------------------------ -# apl: file(1) magic for APL (see also "pdp" and "vax" for other APL -# workspaces) -# -0 long 0100554 APL workspace (Ken's original?) -#------------------------------------------------------------------------------ -# apple: file(1) magic for Apple file formats -# -0 search/1 FiLeStArTfIlEsTaRt binscii (apple ][) text -0 string \x0aGL Binary II (apple ][) data -0 string \x76\xff Squeezed (apple ][) data -0 string NuFile NuFile archive (apple ][) data -0 string N\xf5F\xe9l\xe5 NuFile archive (apple ][) data -0 belong 0x00051600 AppleSingle encoded Macintosh file -0 belong 0x00051607 AppleDouble encoded Macintosh file - -# Type: Apple Emulator 2IMG format -# From: Radek Vokal <rvokal@redhat.com> -0 string 2IMG Apple ][ 2IMG Disk Image ->4 string XGS! \b, XGS ->4 string CTKG \b, Catakig ->4 string ShIm \b, Sheppy's ImageMaker ->4 string WOOF \b, Sweet 16 ->4 string B2TR \b, Bernie ][ the Rescue ->4 string !nfc \b, ASIMOV2 ->4 string x \b, Unknown Format ->0xc byte 00 \b, DOS 3.3 sector order ->>0x10 byte 00 \b, Volume 254 ->>0x10 byte&0x7f x \b, Volume %u ->0xc byte 01 \b, ProDOS sector order ->>0x14 short x \b, %u Blocks ->0xc byte 02 \b, NIB data - -# magic for Newton PDA package formats -# from Ruda Moura <ruda@helllabs.org> -0 string package0 Newton package, NOS 1.x, ->12 belong &0x80000000 AutoRemove, ->12 belong &0x40000000 CopyProtect, ->12 belong &0x10000000 NoCompression, ->12 belong &0x04000000 Relocation, ->12 belong &0x02000000 UseFasterCompression, ->16 belong x version %d - -0 string package1 Newton package, NOS 2.x, ->12 belong &0x80000000 AutoRemove, ->12 belong &0x40000000 CopyProtect, ->12 belong &0x10000000 NoCompression, ->12 belong &0x04000000 Relocation, ->12 belong &0x02000000 UseFasterCompression, ->16 belong x version %d - -0 string package4 Newton package, ->8 byte 8 NOS 1.x, ->8 byte 9 NOS 2.x, ->12 belong &0x80000000 AutoRemove, ->12 belong &0x40000000 CopyProtect, ->12 belong &0x10000000 NoCompression, - -# The following entries for the Apple II are for files that have -# been transferred as raw binary data from an Apple, without having -# been encapsulated by any of the above archivers. -# -# In general, Apple II formats are hard to identify because Apple DOS -# and especially Apple ProDOS have strong typing in the file system and -# therefore programmers never felt much need to include type information -# in the files themselves. -# -# Eric Fischer <enf@pobox.com> - -# AppleWorks word processor: -# -# This matches the standard tab stops for an AppleWorks file, but if -# a file has a tab stop set in the first four columns this will fail. -# -# The "O" is really the magic number, but that's so common that it's -# necessary to check the tab stops that follow it to avoid false positives. - -4 string O==== AppleWorks word processor data ->85 byte&0x01 >0 \b, zoomed ->90 byte&0x01 >0 \b, paginated ->92 byte&0x01 >0 \b, with mail merge -#>91 byte x \b, left margin %d - -# AppleWorks database: -# -# This isn't really a magic number, but it's the closest thing to one -# that I could find. The 1 and 2 really mean "order in which you defined -# categories" and "left to right, top to bottom," respectively; the D and R -# mean that the cursor should move either down or right when you press Return. - -#30 string \x01D AppleWorks database data -#30 string \x02D AppleWorks database data -#30 string \x01R AppleWorks database data -#30 string \x02R AppleWorks database data - -# AppleWorks spreadsheet: -# -# Likewise, this isn't really meant as a magic number. The R or C means -# row- or column-order recalculation; the A or M means automatic or manual -# recalculation. - -#131 string RA AppleWorks spreadsheet data -#131 string RM AppleWorks spreadsheet data -#131 string CA AppleWorks spreadsheet data -#131 string CM AppleWorks spreadsheet data - -# Applesoft BASIC: -# -# This is incredibly sloppy, but will be true if the program was -# written at its usual memory location of 2048 and its first line -# number is less than 256. Yuck. - -0 belong&0xff00ff 0x80000 Applesoft BASIC program data -#>2 leshort x \b, first line number %d - -# ORCA/EZ assembler: -# -# This will not identify ORCA/M source files, since those have -# some sort of date code instead of the two zero bytes at 6 and 7 -# XXX Conflicts with ELF -#4 belong&0xff00ffff 0x01000000 ORCA/EZ assembler source data -#>5 byte x \b, build number %d - -# Broderbund Fantavision -# -# I don't know what these values really mean, but they seem to recur. -# Will they cause too many conflicts? - -# Probably :-) -#2 belong&0xFF00FF 0x040008 Fantavision movie data - -# Some attempts at images. -# -# These are actually just bit-for-bit dumps of the frame buffer, so -# there's really no reasonably way to distinguish them except for their -# address (if preserved) -- 8192 or 16384 -- and their length -- 8192 -# or, occasionally, 8184. -# -# Nevertheless this will manage to catch a lot of images that happen -# to have a solid-colored line at the bottom of the screen. - -# GRR: Magic too weak -#8144 string \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F Apple II image with white background -#8144 string \x55\x2A\x55\x2A\x55\x2A\x55\x2A Apple II image with purple background -#8144 string \x2A\x55\x2A\x55\x2A\x55\x2A\x55 Apple II image with green background -#8144 string \xD5\xAA\xD5\xAA\xD5\xAA\xD5\xAA Apple II image with blue background -#8144 string \xAA\xD5\xAA\xD5\xAA\xD5\xAA\xD5 Apple II image with orange background - -# Beagle Bros. Apple Mechanic fonts - -0 belong&0xFF00FFFF 0x6400D000 Apple Mechanic font - -# Apple Universal Disk Image Format (UDIF) - dmg files. -# From Johan Gade. -# These entries are disabled for now until we fix the following issues. -# -# Note there might be some problems with the "VAX COFF executable" -# entry. Note this entry should be placed before the mac filesystem section, -# particularly the "Apple Partition data" entry. -# -# The intended meaning of these tests is, that the file is only of the -# specified type if both of the lines are correct - i.e. if the first -# line matches and the second doesn't then it is not of that type. -# -#0 long 0x7801730d -#>4 long 0x62626060 UDIF read-only zlib-compressed image (UDZO) -# -# Note that this entry is recognized correctly by the "Apple Partition -# data" entry - however since this entry is more specific - this -# information seems to be more useful. -#0 long 0x45520200 -#>0x410 string disk\ image UDIF read/write image (UDRW) - -# From: Toby Peterson <toby@apple.com> -0 string bplist00 Apple binary property list - -# Apple binary property list (bplist) -# Assumes version bytes are hex. -# Provides content hints for version 0 files. Assumes that the root -# object is the first object (true for CoreFoundation implementation). -# From: David Remahl <dremahl@apple.com> -0 string bplist ->6 byte x \bCoreFoundation binary property list data, version 0x%c ->>7 byte x \b%c ->6 string 00 \b ->>8 byte&0xF0 0x00 \b ->>>8 byte&0x0F 0x00 \b, root type: null ->>>8 byte&0x0F 0x08 \b, root type: false boolean ->>>8 byte&0x0F 0x09 \b, root type: true boolean ->>8 byte&0xF0 0x10 \b, root type: integer ->>8 byte&0xF0 0x20 \b, root type: real ->>8 byte&0xF0 0x30 \b, root type: date ->>8 byte&0xF0 0x40 \b, root type: data ->>8 byte&0xF0 0x50 \b, root type: ascii string ->>8 byte&0xF0 0x60 \b, root type: unicode string ->>8 byte&0xF0 0x80 \b, root type: uid (CORRUPT) ->>8 byte&0xF0 0xa0 \b, root type: array ->>8 byte&0xF0 0xd0 \b, root type: dictionary - -# Apple/NeXT typedstream data -# Serialization format used by NeXT and Apple for various -# purposes in YellowStep/Cocoa, including some nib files. -# From: David Remahl <dremahl@apple.com> -2 string typedstream NeXT/Apple typedstream data, big endian ->0 byte x \b, version %hhd ->0 byte <5 \b ->>13 byte 0x81 \b ->>>14 ubeshort x \b, system %hd -2 string streamtyped NeXT/Apple typedstream data, little endian ->0 byte x \b, version %hhd ->0 byte <5 \b ->>13 byte 0x81 \b ->>>14 uleshort x \b, system %hd - -#------------------------------------------------------------------------------ -# CAF: Apple CoreAudio File Format -# -# Container format for high-end audio purposes. -# From: David Remahl <dremahl@apple.com> -# -0 string caff CoreAudio Format audio file ->4 beshort <10 version %d ->6 beshort x - - -#------------------------------------------------------------------------------ -# Keychain database files -0 string kych Mac OS X Keychain File - -#------------------------------------------------------------------------------ -# Code Signing related file types -0 belong 0xfade0c00 Mac OS X Code Requirement ->8 belong 1 (opExpr) ->4 belong x - %d bytes - -0 belong 0xfade0c01 Mac OS X Code Requirement Set ->8 belong >1 containing %d items ->4 belong x - %d bytes - -0 belong 0xfade0c02 Mac OS X Code Directory ->8 belong x version %x ->12 belong >0 flags 0x%x ->4 belong x - %d bytes - -0 belong 0xfade0cc0 Mac OS X Detached Code Signature (non-executable) ->4 belong x - %d bytes - -0 belong 0xfade0cc1 Mac OS X Detached Code Signature ->8 belong >1 (%d elements) ->4 belong x - %d bytes - -# From: "Nelson A. de Oliveira" <naoliv@gmail.com> -# .vdi -4 string innotek\ VirtualBox\ Disk\ Image %s - -#------------------------------------------------------------------------------ -# applix: file(1) magic for Applixware -# From: Peter Soos <sp@osb.hu> -# -0 string *BEGIN Applixware ->7 string WORDS Words Document ->7 string GRAPHICS Graphic ->7 string RASTER Bitmap ->7 string SPREADSHEETS Spreadsheet ->7 string MACRO Macro ->7 string BUILDER Builder Object -#------------------------------------------------------------------------------ -# archive: file(1) magic for archive formats (see also "msdos" for self- -# extracting compressed archives) -# -# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc. -# pre-POSIX "tar" archives are handled in the C code. - -# POSIX tar archives -257 string ustar\0 POSIX tar archive -!:mime application/x-tar # encoding: posix -257 string ustar\040\040\0 GNU tar archive -!:mime application/x-tar # encoding: gnu - -# cpio archives -# -# Yes, the top two "cpio archive" formats *are* supposed to just be "short". -# The idea is to indicate archives produced on machines with the same -# byte order as the machine running "file" with "cpio archive", and -# to indicate archives produced on machines with the opposite byte order -# from the machine running "file" with "byte-swapped cpio archive". -# -# The SVR4 "cpio(4)" hints that there are additional formats, but they -# are defined as "short"s; I think all the new formats are -# character-header formats and thus are strings, not numbers. -0 short 070707 cpio archive -!:mime application/x-cpio -0 short 0143561 byte-swapped cpio archive -!:mime application/x-cpio # encoding: swapped -0 string 070707 ASCII cpio archive (pre-SVR4 or odc) -0 string 070701 ASCII cpio archive (SVR4 with no CRC) -0 string 070702 ASCII cpio archive (SVR4 with CRC) - -# Debian package (needs to go before regular portable archives) -# -0 string =!<arch>\ndebian -!:mime application/x-debian-package ->8 string debian-split part of multipart Debian package ->8 string debian-binary Debian binary package ->8 string !debian ->68 string >\0 (format %s) -# These next two lines do not work, because a bzip2 Debian archive -# still uses gzip for the control.tar (first in the archive). Only -# data.tar varies, and the location of its filename varies too. -# file/libmagic does not current have support for ascii-string based -# (offsets) as of 2005-09-15. -#>81 string bz2 \b, uses bzip2 compression -#>84 string gz \b, uses gzip compression -#>136 ledate x created: %s - -# other archives -0 long 0177555 very old archive -0 short 0177555 very old PDP-11 archive -0 long 0177545 old archive -0 short 0177545 old PDP-11 archive -0 long 0100554 apl workspace -0 string =<ar> archive -!:mime application/x-archive - -# MIPS archive (needs to go before regular portable archives) -# -0 string =!<arch>\n__________E MIPS archive ->20 string U with MIPS Ucode members ->21 string L with MIPSEL members ->21 string B with MIPSEB members ->19 string L and an EL hash table ->19 string B and an EB hash table ->22 string X -- out of date - -0 search/1 -h- Software Tools format archive text - -# -# XXX - why are there multiple <ar> thingies? Note that 0x213c6172 is -# "!<ar", so, for new-style (4.xBSD/SVR2andup) archives, we have: -# -# 0 string =!<arch> current ar archive -# 0 long 0x213c6172 archive file -# -# and for SVR1 archives, we have: -# -# 0 string \<ar> System V Release 1 ar archive -# 0 string =<ar> archive -# -# XXX - did Aegis really store shared libraries, breakpointed modules, -# and absolute code program modules in the same format as new-style -# "ar" archives? -# -0 string =!<arch> current ar archive -!:mime application/x-archive ->8 string __.SYMDEF random library ->0 belong =65538 - pre SR9.5 ->0 belong =65539 - post SR9.5 ->0 beshort 2 - object archive ->0 beshort 3 - shared library module ->0 beshort 4 - debug break-pointed module ->0 beshort 5 - absolute code program module -0 string \<ar> System V Release 1 ar archive -0 string =<ar> archive -# -# XXX - from "vax", which appears to collect a bunch of byte-swapped -# thingies, to help you recognize VAX files on big-endian machines; -# with "leshort", "lelong", and "string", that's no longer necessary.... -# -0 belong 0x65ff0000 VAX 3.0 archive -0 belong 0x3c61723e VAX 5.0 archive -# -0 long 0x213c6172 archive file -0 lelong 0177555 very old VAX archive -0 leshort 0177555 very old PDP-11 archive -# -# XXX - "pdp" claims that 0177545 can have an __.SYMDEF member and thus -# be a random library (it said 0xff65 rather than 0177545). -# -0 lelong 0177545 old VAX archive ->8 string __.SYMDEF random library -0 leshort 0177545 old PDP-11 archive ->8 string __.SYMDEF random library -# -# From "pdp" (but why a 4-byte quantity?) -# -0 lelong 0x39bed PDP-11 old archive -0 lelong 0x39bee PDP-11 4.0 archive - -# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com) -# -# The first byte is the magic (0x1a), byte 2 is the compression type for -# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS -# filename of the first file (null terminated). Since some types collide -# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%), -# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%). 0x01 collides with terminfo. -0 lelong&0x8080ffff 0x0000081a ARC archive data, dynamic LZW -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000091a ARC archive data, squashed -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000021a ARC archive data, uncompressed -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000031a ARC archive data, packed -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000041a ARC archive data, squeezed -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000061a ARC archive data, crunched -!:mime application/x-arc -# [JW] stuff taken from idarc, obviously ARC successors: -0 lelong&0x8080ffff 0x00000a1a PAK archive data -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000141a ARC+ archive data -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000481a HYP archive data -!:mime application/x-arc - -# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk) -# I can't create either SPARK or ArcFS archives so I have not tested this stuff -# [GRR: the original entries collide with ARC, above; replaced with combined -# version (not tested)] -#0 byte 0x1a RISC OS archive (spark format) -0 string \032archive RISC OS archive (ArcFS format) -0 string Archive\000 RISC OS archive (ArcFS format) - -# All these were taken from idarc, many could not be verified. Unfortunately, -# there were many low-quality sigs, i.e. easy to trigger false positives. -# Please notify me of any real-world fishy/ambiguous signatures and I'll try -# to get my hands on the actual archiver and see if I find something better. [JW] -# probably many can be enhanced by finding some 0-byte or control char near the start - -# idarc calls this Crush/Uncompressed... *shrug* -0 string CRUSH Crush archive data -# Squeeze It (.sqz) -0 string HLSQZ Squeeze It archive data -# SQWEZ -0 string SQWEZ SQWEZ archive data -# HPack (.hpk) -0 string HPAK HPack archive data -# HAP -0 string \x91\x33HF HAP archive data -# MD/MDCD -0 string MDmd MDCD archive data -# LIM -0 string LIM\x1a LIM archive data -# SAR -3 string LH5 SAR archive data -# BSArc/BS2 -0 string \212\3SB \0 BSArc/BS2 archive data -# MAR -2 string =-ah MAR archive data -# ACB -0 belong&0x00f800ff 0x00800000 ACB archive data -# CPZ -# TODO, this is what idarc says: 0 string \0\0\0 CPZ archive data -# JRC -0 string JRchive JRC archive data -# Quantum -0 string DS\0 Quantum archive data -# ReSOF -0 string PK\3\6 ReSOF archive data -# QuArk -0 string 7\4 QuArk archive data -# YAC -14 string YC YAC archive data -# X1 -0 string X1 X1 archive data -0 string XhDr X1 archive data -# CDC Codec (.dqt) -0 belong&0xffffe000 0x76ff2000 CDC Codec archive data -# AMGC -0 string \xad6" AMGC archive data -# NuLIB -0 string NõFélå NuLIB archive data -# PakLeo -0 string LEOLZW PAKLeo archive data -# ChArc -0 string SChF ChArc archive data -# PSA -0 string PSA PSA archive data -# CrossePAC -0 string DSIGDCC CrossePAC archive data -# Freeze -0 string \x1f\x9f\x4a\x10\x0a Freeze archive data -# KBoom -0 string ¨MP¨ KBoom archive data -# NSQ, must go after CDC Codec -0 string \x76\xff NSQ archive data -# DPA -0 string Dirk\ Paehl DPA archive data -# BA -# TODO: idarc says "bytes 0-2 == bytes 3-5" -# TTComp -0 string \0\6 TTComp archive data -# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation? -0 string ESP ESP archive data -# ZPack -0 string \1ZPK\1 ZPack archive data -# Sky -0 string \xbc\x40 Sky archive data -# UFA -0 string UFA UFA archive data -# Dry -0 string =-H2O DRY archive data -# FoxSQZ -0 string FOXSQZ FoxSQZ archive data -# AR7 -0 string ,AR7 AR7 archive data -# PPMZ -0 string PPMZ PPMZ archive data -# MS Compress -4 string \x88\xf0\x27 MS Compress archive data -# updated by Joerg Jenderek ->9 string \0 ->>0 string KWAJ ->>>7 string \321\003 MS Compress archive data ->>>>14 ulong >0 \b, original size: %ld bytes ->>>>18 ubyte >0x65 ->>>>>18 string x \b, was %.8s ->>>>>(10.b-4) string x \b.%.3s -# MP3 (archiver, not lossy audio compression) -0 string MP3\x1a MP3-Archiver archive data -# ZET -0 string OZÝ ZET archive data -# TSComp -0 string \x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive data -# ARQ -0 string gW\4\1 ARQ archive data -# Squash -3 string OctSqu Squash archive data -# Terse -0 string \5\1\1\0 Terse archive data -# PUCrunch -0 string \x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31 PUCrunch archive data -# UHarc -0 string UHA UHarc archive data -# ABComp -0 string \2AB ABComp archive data -0 string \3AB2 ABComp archive data -# CMP -0 string CO\0 CMP archive data -# Splint -0 string \x93\xb9\x06 Splint archive data -# InstallShield -0 string \x13\x5d\x65\x8c InstallShield Z archive Data -# Gather -1 string GTH Gather archive data -# BOA -0 string BOA BOA archive data -# RAX -0 string ULEB\xa RAX archive data -# Xtreme -0 string ULEB\0 Xtreme archive data -# Pack Magic -0 string @â\1\0 Pack Magic archive data -# BTS -0 belong&0xfeffffff 0x1a034465 BTS archive data -# ELI 5750 -0 string Ora\ ELI 5750 archive data -# QFC -0 string \x1aFC\x1a QFC archive data -0 string \x1aQF\x1a QFC archive data -# PRO-PACK -0 string RNC PRO-PACK archive data -# 777 -0 string 777 777 archive data -# LZS221 -0 string sTaC LZS221 archive data -# HPA -0 string HPA HPA archive data -# Arhangel -0 string LG Arhangel archive data -# EXP1, uses bzip2 -0 string 0123456789012345BZh EXP1 archive data -# IMP -0 string IMP\xa IMP archive data -# NRV -0 string \x00\x9E\x6E\x72\x76\xFF NRV archive data -# Squish -0 string \x73\xb2\x90\xf4 Squish archive data -# Par -0 string PHILIPP Par archive data -0 string PAR Par archive data -# HIT -0 string UB HIT archive data -# SBX -0 belong&0xfffff000 0x53423000 SBX archive data -# NaShrink -0 string NSK NaShrink archive data -# SAPCAR -0 string #\ CAR\ archive\ header SAPCAR archive data -0 string CAR\ 2.00RG SAPCAR archive data -# Disintegrator -0 string DST Disintegrator archive data -# ASD -0 string ASD ASD archive data -# InstallShield CAB -0 string ISc( InstallShield CAB -# TOP4 -0 string T4\x1a TOP4 archive data -# BatComp left out: sig looks like COM executable -# so TODO: get real 4dos batcomp file and find sig -# BlakHole -0 string BH\5\7 BlakHole archive data -# BIX -0 string BIX0 BIX archive data -# ChiefLZA -0 string ChfLZ ChiefLZA archive data -# Blink -0 string Blink Blink archive data -# Logitech Compress -0 string \xda\xfa Logitech Compress archive data -# ARS-Sfx (FIXME: really a SFX? then goto COM/EXE) -1 string (C)\ STEPANYUK ARS-Sfx archive data -# AKT/AKT32 -0 string AKT32 AKT32 archive data -0 string AKT AKT archive data -# NPack -0 string MSTSM NPack archive data -# PFT -0 string \0\x50\0\x14 PFT archive data -# SemOne -0 string SEM SemOne archive data -# PPMD -0 string \x8f\xaf\xac\x84 PPMD archive data -# FIZ -0 string FIZ FIZ archive data -# MSXiE -0 belong&0xfffff0f0 0x4d530000 MSXiE archive data -# DeepFreezer -0 belong&0xfffffff0 0x797a3030 DeepFreezer archive data -# DC -0 string =<DC- DC archive data -# TPac -0 string \4TPAC\3 TPac archive data -# Ai -0 string Ai\1\1\0 Ai archive data -0 string Ai\1\0\0 Ai archive data -# Ai32 -0 string Ai\2\0 Ai32 archive data -0 string Ai\2\1 Ai32 archive data -# SBC -0 string SBC SBC archive data -# Ybs -0 string YBS Ybs archive data -# DitPack -0 string \x9e\0\0 DitPack archive data -# DMS -0 string DMS! DMS archive data -# EPC -0 string \x8f\xaf\xac\x8c EPC archive data -# VSARC -0 string VS\x1a VSARC archive data -# PDZ -0 string PDZ PDZ archive data -# ReDuq -0 string rdqx ReDuq archive data -# GCA -0 string GCAX GCA archive data -# PPMN -0 string pN PPMN archive data -# WinImage -3 string WINIMAGE WinImage archive data -# Compressia -0 string CMP0CMP Compressia archive data -# UHBC -0 string UHB UHBC archive data -# WinHKI -0 string \x61\x5C\x04\x05 WinHKI archive data -# WWPack data file -0 string WWP WWPack archive data -# BSN (BSA, PTS-DOS) -0 string \xffBSG BSN archive data -1 string \xffBSG BSN archive data -3 string \xffBSG BSN archive data -1 string \0\xae\2 BSN archive data -1 string \0\xae\3 BSN archive data -1 string \0\xae\7 BSN archive data -# AIN -0 string \x33\x18 AIN archive data -0 string \x33\x17 AIN archive data -# XPA32 -0 string xpa\0\1 XPA32 archive data -# SZip (TODO: doesn't catch all versions) -0 string SZ\x0a\4 SZip archive data -# XPack DiskImage -0 string jm XPack DiskImage archive data -# XPack Data -0 string xpa XPack archive data -# XPack Single Data -0 string Í\ jm XPack single archive data - -# TODO: missing due to unknown magic/magic at end of file: -#DWC -#ARG -#ZAR -#PC/3270 -#InstallIt -#RKive -#RK -#XPack Diskimage - -# These were inspired by idarc, but actually verified -# Dzip archiver (.dz) -0 string DZ Dzip archive data ->2 byte x \b, version %i ->3 byte x \b.%i -# ZZip archiver (.zz) -0 string ZZ\ \0\0 ZZip archive data -0 string ZZ0 ZZip archive data -# PAQ archiver (.paq) -0 string \xaa\x40\x5f\x77\x1f\xe5\x82\x0d PAQ archive data -0 string PAQ PAQ archive data ->3 byte&0xf0 0x30 ->>3 byte x (v%c) -# JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP) -0xe string \x1aJar\x1b JAR (ARJ Software, Inc.) archive data -0 string JARCS JAR (ARJ Software, Inc.) archive data - -# ARJ archiver (jason@jarthur.Claremont.EDU) -0 leshort 0xea60 ARJ archive data -!:mime application/x-arj ->5 byte x \b, v%d, ->8 byte &0x04 multi-volume, ->8 byte &0x10 slash-switched, ->8 byte &0x20 backup, ->34 string x original name: %s, ->7 byte 0 os: MS-DOS ->7 byte 1 os: PRIMOS ->7 byte 2 os: Unix ->7 byte 3 os: Amiga ->7 byte 4 os: Macintosh ->7 byte 5 os: OS/2 ->7 byte 6 os: Apple ][ GS ->7 byte 7 os: Atari ST ->7 byte 8 os: NeXT ->7 byte 9 os: VAX/VMS ->3 byte >0 %d] -# [JW] idarc says this is also possible -2 leshort 0xea60 ARJ archive data - -# HA archiver (Greg Roelofs, newt@uchicago.edu) -# This is a really bad format. A file containing HAWAII will match this... -#0 string HA HA archive data, -#>2 leshort =1 1 file, -#>2 leshort >1 %u files, -#>4 byte&0x0f =0 first is type CPY -#>4 byte&0x0f =1 first is type ASC -#>4 byte&0x0f =2 first is type HSC -#>4 byte&0x0f =0x0e first is type DIR -#>4 byte&0x0f =0x0f first is type SPECIAL -# suggestion: at least identify small archives (<1024 files) -0 belong&0xffff00fc 0x48410000 HA archive data ->2 leshort =1 1 file, ->2 leshort >1 %u files, ->4 byte&0x0f =0 first is type CPY ->4 byte&0x0f =1 first is type ASC ->4 byte&0x0f =2 first is type HSC ->4 byte&0x0f =0x0e first is type DIR ->4 byte&0x0f =0x0f first is type SPECIAL - -# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz) -0 string HPAK HPACK archive data - -# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net -0 string \351,\001JAM\ JAM archive, ->7 string >\0 version %.4s ->0x26 byte =0x27 - ->>0x2b string >\0 label %.11s, ->>0x27 lelong x serial %08x, ->>0x36 string >\0 fstype %.8s - -# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu) -2 string -lh0- LHarc 1.x/ARX archive data [lh0] -!:mime application/x-lharc -2 string -lh1- LHarc 1.x/ARX archive data [lh1] -!:mime application/x-lharc -2 string -lz4- LHarc 1.x archive data [lz4] -!:mime application/x-lharc -2 string -lz5- LHarc 1.x archive data [lz5] -!:mime application/x-lharc -# [never seen any but the last; -lh4- reported in comp.compression:] -2 string -lzs- LHa/LZS archive data [lzs] -!:mime application/x-lha -2 string -lh\40- LHa 2.x? archive data [lh ] -!:mime application/x-lha -2 string -lhd- LHa 2.x? archive data [lhd] -!:mime application/x-lha -2 string -lh2- LHa 2.x? archive data [lh2] -!:mime application/x-lha -2 string -lh3- LHa 2.x? archive data [lh3] -!:mime application/x-lha -2 string -lh4- LHa (2.x) archive data [lh4] -!:mime application/x-lha -2 string -lh5- LHa (2.x) archive data [lh5] -!:mime application/x-lha -2 string -lh6- LHa (2.x) archive data [lh6] -!:mime application/x-lha -2 string -lh7- LHa (2.x)/LHark archive data [lh7] -!:mime application/x-lha ->20 byte x - header level %d -# taken from idarc [JW] -2 string -lZ PUT archive data -2 string -lz LZS archive data -2 string -sw1- Swag archive data - -# RAR archiver (Greg Roelofs, newt@uchicago.edu) -0 string Rar! RAR archive data, -!:mime application/x-rar ->44 byte x v%0x, ->10 byte >0 flags: ->>10 byte &0x01 Archive volume, ->>10 byte &0x02 Commented, ->>10 byte &0x04 Locked, ->>10 byte &0x08 Solid, ->>10 byte &0x20 Authenticated, ->35 byte 0 os: MS-DOS ->35 byte 1 os: OS/2 ->35 byte 2 os: Win32 ->35 byte 3 os: Unix -# some old version? idarc says: -0 string RE\x7e\x5e RAR archive data - -# SQUISH archiver (Greg Roelofs, newt@uchicago.edu) -0 string SQSH squished archive data (Acorn RISCOS) - -# UC2 archiver (Greg Roelofs, newt@uchicago.edu) -# [JW] see exe section for self-extracting version -0 string UC2\x1a UC2 archive data - -# ZIP archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) -0 string PK\003\004 ->4 byte 0x00 Zip archive data -!:mime application/zip ->4 byte 0x09 Zip archive data, at least v0.9 to extract -!:mime application/zip ->4 byte 0x0a Zip archive data, at least v1.0 to extract -!:mime application/zip ->4 byte 0x0b Zip archive data, at least v1.1 to extract -!:mime application/zip ->0x161 string WINZIP Zip archive data, WinZIP self-extracting -!:mime application/zip ->4 byte 0x14 ->>30 ubelong !0x6d696d65 Zip archive data, at least v2.0 to extract -!:mime application/zip - -# OpenOffice.org / KOffice / StarOffice documents -# Listed here because they ARE zip files -# -# From: Abel Cheung <abel@oaka.org> ->4 byte 0x14 ->>30 string mimetype - -# KOffice (1.2 or above) formats ->>>50 string vnd.kde. KOffice (>=1.2) ->>>>58 string karbon Karbon document ->>>>58 string kchart KChart document ->>>>58 string kformula KFormula document ->>>>58 string kivio Kivio document ->>>>58 string kontour Kontour document ->>>>58 string kpresenter KPresenter document ->>>>58 string kspread KSpread document ->>>>58 string kword KWord document - -# OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7) ->>>50 string vnd.sun.xml. OpenOffice.org 1.x ->>>>62 string writer Writer ->>>>>68 byte !0x2e document ->>>>>68 string .template template ->>>>>68 string .global global document ->>>>62 string calc Calc ->>>>>66 byte !0x2e spreadsheet ->>>>>66 string .template template ->>>>62 string draw Draw ->>>>>66 byte !0x2e document ->>>>>66 string .template template ->>>>62 string impress Impress ->>>>>69 byte !0x2e presentation ->>>>>69 string .template template ->>>>62 string math Math document ->>>>62 string base Database file - -# OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8) -# http://lists.oasis-open.org/archives/office/200505/msg00006.html ->>>50 string vnd.oasis.opendocument. OpenDocument ->>>>73 string text ->>>>>77 byte !0x2d Text -!:mime application/vnd.oasis.opendocument.text ->>>>>77 string -template Text Template ->>>>>77 string -web HTML Document Template ->>>>>77 string -master Master Document ->>>>73 string graphics Drawing ->>>>>81 string -template Template ->>>>73 string presentation Presentation ->>>>>85 string -template Template ->>>>73 string spreadsheet Spreadsheet ->>>>>84 string -template Template ->>>>73 string chart Chart ->>>>>78 string -template Template ->>>>73 string formula Formula ->>>>>80 string -template Template ->>>>73 string database Database ->>>>73 string image Image - -# Zoo archiver -20 lelong 0xfdc4a7dc Zoo archive data -!:mime application/x-zoo ->4 byte >48 \b, v%c. ->>6 byte >47 \b%c ->>>7 byte >47 \b%c ->32 byte >0 \b, modify: v%d ->>33 byte x \b.%d+ ->42 lelong 0xfdc4a7dc \b, ->>70 byte >0 extract: v%d ->>>71 byte x \b.%d+ - -# Shell archives -10 string #\ This\ is\ a\ shell\ archive shell archive text -!:mime application/octet-stream - -# -# LBR. NB: May conflict with the questionable -# "binary Computer Graphics Metafile" format. -# -0 string \0\ \ \ \ \ \ \ \ \ \ \ \0\0 LBR archive data -# -# PMA (CP/M derivative of LHA) -# -2 string -pm0- PMarc archive data [pm0] -2 string -pm1- PMarc archive data [pm1] -2 string -pm2- PMarc archive data [pm2] -2 string -pms- PMarc SFX archive (CP/M, DOS) -5 string -pc1- PopCom compressed executable (CP/M) - -# From Rafael Laboissiere <rafael@laboissiere.net> -# The Project Revision Control System (see -# http://prcs.sourceforge.net) generates a packaged project -# file which is recognized by the following entry: -0 leshort 0xeb81 PRCS packaged project - -# Microsoft cabinets -# by David Necas (Yeti) <yeti@physics.muni.cz> -#0 string MSCF\0\0\0\0 Microsoft cabinet file data, -#>25 byte x v%d -#>24 byte x \b.%d -# MPi: All CABs have version 1.3, so this is pointless. -# Better magic in debian-additions. - -# GTKtalog catalogs -# by David Necas (Yeti) <yeti@physics.muni.cz> -4 string gtktalog\ GTKtalog catalog data, ->13 string 3 version 3 ->>14 beshort 0x677a (gzipped) ->>14 beshort !0x677a (not gzipped) ->13 string >3 version %s - -############################################################################ -# Parity archive reconstruction file, the 'par' file format now used on Usenet. -0 string PAR\0 PARity archive data ->48 leshort =0 - Index file ->48 leshort >0 - file number %d - -# Felix von Leitner <felix-file@fefe.de> -0 string d8:announce BitTorrent file -!:mime application/x-bittorrent - -# Atari MSA archive - Teemu Hukkanen <tjhukkan@iki.fi> -0 beshort 0x0e0f Atari MSA archive data ->2 beshort x \b, %d sectors per track ->4 beshort 0 \b, 1 sided ->4 beshort 1 \b, 2 sided ->6 beshort x \b, starting track: %d ->8 beshort x \b, ending track: %d - -# Alternate ZIP string (amc@arwen.cs.berkeley.edu) -0 string PK00PK\003\004 Zip archive data - -# ACE archive (from http://www.wotsit.org/download.asp?f=ace) -# by Stefan `Sec` Zehl <sec@42.org> -7 string **ACE** ACE archive data ->15 byte >0 version %d ->16 byte =0x00 \b, from MS-DOS ->16 byte =0x01 \b, from OS/2 ->16 byte =0x02 \b, from Win/32 ->16 byte =0x03 \b, from Unix ->16 byte =0x04 \b, from MacOS ->16 byte =0x05 \b, from WinNT ->16 byte =0x06 \b, from Primos ->16 byte =0x07 \b, from AppleGS ->16 byte =0x08 \b, from Atari ->16 byte =0x09 \b, from Vax/VMS ->16 byte =0x0A \b, from Amiga ->16 byte =0x0B \b, from Next ->14 byte x \b, version %d to extract ->5 leshort &0x0080 \b, multiple volumes, ->>17 byte x \b (part %d), ->5 leshort &0x0002 \b, contains comment ->5 leshort &0x0200 \b, sfx ->5 leshort &0x0400 \b, small dictionary ->5 leshort &0x0800 \b, multi-volume ->5 leshort &0x1000 \b, contains AV-String ->>30 string \x16*UNREGISTERED\x20VERSION* (unregistered) ->5 leshort &0x2000 \b, with recovery record ->5 leshort &0x4000 \b, locked ->5 leshort &0x8000 \b, solid -# Date in MS-DOS format (whatever that is) -#>18 lelong x Created on - -# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann -# <doj@cubic.org> -0x1A string sfArk sfArk compressed Soundfont ->0x15 string 2 ->>0x1 string >\0 Version %s ->>0x2A string >\0 : %s - -# DR-DOS 7.03 Packed File *.??_ -0 string Packed\ File\ Personal NetWare Packed File ->12 string x \b, was "%.12s" - -# EET archive -# From: Tilman Sauerbeck <tilman@code-monkey.de> -0 belong 0x1ee7ff00 EET archive -!:mime application/x-eet - -# rzip archives -0 string RZIP rzip compressed data ->4 byte x - version %d ->5 byte x \b.%d ->6 belong x (%d bytes) - -# From: "Robert Dale" <robdale@gmail.com> -0 belong 123 dar archive, ->4 belong x label "%.8x ->>8 belong x %.8x ->>>12 beshort x %.4x" ->14 byte 0x54 end slice ->14 beshort 0x4e4e multi-part ->14 beshort 0x4e53 multi-part, with -S - -# Symbian installation files -# http://www.thouky.co.uk/software/psifs/sis.html -# http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf -8 lelong 0x10000419 Symbian installation file -!:mime application/vnd.symbian.install ->4 lelong 0x1000006D (EPOC release 3/4/5) ->4 lelong 0x10003A12 (EPOC release 6) -0 lelong 0x10201A7A Symbian installation file (Symbian OS 9.x) -!:mime x-epoc/x-sisx-app - -# From "Nelson A. de Oliveira" <naoliv@gmail.com> -0 string MPQ\032 MoPaQ (MPQ) archive - -# From: Dirk Jagdmann <doj@cubic.org> -# xar archive format: http://code.google.com/p/xar/ -0 string xar! xar archive ->6 beshort x - version %ld - -# From: "Nelson A. de Oliveira" <naoliv@gmail.com> -# .kgb -0 string KGB_arch KGB Archiver file ->10 string x with compression level %.1s - -# xar (eXtensible ARchiver) archive -# From: "David Remahl" <dremahl@apple.com> -0 string xar! xar archive -#>4 beshort x header size %d ->6 beshort x version %d, -#>8 quad x compressed TOC: %d, -#>16 quad x uncompressed TOC: %d, ->24 belong 0 no checksum ->24 belong 1 SHA-1 checksum ->24 belong 2 MD5 checksum - -# Type: Parity Archive -# From: Daniel van Eeden <daniel_e@dds.nl> -0 string PAR2 Parity Archive Volume Set - -#------------------------------------------------------------------------------ -# asterix: file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character -# strings as "long" - we assume they're just strings: -# From: guy@netapp.com (Guy Harris) -# -0 string *STA Aster*x ->7 string WORD Words Document ->7 string GRAP Graphic ->7 string SPRE Spreadsheet ->7 string MACR Macro -0 string 2278 Aster*x Version 2 ->29 byte 0x36 Words Document ->29 byte 0x35 Graphic ->29 byte 0x32 Spreadsheet ->29 byte 0x38 Macro - - -#------------------------------------------------------------------------------ -# att3b: file(1) magic for AT&T 3B machines -# -# The `versions' should be un-commented if they work for you. -# (Was the problem just one of endianness?) -# -# 3B20 -# -# The 3B20 conflicts with SCCS. -#0 beshort 0550 3b20 COFF executable -#>12 belong >0 not stripped -#>22 beshort >0 - version %ld -#0 beshort 0551 3b20 COFF executable (TV) -#>12 belong >0 not stripped -#>22 beshort >0 - version %ld -# -# WE32K -# -0 beshort 0560 WE32000 COFF ->18 beshort ^00000020 object ->18 beshort &00000020 executable ->12 belong >0 not stripped ->18 beshort ^00010000 N/A on 3b2/300 w/paging ->18 beshort &00020000 32100 required ->18 beshort &00040000 and MAU hardware required ->20 beshort 0407 (impure) ->20 beshort 0410 (pure) ->20 beshort 0413 (demand paged) ->20 beshort 0443 (target shared library) ->22 beshort >0 - version %ld -0 beshort 0561 WE32000 COFF executable (TV) ->12 belong >0 not stripped -#>18 beshort &00020000 - 32100 required -#>18 beshort &00040000 and MAU hardware required -#>22 beshort >0 - version %ld -# -# core file for 3b2 -0 string \000\004\036\212\200 3b2 core file ->364 string >\0 of '%s' -#------------------------------------------------------------------------------ -# audio: file(1) magic for sound formats (see also "iff") -# -# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com), -# and others -# - -# Sun/NeXT audio data -0 string .snd Sun/NeXT audio data: ->12 belong 1 8-bit ISDN mu-law, -!:mime audio/basic ->12 belong 2 8-bit linear PCM [REF-PCM], -!:mime audio/basic ->12 belong 3 16-bit linear PCM, -!:mime audio/basic ->12 belong 4 24-bit linear PCM, -!:mime audio/basic ->12 belong 5 32-bit linear PCM, -!:mime audio/basic ->12 belong 6 32-bit IEEE floating point, -!:mime audio/basic ->12 belong 7 64-bit IEEE floating point, -!:mime audio/basic ->12 belong 8 Fragmented sample data, ->12 belong 10 DSP program, ->12 belong 11 8-bit fixed point, ->12 belong 12 16-bit fixed point, ->12 belong 13 24-bit fixed point, ->12 belong 14 32-bit fixed point, ->12 belong 18 16-bit linear with emphasis, ->12 belong 19 16-bit linear compressed, ->12 belong 20 16-bit linear with emphasis and compression, ->12 belong 21 Music kit DSP commands, ->12 belong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.), -!:mime audio/x-adpcm ->12 belong 24 compressed (8-bit CCITT G.722 ADPCM) ->12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM), ->12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM), ->12 belong 27 8-bit A-law (CCITT G.711), ->20 belong 1 mono, ->20 belong 2 stereo, ->20 belong 4 quad, ->16 belong >0 %d Hz - -# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format -# that uses little-endian encoding and has a different magic number -0 lelong 0x0064732E DEC audio data: ->12 lelong 1 8-bit ISDN mu-law, -!:mime audio/x-dec-basic ->12 lelong 2 8-bit linear PCM [REF-PCM], -!:mime audio/x-dec-basic ->12 lelong 3 16-bit linear PCM, -!:mime audio/x-dec-basic ->12 lelong 4 24-bit linear PCM, -!:mime audio/x-dec-basic ->12 lelong 5 32-bit linear PCM, -!:mime audio/x-dec-basic ->12 lelong 6 32-bit IEEE floating point, -!:mime audio/x-dec-basic ->12 lelong 7 64-bit IEEE floating point, -!:mime audio/x-dec-basic ->12 belong 8 Fragmented sample data, ->12 belong 10 DSP program, ->12 belong 11 8-bit fixed point, ->12 belong 12 16-bit fixed point, ->12 belong 13 24-bit fixed point, ->12 belong 14 32-bit fixed point, ->12 belong 18 16-bit linear with emphasis, ->12 belong 19 16-bit linear compressed, ->12 belong 20 16-bit linear with emphasis and compression, ->12 belong 21 Music kit DSP commands, ->12 lelong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.), -!:mime audio/x-dec-basic ->12 belong 24 compressed (8-bit CCITT G.722 ADPCM) ->12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM), ->12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM), ->12 belong 27 8-bit A-law (CCITT G.711), ->20 lelong 1 mono, ->20 lelong 2 stereo, ->20 lelong 4 quad, ->16 lelong >0 %d Hz - -# Creative Labs AUDIO stuff -0 string MThd Standard MIDI data -!:mime audio/midi ->8 beshort x (format %d) ->10 beshort x using %d track ->10 beshort >1 \bs ->12 beshort&0x7fff x at 1/%d ->12 beshort&0x8000 >0 SMPTE - -0 string CTMF Creative Music (CMF) data -!:mime audio/x-unknown -0 string SBI SoundBlaster instrument data -!:mime audio/x-unknown -0 string Creative\ Voice\ File Creative Labs voice data -!:mime audio/x-unknown -# is this next line right? it came this way... ->19 byte 0x1A ->23 byte >0 - version %d ->22 byte >0 \b.%d - -# first entry is also the string "NTRK" -0 belong 0x4e54524b MultiTrack sound data ->4 belong x - version %ld - -# Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED -# [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi] -0 string EMOD Extended MOD sound data, ->4 byte&0xf0 x version %d ->4 byte&0x0f x \b.%d, ->45 byte x %d instruments ->83 byte 0 (module) ->83 byte 1 (song) - -# Real Audio (Magic .ra\0375) -0 belong 0x2e7261fd RealAudio sound file -!:mime audio/x-pn-realaudio -0 string .RMF\0\0\0 RealMedia file -!:mime application/vnd.rn-realmedia -#video/x-pn-realvideo -#video/vnd.rn-realvideo -#application/vnd.rn-realmedia -# sigh, there are many mimes for that but the above are the most common. - -# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net] -# Oct 31, 1995 -# fixed by <doj@cubic.org> 2003-06-24 -# Too short... -#0 string MTM MultiTracker Module sound file -#0 string if Composer 669 Module sound data -#0 string JN Composer 669 Module sound data (extended format) -0 string MAS_U ULT(imate) Module sound data - -#0 string FAR Module sound data -#>4 string >\15 Title: "%s" - -0x2c string SCRM ScreamTracker III Module sound data ->0 string >\0 Title: "%s" - -# Gravis UltraSound patches -# From <ache@nagual.ru> - -0 string GF1PATCH110\0ID#000002\0 GUS patch -0 string GF1PATCH100\0ID#000002\0 Old GUS patch - -# mime types according to http://www.geocities.com/nevilo/mod.htm: -# audio/it .it -# audio/x-zipped-it .itz -# audio/xm fasttracker modules -# audio/x-s3m screamtracker modules -# audio/s3m screamtracker modules -# audio/x-zipped-mod mdz -# audio/mod mod -# audio/x-mod All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z) - -# -# Taken from loader code from mikmod version 2.14 -# by Steve McIntyre (stevem@chiark.greenend.org.uk) -# <doj@cubic.org> added title printing on 2003-06-24 -0 string MAS_UTrack_V00 ->14 string >/0 ultratracker V1.%.1s module sound data -!:mime audio/x-mod -#audio/x-tracker-module - -0 string UN05 MikMod UNI format module sound data - -0 string Extended\ Module: Fasttracker II module sound data -!:mime audio/x-mod -#audio/x-tracker-module ->17 string >\0 Title: "%s" - -21 string/c =!SCREAM! Screamtracker 2 module sound data -!:mime audio/x-mod -#audio/x-screamtracker-module -21 string BMOD2STM Screamtracker 2 module sound data -!:mime audio/x-mod -#audio/x-screamtracker-module -1080 string M.K. 4-channel Protracker module sound data -!:mime audio/x-mod -#audio/x-protracker-module ->0 string >\0 Title: "%s" -1080 string M!K! 4-channel Protracker module sound data -!:mime audio/x-mod -#audio/x-protracker-module ->0 string >\0 Title: "%s" -1080 string FLT4 4-channel Startracker module sound data -!:mime audio/x-mod -#audio/x-startracker-module ->0 string >\0 Title: "%s" -1080 string FLT8 8-channel Startracker module sound data -!:mime audio/x-mod -#audio/x-startracker-module ->0 string >\0 Title: "%s" -1080 string 4CHN 4-channel Fasttracker module sound data -!:mime audio/x-mod -#audio/x-fasttracker-module ->0 string >\0 Title: "%s" -1080 string 6CHN 6-channel Fasttracker module sound data -!:mime audio/x-mod -#audio/x-fasttracker-module ->0 string >\0 Title: "%s" -1080 string 8CHN 8-channel Fasttracker module sound data -!:mime audio/x-mod -#audio/x-fasttracker-module ->0 string >\0 Title: "%s" -1080 string CD81 8-channel Octalyser module sound data -!:mime audio/x-mod -#audio/x-octalysertracker-module ->0 string >\0 Title: "%s" -1080 string OKTA 8-channel Octalyzer module sound data -!:mime audio/x-mod -#audio/x-octalysertracker-module ->0 string >\0 Title: "%s" -# Not good enough. -#1082 string CH -#>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data -1080 string 16CN 16-channel Taketracker module sound data -!:mime audio/x-mod -#audio/x-taketracker-module ->0 string >\0 Title: "%s" -1080 string 32CN 32-channel Taketracker module sound data -!:mime audio/x-mod -#audio/x-taketracker-module ->0 string >\0 Title: "%s" - -# TOC sound files -Trevor Johnson <trevor@jpj.net> -# -0 string TOC TOC sound file - -# sidfiles <pooka@iki.fi> -# added name,author,(c) and new RSID type by <doj@cubic.org> 2003-06-24 -0 string SIDPLAY\ INFOFILE Sidplay info file - -0 string PSID PlaySID v2.2+ (AMIGA) sidtune ->4 beshort >0 w/ header v%d, ->14 beshort =1 single song, ->14 beshort >1 %d songs, ->16 beshort >0 default song: %d ->0x16 string >\0 name: "%s" ->0x36 string >\0 author: "%s" ->0x56 string >\0 copyright: "%s" - -0 string RSID RSID sidtune PlaySID compatible ->4 beshort >0 w/ header v%d, ->14 beshort =1 single song, ->14 beshort >1 %d songs, ->16 beshort >0 default song: %d ->0x16 string >\0 name: "%s" ->0x36 string >\0 author: "%s" ->0x56 string >\0 copyright: "%s" - -# IRCAM <mpruett@sgi.com> -# VAX and MIPS files are little-endian; Sun and NeXT are big-endian -0 belong 0x64a30100 IRCAM file (VAX) -0 belong 0x64a30200 IRCAM file (Sun) -0 belong 0x64a30300 IRCAM file (MIPS little-endian) -0 belong 0x64a30400 IRCAM file (NeXT) - -# NIST SPHERE <mpruett@sgi.com> -0 string NIST_1A\n\ \ \ 1024\n NIST SPHERE file - -# Sample Vision <mpruett@sgi.com> -0 string SOUND\ SAMPLE\ DATA\ Sample Vision file - -# Audio Visual Research <tonigonenstein@users.sourceforge.net> -0 string 2BIT Audio Visual Research file, ->12 beshort =0 mono, ->12 beshort =-1 stereo, ->14 beshort x %d bits ->16 beshort =0 unsigned, ->16 beshort =-1 signed, ->22 belong&0x00ffffff x %d Hz, ->18 beshort =0 no loop, ->18 beshort =-1 loop, ->21 ubyte <128 note %d, ->22 byte =0 replay 5.485 KHz ->22 byte =1 replay 8.084 KHz ->22 byte =2 replay 10.971 Khz ->22 byte =3 replay 16.168 Khz ->22 byte =4 replay 21.942 KHz ->22 byte =5 replay 32.336 KHz ->22 byte =6 replay 43.885 KHz ->22 byte =7 replay 47.261 KHz - -# SGI SoundTrack <mpruett@sgi.com> -0 string _SGI_SoundTrack SGI SoundTrack project file -# ID3 version 2 tags <waschk@informatik.uni-rostock.de> -0 string ID3 Audio file with ID3 version 2 ->3 byte x \b.%d ->4 byte x \b.%d ->>5 byte &0x80 \b, unsynchronized frames ->>5 byte &0x40 \b, extended header ->>5 byte &0x20 \b, experimental ->>5 byte &0x10 \b, footer present ->(6.I) indirect x \b, contains: - -# NSF (NES sound file) magic -0 string NESM\x1a NES Sound File ->14 string >\0 ("%s" by ->46 string >\0 %s, copyright ->78 string >\0 %s), ->5 byte x version %d, ->6 byte x %d tracks, ->122 byte&0x2 =1 dual PAL/NTSC ->122 byte&0x1 =1 PAL ->122 byte&0x1 =0 NTSC - -# Type: SNES SPC700 sound files -# From: Josh Triplett <josh@freedesktop.org> -0 string SNES-SPC700\ Sound\ File\ Data\ v SNES SPC700 sound file ->&0 string 0.30 \b, version %s ->>0x23 byte 0x1B \b, without ID666 tag ->>0x23 byte 0x1A \b, with ID666 tag ->>>0x2E string >\0 \b, song "%.32s" ->>>0x4E string >\0 \b, game "%.32s" - -# Impulse tracker module (audio/x-it) -0 string IMPM Impulse Tracker module sound data - -!:mime audio/x-mod ->4 string >\0 "%s" ->40 leshort !0 compatible w/ITv%x ->42 leshort !0 created w/ITv%x - -# Imago Orpheus module (audio/x-imf) -60 string IM10 Imago Orpheus module sound data - ->0 string >\0 "%s" - -# From <collver1@attbi.com> -# These are the /etc/magic entries to decode modules, instruments, and -# samples in Impulse Tracker's native format. - -0 string IMPS Impulse Tracker Sample ->18 byte &2 16 bit ->18 byte ^2 8 bit ->18 byte &4 stereo ->18 byte ^4 mono -0 string IMPI Impulse Tracker Instrument ->28 leshort !0 ITv%x ->30 byte !0 %d samples - -# Yamaha TX Wave: file(1) magic for Yamaha TX Wave audio files -# From <collver1@attbi.com> -0 string LM8953 Yamaha TX Wave ->22 byte 0x49 looped ->22 byte 0xC9 non-looped ->23 byte 1 33kHz ->23 byte 2 50kHz ->23 byte 3 16kHz - -# scream tracker: file(1) magic for Scream Tracker sample files -# -# From <collver1@attbi.com> -76 string SCRS Scream Tracker Sample ->0 byte 1 sample ->0 byte 2 adlib melody ->0 byte >2 adlib drum ->31 byte &2 stereo ->31 byte ^2 mono ->31 byte &4 16bit little endian ->31 byte ^4 8bit ->30 byte 0 unpacked ->30 byte 1 packed - -# audio -# From: Cory Dikkers <cdikkers@swbell.net> -0 string MMD0 MED music file, version 0 -0 string MMD1 OctaMED Pro music file, version 1 -0 string MMD3 OctaMED Soundstudio music file, version 3 -0 string OctaMEDCmpr OctaMED Soundstudio compressed file -0 string MED MED_Song -0 string SymM Symphonie SymMOD music file -# -0 string THX AHX version ->3 byte =0 1 module data ->3 byte =1 2 module data -# -0 string OKTASONG Oktalyzer module data -# -0 string DIGI\ Booster\ module\0 %s ->20 byte >0 %c ->>21 byte >0 \b%c ->>>22 byte >0 \b%c ->>>>23 byte >0 \b%c ->610 string >\0 \b, "%s" -# -0 string DBM0 DIGI Booster Pro Module ->4 byte >0 V%X. ->>5 byte x \b%02X ->16 string >\0 \b, "%s" -# -0 string FTMN FaceTheMusic module ->16 string >\0d \b, "%s" - -# From: <doj@cubic.org> 2003-06-24 -0 string AMShdr\32 Velvet Studio AMS Module v2.2 -0 string Extreme Extreme Tracker AMS Module v1.3 -0 string DDMF Xtracker DMF Module ->4 byte x v%i ->0xD string >\0 Title: "%s" ->0x2B string >\0 Composer: "%s" -0 string DSM\32 Dynamic Studio Module DSM -0 string SONG DigiTrekker DTM Module -0 string DMDL DigiTrakker MDL Module -0 string PSM\32 Protracker Studio PSM Module -44 string PTMF Poly Tracker PTM Module ->0 string >\32 Title: "%s" -0 string MT20 MadTracker 2.0 Module MT2 -0 string RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD -0 string RTMM RTM Module -0x426 string MaDoKaN96 XMS Adlib Module ->0 string >\0 Composer: "%s" -0 string AMF AMF Module ->4 string >\0 Title: "%s" -0 string MODINFO1 Open Cubic Player Module Inforation MDZ -0 string Extended\40Instrument: Fast Tracker II Instrument - -# From: Takeshi Hamasaki <hma@syd.odn.ne.jp> -# NOA Nancy Codec file -0 string \210NOA\015\012\032 NOA Nancy Codec Movie file -# Yamaha SMAF format -0 string MMMD Yamaha SMAF file -# Sharp Jisaku Melody format for PDC -0 string \001Sharp\040JisakuMelody SHARP Cell-Phone ringing Melody ->20 string Ver01.00 Ver. 1.00 ->>32 byte x , %d tracks - -# Free lossless audio codec <http://flac.sourceforge.net> -# From: Przemyslaw Augustyniak <silvathraec@rpg.pl> -0 string fLaC FLAC audio bitstream data -!:mime audio/x-flac ->4 byte&0x7f >0 \b, unknown version ->4 byte&0x7f 0 \b -# some common bits/sample values ->>20 beshort&0x1f0 0x030 \b, 4 bit ->>20 beshort&0x1f0 0x050 \b, 6 bit ->>20 beshort&0x1f0 0x070 \b, 8 bit ->>20 beshort&0x1f0 0x0b0 \b, 12 bit ->>20 beshort&0x1f0 0x0f0 \b, 16 bit ->>20 beshort&0x1f0 0x170 \b, 24 bit ->>20 byte&0xe 0x0 \b, mono ->>20 byte&0xe 0x2 \b, stereo ->>20 byte&0xe 0x4 \b, 3 channels ->>20 byte&0xe 0x6 \b, 4 channels ->>20 byte&0xe 0x8 \b, 5 channels ->>20 byte&0xe 0xa \b, 6 channels ->>20 byte&0xe 0xc \b, 7 channels ->>20 byte&0xe 0xe \b, 8 channels -# some common sample rates ->>17 belong&0xfffff0 0x0ac440 \b, 44.1 kHz ->>17 belong&0xfffff0 0x0bb800 \b, 48 kHz ->>17 belong&0xfffff0 0x07d000 \b, 32 kHz ->>17 belong&0xfffff0 0x056220 \b, 22.05 kHz ->>17 belong&0xfffff0 0x05dc00 \b, 24 kHz ->>17 belong&0xfffff0 0x03e800 \b, 16 kHz ->>17 belong&0xfffff0 0x02b110 \b, 11.025 kHz ->>17 belong&0xfffff0 0x02ee00 \b, 12 kHz ->>17 belong&0xfffff0 0x01f400 \b, 8 kHz ->>17 belong&0xfffff0 0x177000 \b, 96 kHz ->>17 belong&0xfffff0 0x0fa000 \b, 64 kHz ->>21 byte&0xf >0 \b, >4G samples ->>21 byte&0xf 0 \b ->>>22 belong >0 \b, %u samples ->>>22 belong 0 \b, length unknown - -# (ISDN) VBOX voice message file (Wolfram Kleff) -0 string VBOX VBOX voice message data - -# ReBorn Song Files (.rbs) -# David J. Singer <doc@deadvirgins.org.uk> -8 string RB40 RBS Song file ->29 string ReBorn created by ReBorn ->37 string Propellerhead created by ReBirth - -# Synthesizer Generator and Kimwitu share their file format -0 string A#S#C#S#S#L#V#3 Synthesizer Generator or Kimwitu data -# Kimwitu++ uses a slightly different magic -0 string A#S#C#S#S#L#HUB Kimwitu++ data - -# From "Simon Hosie -0 string TFMX-SONG TFMX module sound data - -# Monkey's Audio compressed audio format (.ape) -# From danny.milo@gmx.net (Danny Milosavljevic) -# New version from Abel Cheung <abel (@) oaka.org> -0 string MAC\040 Monkey's Audio compressed format ->4 uleshort >0x0F8B version %d ->>(0x08.l) uleshort =1000 with fast compression ->>(0x08.l) uleshort =2000 with normal compression ->>(0x08.l) uleshort =3000 with high compression ->>(0x08.l) uleshort =4000 with extra high compression ->>(0x08.l) uleshort =5000 with insane compression ->>(0x08.l+18) uleshort =1 \b, mono ->>(0x08.l+18) uleshort =2 \b, stereo ->>(0x08.l+20) ulelong x \b, sample rate %d ->4 uleshort <0x0F8C version %d ->>6 uleshort =1000 with fast compression ->>6 uleshort =2000 with normal compression ->>6 uleshort =3000 with high compression ->>6 uleshort =4000 with extra high compression ->>6 uleshort =5000 with insane compression ->>10 uleshort =1 \b, mono ->>10 uleshort =2 \b, stereo ->>12 ulelong x \b, sample rate %d - -# adlib sound files -# From Gürkan Sengün <gurkan@linuks.mine.nu>, http://www.linuks.mine.nu -0 string RAWADATA RdosPlay RAW - -1068 string RoR AMUSIC Adlib Tracker - -0 string JCH EdLib - -0 string mpu401tr MPU-401 Trakker - -0 string SAdT Surprise! Adlib Tracker ->4 byte x Version %d - -0 string XAD! eXotic ADlib - -0 string ofTAZ! eXtra Simple Music - -# Spectrum 128 tunes (.ay files). -# From: Emanuel Haupt <ehaupt@critical.ch> -0 string ZXAYEMUL Spectrum 128 tune - -0 string \0BONK BONK, -#>5 byte x version %d ->14 byte x %d channel(s), ->15 byte =1 lossless, ->15 byte =0 lossy, ->16 byte x mid-side - -384 string LockStream LockStream Embedded file (mostly MP3 on old Nokia phones) - -# format VQF (proprietary codec for sound) -# some infos on the header file available at : -# http://www.twinvq.org/english/technology_format.html -0 string TWIN97012000 VQF data ->27 short 0 \b, Mono ->27 short 1 \b, Stereo ->31 short >0 \b, %d kbit/s ->35 short >0 \b, %d kHz - -# Nelson A. de Oliveira (naoliv@gmail.com) -# .eqf -0 string Winamp\ EQ\ library\ file %s -# it will match only versions like v<digit>.<digit> -# Since I saw only eqf files with version v1.1 I think that it's OK ->23 string x \b%.4s -# .preset -0 string [Equalizer\ preset] XMMS equalizer preset -# .m3u -0 search/1 #EXTM3U M3U playlist text -# .pls -0 search/1 [playlist] PLS playlist text -# licq.conf -1 string [licq] LICQ configuration file - -# Atari ST audio files by Dirk Jagdmann <doj@cubic.org> -0 string ICE! SNDH Atari ST music -0 string SC68\ Music-file\ /\ (c)\ (BeN)jami sc68 Atari ST music - -# musepak support From: "Jiri Pejchal" <jiri.pejchal@gmail.com> -0 string MP+ Musepack audio ->3 byte 255 \b, SV pre8 ->3 byte&0xF 0x6 \b, SV 6 ->3 byte&0xF 0x8 \b, SV 8 ->3 byte&0xF 0x7 \b, SV 7 ->>3 byte&0xF0 0x0 \b.0 ->>3 byte&0xF0 0x10 \b.1 ->>3 byte&0xF0 240 \b.15 ->>10 byte&0xF0 0x0 \b, no profile ->>10 byte&0xF0 0x10 \b, profile 'Unstable/Experimental' ->>10 byte&0xF0 0x50 \b, quality 0 ->>10 byte&0xF0 0x60 \b, quality 1 ->>10 byte&0xF0 0x70 \b, quality 2 (Telephone) ->>10 byte&0xF0 0x80 \b, quality 3 (Thumb) ->>10 byte&0xF0 0x90 \b, quality 4 (Radio) ->>10 byte&0xF0 0xA0 \b, quality 5 (Standard) ->>10 byte&0xF0 0xB0 \b, quality 6 (Xtreme) ->>10 byte&0xF0 0xC0 \b, quality 7 (Insane) ->>10 byte&0xF0 0xD0 \b, quality 8 (BrainDead) ->>10 byte&0xF0 0xE0 \b, quality 9 ->>10 byte&0xF0 0xF0 \b, quality 10 ->>27 byte 0x0 \b, Buschmann 1.7.0-9, Klemm 0.90-1.05 ->>27 byte 102 \b, Beta 1.02 ->>27 byte 104 \b, Beta 1.04 ->>27 byte 105 \b, Alpha 1.05 ->>27 byte 106 \b, Beta 1.06 ->>27 byte 110 \b, Release 1.1 ->>27 byte 111 \b, Alpha 1.11 ->>27 byte 112 \b, Beta 1.12 ->>27 byte 113 \b, Alpha 1.13 ->>27 byte 114 \b, Beta 1.14 ->>27 byte 115 \b, Alpha 1.15 - -# IMY -# from http://filext.com/detaillist.php?extdetail=IMY -# http://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm -# http://download.ncl.ie/doc/api/ie/ncl/media/music/IMelody.html -# http://www.wx800.com/msg/download/irda/iMelody.pdf -0 string BEGIN:IMELODY iMelody Ringtone Format - -# From: "Mateus Caruccio" <mateus@caruccio.com> -# guitar pro v3,4,5 from http://filext.com/file-extension/gp3 -0 string \030FICHIER\ GUITAR\ PRO\ v3. Guitar Pro Ver. 3 Tablature - -# From: "Leslie P. Polzer" <leslie.polzer@gmx.net> -60 string SONG SoundFX Module sound file - -# Type: Adaptive Multi-Rate Codec -# URL: http://filext.com/detaillist.php?extdetail=AMR -# From: Russell Coker <russell@coker.com.au> -0 string #!AMR Adaptive Multi-Rate Codec (GSM telephony) - -# Type: SuperCollider 3 Synth Definition File Format -# From: Mario Lang <mlang@debian.org> -0 string SCgf SuperCollider3 Synth Definition file, ->4 belong x version %d -#---------------------------------------------------------------- -# basis: file(1) magic for BBx/Pro5-files -# Oliver Dammer <dammer@olida.de> 2005/11/07 -# http://www.basis.com business-basic-files. -# -0 string \074\074bbx\076\076 BBx ->7 string \000 indexed file ->7 string \001 serial file ->7 string \002 keyed file ->>13 short 0 (sort) ->7 string \004 program ->>18 byte x (LEVEL %d) ->>>23 string >\000 psaved ->7 string \006 mkeyed file ->>13 short 0 (sort) ->>8 string \000 (mkey) -#------------------------------------------------------------------------------ -# bFLT: file(1) magic for BFLT uclinux binary files -# -# From Philippe De Muyter <phdm@macqel.be> -# -0 string bFLT BFLT executable ->4 belong x - version %ld ->4 belong 4 ->>36 belong&0x1 0x1 ram ->>36 belong&0x2 0x2 gotpic ->>36 belong&0x4 0x4 gzip ->>36 belong&0x8 0x8 gzdata -#------------------------------------------------------------------------------ -# blender: file(1) magic for Blender 3D related files -# -# Native format rule v1.2. For questions use the developers list -# http://lists.blender.org/mailman/listinfo/bf-committers -# GLOB chunk was moved near start and provides subversion info since 2.42 - -0 string =BLENDER Blender3D, ->7 string =_ saved as 32-bits ->>8 string =v little endian ->>>9 byte x with version %c. ->>>10 byte x \b%c ->>>11 byte x \b%c ->>>0x40 string =GLOB \b. ->>>>0x58 leshort x \b%.4d ->>8 string =V big endian ->>>9 byte x with version %c. ->>>10 byte x \b%c ->>>11 byte x \b%c ->>>0x40 string =GLOB \b. ->>>>0x58 beshort x \b%.4d ->7 string =- saved as 64-bits ->>8 string =v little endian ->>9 byte x with version %c. ->>10 byte x \b%c ->>11 byte x \b%c ->>0x44 string =GLOB \b. ->>>0x60 leshort x \b%.4d ->>8 string =V big endian ->>>9 byte x with version %c. ->>>10 byte x \b%c ->>>11 byte x \b%c ->>>0x44 string =GLOB \b. ->>>>0x60 beshort x \b%.4d - -# Scripts that run in the embeded Python interpreter -0 string #!BPY Blender3D BPython script - -#------------------------------------------------------------------------------ -# blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine -# -# Note that this 0407 conflicts with several other a.out formats... -# -# XXX - should this be redone with "be" and "le", so that it works on -# little-endian machines as well? If so, what's the deal with -# "VAX-order" and "VAX-order2"? -# -#0 long 0407 68K Blit (standalone) executable -#0 short 0407 VAX-order2 68K Blit (standalone) executable -0 short 03401 VAX-order 68K Blit (standalone) executable -0 long 0406 68k Blit mpx/mux executable -0 short 0406 VAX-order2 68k Blit mpx/mux executable -0 short 03001 VAX-order 68k Blit mpx/mux executable -# Need more values for WE32 DMD executables. -# Note that 0520 is the same as COFF -#0 short 0520 tty630 layers executable -# -# i80960 b.out objects and archives -# -0 long 0x10d i960 b.out relocatable object ->16 long >0 not stripped -# -# b.out archive (hp-rt on i960) -0 string =!<bout> b.out archive ->8 string __.SYMDEF random library -#------------------------------------------------------------------------------ -# bsdi: file(1) magic for BSD/OS (from BSDI) objects -# - -0 lelong 0314 386 compact demand paged pure executable ->16 lelong >0 not stripped ->32 byte 0x6a (uses shared libs) - -0 lelong 0407 386 executable ->16 lelong >0 not stripped ->32 byte 0x6a (uses shared libs) - -0 lelong 0410 386 pure executable ->16 lelong >0 not stripped ->32 byte 0x6a (uses shared libs) - -0 lelong 0413 386 demand paged pure executable ->16 lelong >0 not stripped ->32 byte 0x6a (uses shared libs) - -# same as in SunOS 4.x, except for static shared libraries -0 belong&077777777 0600413 sparc demand paged ->0 byte &0x80 ->>20 belong <4096 shared library ->>20 belong =4096 dynamically linked executable ->>20 belong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped ->36 belong 0xb4100001 (uses shared libs) - -0 belong&077777777 0600410 sparc pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped ->36 belong 0xb4100001 (uses shared libs) - -0 belong&077777777 0600407 sparc ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped ->36 belong 0xb4100001 (uses shared libs) -#------------------------------------------------------------------------------ -# BTSnoop: file(1) magic for BTSnoop files -# -# From <marcel@holtmann.org> -0 string btsnoop\0 BTSnoop ->8 belong x version %d, ->12 belong 1001 Unencapsulated HCI ->12 belong 1002 HCI UART (H4) ->12 belong 1003 HCI BCSP ->12 belong 1004 HCI Serial (H5) ->>12 belong x type %d -#------------------------------------------------------------------------------ -# c-lang: file(1) magic for C programs (or REXX) -# - -# XPM icons (Greg Roelofs, newt@uchicago.edu) -# if you uncomment "/*" for C/REXX below, also uncomment this entry -#0 string /*\ XPM\ */ X pixmap image data -#!:mime image/x-xpmi - -# 3DS (3d Studio files) Conflicts with diff output 0x3d '=' -#16 beshort 0x3d3d image/x-3ds - -# this first will upset you if you're a PL/1 shop... -# in which case rm it; ascmagic will catch real C programs -#0 search/1 /* C or REXX program text -#0 search/1 // C++ program text - -# From: Mikhail Teterin <mi@aldan.algebra.com> -0 string cscope cscope reference data ->7 string x version %.2s -# We skip the path here, because it is often long (so file will -# truncate it) and mostly redundant. -# The inverted index functionality was added some time betwen -# versions 11 and 15, so look for -q if version is above 14: ->7 string >14 ->>10 search/100 \ -q\ with inverted index ->10 search/100 \ -c\ text (non-compressed) -#------------------------------------------------------------------------------ -# c64: file(1) magic for various commodore 64 related files -# -# From: Dirk Jagdmann <doj@cubic.org> - -0x16500 belong 0x12014100 D64 Image -0x16500 belong 0x12014180 D71 Image -0x61800 belong 0x28034400 D81 Image -0 string C64\40CARTRIDGE CCS C64 Emultar Cartridge Image -0 belong 0x43154164 X64 Image - -0 string GCR-1541 GCR Image ->8 byte x version: %i ->9 byte x tracks: %i - -9 string PSUR ARC archive (c64) -2 string -LH1- LHA archive (c64) - -0 string C64File PC64 Emulator file ->8 string >\0 "%s" -0 string C64Image PC64 Freezer Image - -0 beshort 0x38CD C64 PCLink Image -0 string CBM\144\0\0 Power 64 C64 Emulator Snapshot - -0 belong 0xFF424CFF WRAptor packer (c64) - -0 string C64S\x20tape\x20file T64 tape Image ->32 leshort x Version:0x%x ->36 leshort !0 Entries:%i ->40 string x Name:%.24s - -0 string C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image ->32 leshort x Version:0x%x ->36 leshort !0 Entries:%i ->40 string x Name:%.24s - -0 string C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image ->32 leshort x Version:0x%x ->36 leshort !0 Entries:%i ->40 string x Name:%.24s - -#------------------------------------------------------------------------------ -# autocad: file(1) magic for cad files -# - -# AutoCAD DWG versions R13/R14 (www.autodesk.com) -# Written December 01, 2003 by Lester Hightower -# Based on the DWG File Format Specifications at http://www.opendwg.org/ -0 string \101\103\061\060\061 AutoCAD ->5 string \062\000\000\000\000 DWG ver. R13 ->5 string \064\000\000\000\000 DWG ver. R14 - -# Microstation DGN/CIT Files (www.bentley.com) -# Last updated July 29, 2005 by Lester Hightower -# DGN is the default file extension of Microstation/Intergraph CAD files. -# CIT is the proprietary raster format (similar to TIFF) used to attach -# raster underlays to Microstation DGN (vector) drawings. -# -# http://www.wotsit.org/search.asp -# http://filext.com/detaillist.php?extdetail=DGN -# http://filext.com/detaillist.php?extdetail=CIT -# -# http://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2 -# 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928 -# http://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682 -# 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F -0 string \010\011\376 Microstation ->3 string \002 ->>30 string \026\105 DGNFile ->>30 string \034\105 DGNFile ->>30 string \073\107 DGNFile ->>30 string \073\110 DGNFile ->>30 string \106\107 DGNFile ->>30 string \110\103 DGNFile ->>30 string \120\104 DGNFile ->>30 string \172\104 DGNFile ->>30 string \172\105 DGNFile ->>30 string \172\106 DGNFile ->>30 string \234\106 DGNFile ->>30 string \273\105 DGNFile ->>30 string \306\106 DGNFile ->>30 string \310\104 DGNFile ->>30 string \341\104 DGNFile ->>30 string \372\103 DGNFile ->>30 string \372\104 DGNFile ->>30 string \372\106 DGNFile ->>30 string \376\103 DGNFile ->4 string \030\000\000 CITFile ->4 string \030\000\003 CITFile - -# AutoCad, from Nahuel Greco -# AutoCAD DWG versions R12/R13/R14 (www.autodesk.com) -0 string AC1012 AutoCad (release 12) -0 string AC1013 AutoCad (release 13) -0 string AC1014 AutoCad (release 14) - -# CAD: file(1) magic for computer aided design files -# Phillip Griffith <phillip dot griffith at gmail dot com> -# AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications. -# -0 belong 0x08051700 Bentley/Intergraph MicroStation DGN cell library -0 belong 0x0809fe02 Bentley/Intergraph MicroStation DGN vector CAD -0 belong 0xc809fe02 Bentley/Intergraph MicroStation DGN vector CAD -0 beshort 0x0809 Bentley/Intergraph MicroStation ->0x02 byte 0xfe ->>0x04 beshort 0x1800 CIT raster CAD -0 string AC1012 AutoDesk AutoCAD R13 -0 string AC1014 AutoDesk AutoCAD R14 -0 string AC1015 AutoDesk AutoCAD R2000 -#------------------------------------------------------------------------------ -# Cafe Babes unite! -# -# Since Java bytecode and Mach-O fat-files have the same magic number, the test -# must be performed in the same "magic" sequence to get both right. The long -# at offset 4 in a mach-O fat file tells the number of architectures; the short at -# offset 4 in a Java bytecode file is the JVM minor version and the -# short at offset 6 is the JVM major version. Since there are only -# only 18 labeled Mach-O architectures at current, and the first released -# Java class format was version 43.0, we can safely choose any number -# between 18 and 39 to test the number of architectures against -# (and use as a hack). Let's not use 18, because the Mach-O people -# might add another one or two as time goes by... -# -0 belong 0xcafebabe -!:mime application/x-java-applet ->4 belong >30 compiled Java class data, ->>6 beshort x version %d. ->>4 beshort x \b%d -# Which is which? -#>>4 belong 0x032d (Java 1.0) -#>>4 belong 0x032d (Java 1.1) ->>4 belong 0x002e (Java 1.2) ->>4 belong 0x002f (Java 1.3) ->>4 belong 0x0030 (Java 1.4) ->>4 belong 0x0031 (Java 1.5) ->>4 belong 0x0032 (Java 1.6) - - -0 belong 0xcafebabe ->4 belong 1 Mach-O fat file with 1 architecture ->4 belong >1 ->>4 belong <20 Mach-O fat file with %ld architectures - -0 belong 0xcafed00d JAR compressed with pack200, ->>5 byte x version %d. ->>4 byte x \b%d -!:mime application/x-java-pack200 -#------------------------------------------------------------------------------ -# CDDB: file(1) magic for CDDB(tm) format CD text data files -# -# From <steve@gracenote.com> -# -# This is the /etc/magic entry to decode datafiles as used by -# CDDB-enabled CD player applications. -# - -0 search/1/b #\040xmcd CDDB(tm) format CD text data - -#------------------------------------------------------------------------------ -# chord: file(1) magic for Chord music sheet typesetting utility input files -# -# From Philippe De Muyter <phdm@macqel.be> -# File format is actually free, but many distributed files begin with `{title' -# -0 string {title Chord text file - -# Type: PowerTab file format -# URL: http://www.power-tab.net/ -# From: Jelmer Vernooij <jelmer@samba.org> -0 string ptab\003\000 Power-Tab v3 Tablature File -0 string ptab\004\000 Power-Tab v4 Tablature File -#------------------------------------------------------------------------------ -# cisco: file(1) magic for cisco Systems routers -# -# Most cisco file-formats are covered by the generic elf code -# -# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha. -0 belong&0xffffff00 0x85011400 cisco IOS microcode ->7 string >\0 for '%s' -0 belong&0xffffff00 0x8501cb00 cisco IOS experimental microcode ->7 string >\0 for '%s' -#------------------------------------------------------------------------------ -# citrus locale declaration -# - -0 string RuneCT Citrus locale declaration for LC_CTYPE - - -#------------------------------------------------------------------------------ -# clarion: file(1) magic for # Clarion Personal/Professional Developer -# (v2 and above) -# From: Julien Blache <jb@jblache.org> - -# Database files -# signature -0 leshort 0x3343 Clarion Developer (v2 and above) data file -# attributes ->2 leshort &0x0001 \b, locked ->2 leshort &0x0004 \b, encrypted ->2 leshort &0x0008 \b, memo file exists ->2 leshort &0x0010 \b, compressed ->2 leshort &0x0040 \b, read only -# number of records ->5 lelong x \b, %ld records - -# Memo files -0 leshort 0x334d Clarion Developer (v2 and above) memo data - -# Key/Index files -# No magic? :( - -# Help files -0 leshort 0x49e0 Clarion Developer (v2 and above) help data - -#------------------------------------------------------------------------------ -# claris: file(1) magic for claris -# "H. Nanosecond" <aldomel@ix.netcom.com> -# Claris Works a word processor, etc. -# Version 3.0 - -# .pct claris works clip art files -#0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 -#* -#0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000 -#null to byte 1000 octal -514 string \377\377\377\377\000 Claris clip art? ->0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes. -514 string \377\377\377\377\001 Claris clip art? ->0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes. - -# Claris works files -# .cwk -0 string \002\000\210\003\102\117\102\117\000\001\206 Claris works document -# .plt -0 string \020\341\000\000\010\010 Claris Works pallete files .plt - -# .msp a dictionary file I am not sure about this I have only one .msp file -0 string \002\271\262\000\040\002\000\164 Claris works dictionary - -# .usp are user dictionary bits -# I am not sure about a magic header: -#0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151 -# soh S p f 8 U D sp ^ S cr nl p o d i -#0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043 -# a t r i s t sp ^ S cr nl d i v sp # - -# .mth Thesaurus -# starts with \0 but no magic header - -# .chy Hyphenation file -# I am not sure: 000 210 034 000 000 - -# other claris files -#./windows/claris/useng.ndx: data -#./windows/claris/xtndtran.l32: data -#./windows/claris/xtndtran.lst: data -#./windows/claris/clworks.lbl: data -#./windows/claris/clworks.prf: data -#./windows/claris/userd.spl: data - -#------------------------------------------------------------------------------ -# clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper. -# -# XXX - what byte order does the Clipper use? -# -# XXX - what's the "!" stuff: -# -# >18 short !074000,000000 C1 R1 -# >18 short !074000,004000 C2 R1 -# >18 short !074000,010000 C3 R1 -# >18 short !074000,074000 TEST -# -# I shall assume it's ANDing the field with the first value and -# comparing it with the second, and rewrite it as: -# -# >18 short&074000 000000 C1 R1 -# >18 short&074000 004000 C2 R1 -# >18 short&074000 010000 C3 R1 -# >18 short&074000 074000 TEST -# -# as SVR3.1's "file" doesn't support anything of the "!074000,000000" -# sort, nor does SunOS 4.x, so either it's something Intergraph added -# in CLIX, or something AT&T added in SVR3.2 or later, or something -# somebody else thought was a good idea; it's not documented in the -# man page for this version of "magic", nor does it appear to be -# implemented (at least not after I blew off the bogus code to turn -# old-style "&"s into new-style "&"s, which just didn't work at all). -# -0 short 0575 CLIPPER COFF executable (VAX #) ->20 short 0407 (impure) ->20 short 0410 (5.2 compatible) ->20 short 0411 (pure) ->20 short 0413 (demand paged) ->20 short 0443 (target shared library) ->12 long >0 not stripped ->22 short >0 - version %ld -0 short 0577 CLIPPER COFF executable ->18 short&074000 000000 C1 R1 ->18 short&074000 004000 C2 R1 ->18 short&074000 010000 C3 R1 ->18 short&074000 074000 TEST ->20 short 0407 (impure) ->20 short 0410 (pure) ->20 short 0411 (separate I&D) ->20 short 0413 (paged) ->20 short 0443 (target shared library) ->12 long >0 not stripped ->22 short >0 - version %ld ->48 long&01 01 alignment trap enabled ->52 byte 1 -Ctnc ->52 byte 2 -Ctsw ->52 byte 3 -Ctpw ->52 byte 4 -Ctcb ->53 byte 1 -Cdnc ->53 byte 2 -Cdsw ->53 byte 3 -Cdpw ->53 byte 4 -Cdcb ->54 byte 1 -Csnc ->54 byte 2 -Cssw ->54 byte 3 -Cspw ->54 byte 4 -Cscb -4 string pipe CLIPPER instruction trace -4 string prof CLIPPER instruction profile - -#------------------------------------------------------------------------------ -# commands: file(1) magic for various shells and interpreters -# -#0 string : shell archive or script for antique kernel text -0 string/b #!\ /bin/sh POSIX shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /bin/csh C shell script text executable -!:mime text/x-shellscript -# korn shell magic, sent by George Wu, gwu@clyde.att.com -0 string/b #!\ /bin/ksh Korn shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /bin/tcsh Tenex C shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/bin/tcsh Tenex C shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/tcsh Tenex C shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/tcsh Tenex C shell script text executable -!:mime text/x-shellscript - -# -# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson) -0 string/b #!\ /bin/zsh Paul Falstad's zsh script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/bin/zsh Paul Falstad's zsh script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/ash Neil Brown's ash script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/ae Neil Brown's ae script text executable -!:mime text/x-shellscript -0 string/b #!\ /bin/nawk new awk script text executable -!:mime text/x-nawk -0 string/b #!\ /usr/bin/nawk new awk script text executable -!:mime text/x-nawk -0 string/b #!\ /usr/local/bin/nawk new awk script text executable -!:mime text/x-nawk -0 string/b #!\ /bin/gawk GNU awk script text executable -!:mime text/x-gawk -0 string/b #!\ /usr/bin/gawk GNU awk script text executable -!:mime text/x-gawk -0 string/b #!\ /usr/local/bin/gawk GNU awk script text executable -!:mime text/x-gawk -# -0 string/b #!\ /bin/awk awk script text executable -!:mime text/x-awk -0 string/b #!\ /usr/bin/awk awk script text executable -!:mime text/x-awk -# update to distinguish from *.vcf files -# this is broken because postscript has /EBEGIN{ for example. -#0 search/Bb BEGIN { awk script text -0 regex =^\\s*BEGIN\\s*[{] awk script text - -# AT&T Bell Labs' Plan 9 shell -0 string/b #!\ /bin/rc Plan 9 rc shell script text executable - -# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de) -0 string/b #!\ /bin/bash Bourne-Again shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/bin/bash Bourne-Again shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/bash Bourne-Again shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/bash Bourne-Again shell script text executable -!:mime text/x-shellscript - -# using env -0 string #!/usr/bin/env a ->15 string >\0 %s script text executable -0 string #!\ /usr/bin/env a ->16 string >\0 %s script text executable - -# PHP scripts -# Ulf Harnhammar <ulfh@update.uu.se> -0 search/1/c =<?php PHP script text -!:mime text/x-php -0 search/1 =<?\n PHP script text -!:mime text/x-php -0 search/1 =<?\r PHP script text -!:mime text/x-php -0 search/1/b #!\ /usr/local/bin/php PHP script text executable -!:mime text/x-php -0 search/1/b #!\ /usr/bin/php PHP script text executable -!:mime text/x-php - -0 string Zend\x00 PHP script Zend Optimizer data - -0 string $! DCL command file - -# Type: Pdmenu -# URL: http://packages.debian.org/pdmenu -# From: Edward Betts <edward@debian.org> -0 string #!/usr/bin/pdmenu Pdmenu configuration file text - -#---------------------------------------------------------------------------- -# communication - -# TTCN is the Tree and Tabular Combined Notation described in ISO 9646-3. -# It is used for conformance testing of communication protocols. -# Added by W. Borgert <debacle@debian.org>. -0 string $Suite TTCN Abstract Test Suite ->&1 string $SuiteId ->>&1 string >\n %s ->&2 string $SuiteId ->>&1 string >\n %s ->&3 string $SuiteId ->>&1 string >\n %s - -# MSC (message sequence charts) are a formal description technique, -# described in ITU-T Z.120, mainly used for communication protocols. -# Added by W. Borgert <debacle@debian.org>. -0 string mscdocument Message Sequence Chart (document) -0 string msc Message Sequence Chart (chart) -0 string submsc Message Sequence Chart (subchart) - -#------------------------------------------------------------------------------ -# compress: file(1) magic for pure-compression formats (no archives) -# -# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc. -# -# Formats for various forms of compressed data -# Formats for "compress" proper have been moved into "compress.c", -# because it tries to uncompress it to figure out what's inside. - -# standard unix compress -0 string \037\235 compress'd data -!:mime application/x-compress -!:apple LZIVZIVU ->2 byte&0x80 >0 block compressed ->2 byte&0x1f x %d bits - -# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver) -# Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002 -# * Original filename is only at offset 10 if "extra field" absent -# * Produce shorter output - notably, only report compression methods -# other than 8 ("deflate", the only method defined in RFC 1952). -0 string \037\213 gzip compressed data -!:mime application/x-gzip ->2 byte <8 \b, reserved method ->2 byte >8 \b, unknown method ->3 byte &0x01 \b, ASCII ->3 byte &0x02 \b, has CRC ->3 byte &0x04 \b, extra field ->3 byte&0xC =0x08 ->>10 string x \b, was "%s" ->3 byte &0x10 \b, has comment ->9 byte =0x00 \b, from FAT filesystem (MS-DOS, OS/2, NT) ->9 byte =0x01 \b, from Amiga ->9 byte =0x02 \b, from VMS ->9 byte =0x03 \b, from Unix ->9 byte =0x04 \b, from VM/CMS ->9 byte =0x05 \b, from Atari ->9 byte =0x06 \b, from HPFS filesystem (OS/2, NT) ->9 byte =0x07 \b, from MacOS ->9 byte =0x08 \b, from Z-System ->9 byte =0x09 \b, from CP/M ->9 byte =0x0A \b, from TOPS/20 ->9 byte =0x0B \b, from NTFS filesystem (NT) ->9 byte =0x0C \b, from QDOS ->9 byte =0x0D \b, from Acorn RISCOS ->3 byte &0x10 \b, comment ->3 byte &0x20 \b, encrypted ->4 ledate >0 \b, last modified: %s ->8 byte 2 \b, max compression ->8 byte 4 \b, max speed - -# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis -0 string \037\036 packed data -!:mime application/octet-stream ->2 belong >1 \b, %d characters originally ->2 belong =1 \b, %d character originally -# -# This magic number is byte-order-independent. -0 short 0x1f1f old packed data -!:mime application/octet-stream - -# XXX - why *two* entries for "compacted data", one of which is -# byte-order independent, and one of which is byte-order dependent? -# -0 short 0x1fff compacted data -!:mime application/octet-stream -# This string is valid for SunOS (BE) and a matching "short" is listed -# in the Ultrix (LE) magic file. -0 string \377\037 compacted data -!:mime application/octet-stream -0 short 0145405 huf output -!:mime application/octet-stream - -# bzip2 -0 string BZh bzip2 compressed data -!:mime application/x-bzip2 ->3 byte >47 \b, block size = %c00k - -# lzip -0 string LZIP lzip compressed data -!:mime application/x-lzip ->4 byte x \b, version: %d - -# squeeze and crunch -# Michael Haardt <michael@cantor.informatik.rwth-aachen.de> -0 beshort 0x76FF squeezed data, ->4 string x original name %s -0 beshort 0x76FE crunched data, ->2 string x original name %s -0 beshort 0x76FD LZH compressed data, ->2 string x original name %s - -# Freeze -0 string \037\237 frozen file 2.1 -0 string \037\236 frozen file 1.0 (or gzip 0.5) - -# SCO compress -H (LZH) -0 string \037\240 SCO compress -H (LZH) data - -# European GSM 06.10 is a provisional standard for full-rate speech -# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse -# excitation/long term prediction) coding at 13 kbit/s. -# -# There's only a magic nibble (4 bits); that nibble repeats every 33 -# bytes. This isn't suited for use, but maybe we can use it someday. -# -# This will cause very short GSM files to be declared as data and -# mismatches to be declared as data too! -#0 byte&0xF0 0xd0 data -#>33 byte&0xF0 0xd0 -#>66 byte&0xF0 0xd0 -#>99 byte&0xF0 0xd0 -#>132 byte&0xF0 0xd0 GSM 06.10 compressed audio - -# bzip a block-sorting file compressor -# by Julian Seward <sewardj@cs.man.ac.uk> and others -# -#0 string BZ bzip compressed data -#>2 byte x \b, version: %c -#>3 string =1 \b, compression block size 100k -#>3 string =2 \b, compression block size 200k -#>3 string =3 \b, compression block size 300k -#>3 string =4 \b, compression block size 400k -#>3 string =5 \b, compression block size 500k -#>3 string =6 \b, compression block size 600k -#>3 string =7 \b, compression block size 700k -#>3 string =8 \b, compression block size 800k -#>3 string =9 \b, compression block size 900k - -# lzop from <markus.oberhumer@jk.uni-linz.ac.at> -0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data ->9 beshort <0x0940 ->>9 byte&0xf0 =0x00 - version 0. ->>9 beshort&0x0fff x \b%03x, ->>13 byte 1 LZO1X-1, ->>13 byte 2 LZO1X-1(15), ->>13 byte 3 LZO1X-999, -## >>22 bedate >0 last modified: %s, ->>14 byte =0x00 os: MS-DOS ->>14 byte =0x01 os: Amiga ->>14 byte =0x02 os: VMS ->>14 byte =0x03 os: Unix ->>14 byte =0x05 os: Atari ->>14 byte =0x06 os: OS/2 ->>14 byte =0x07 os: MacOS ->>14 byte =0x0A os: Tops/20 ->>14 byte =0x0B os: WinNT ->>14 byte =0x0E os: Win32 ->9 beshort >0x0939 ->>9 byte&0xf0 =0x00 - version 0. ->>9 byte&0xf0 =0x10 - version 1. ->>9 byte&0xf0 =0x20 - version 2. ->>9 beshort&0x0fff x \b%03x, ->>15 byte 1 LZO1X-1, ->>15 byte 2 LZO1X-1(15), ->>15 byte 3 LZO1X-999, -## >>25 bedate >0 last modified: %s, ->>17 byte =0x00 os: MS-DOS ->>17 byte =0x01 os: Amiga ->>17 byte =0x02 os: VMS ->>17 byte =0x03 os: Unix ->>17 byte =0x05 os: Atari ->>17 byte =0x06 os: OS/2 ->>17 byte =0x07 os: MacOS ->>17 byte =0x0A os: Tops/20 ->>17 byte =0x0B os: WinNT ->>17 byte =0x0E os: Win32 - -# 4.3BSD-Quasijarus Strong Compression -# http://minnie.tuhs.org/Quasijarus/compress.html -0 string \037\241 Quasijarus strong compressed data - -# From: Cory Dikkers <cdikkers@swbell.net> -0 string XPKF Amiga xpkf.library compressed data -0 string PP11 Power Packer 1.1 compressed data -0 string PP20 Power Packer 2.0 compressed data, ->4 belong 0x09090909 fast compression ->4 belong 0x090A0A0A mediocre compression ->4 belong 0x090A0B0B good compression ->4 belong 0x090A0C0C very good compression ->4 belong 0x090A0C0D best compression - -# 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at) -# http://www.7-zip.org or DOC/7zFormat.txt -# -0 string 7z\274\257\047\034 7-zip archive data, ->6 byte x version %d ->7 byte x \b.%d - -# Type: LZMA -# URL: http://www.7-zip.org/sdk.html -# From: Robert Millan <rmh@aybabtu.com> and Reuben Thomas <rrt@sc3d.org> -# Commented out because apparently not reliable (according to Debian -# bug #364260) -#0 string ]\000\000\200\000 LZMA compressed data - -# http://tukaani.org/xz/xz-file-format.txt -0 ustring \xFD7zXZ\x00 xz compressed data -!:mime application/x-xz - -# AFX compressed files (Wolfram Kleff) -2 string -afx- AFX compressed file data - -# Supplementary magic data for the file(1) command to support -# rzip(1). The format is described in magic(5). -# -# Copyright (C) 2003 by Andrew Tridgell. You may do whatever you want with -# this file. -# -0 string RZIP rzip compressed data ->4 byte x - version %d ->5 byte x \b.%d ->6 belong x (%d bytes) - -# Type: XZ -# URL: http://tukaani.org/xz/ -0 string \xfd\x37\x7a\x58\x5a\x00 XZ compressed data -!:mime application/x-xz -#------------------------------------------------------------------------------ -# Console game magic -# Toby Deshane <hac@shoelace.digivill.net> -# ines: file(1) magic for Marat's iNES Nintendo Entertainment System -# ROM dump format - -0 string NES\032 iNES ROM dump, ->4 byte x %dx16k PRG ->5 byte x \b, %dx8k CHR ->6 byte&0x01 =0x1 \b, [Vert.] ->6 byte&0x01 =0x0 \b, [Horiz.] ->6 byte&0x02 =0x2 \b, [SRAM] ->6 byte&0x04 =0x4 \b, [Trainer] ->6 byte&0x04 =0x8 \b, [4-Scr] - -#------------------------------------------------------------------------------ -# gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format -# -0x104 belong 0xCEED6666 Gameboy ROM: ->0x134 string >\0 "%.16s" ->0x146 byte 0x03 \b,[SGB] ->0x147 byte 0x00 \b, [ROM ONLY] ->0x147 byte 0x01 \b, [ROM+MBC1] ->0x147 byte 0x02 \b, [ROM+MBC1+RAM] ->0x147 byte 0x03 \b, [ROM+MBC1+RAM+BATT] ->0x147 byte 0x05 \b, [ROM+MBC2] ->0x147 byte 0x06 \b, [ROM+MBC2+BATTERY] ->0x147 byte 0x08 \b, [ROM+RAM] ->0x147 byte 0x09 \b, [ROM+RAM+BATTERY] ->0x147 byte 0x0B \b, [ROM+MMM01] ->0x147 byte 0x0C \b, [ROM+MMM01+SRAM] ->0x147 byte 0x0D \b, [ROM+MMM01+SRAM+BATT] ->0x147 byte 0x0F \b, [ROM+MBC3+TIMER+BATT] ->0x147 byte 0x10 \b, [ROM+MBC3+TIMER+RAM+BATT] ->0x147 byte 0x11 \b, [ROM+MBC3] ->0x147 byte 0x12 \b, [ROM+MBC3+RAM] ->0x147 byte 0x13 \b, [ROM+MBC3+RAM+BATT] ->0x147 byte 0x19 \b, [ROM+MBC5] ->0x147 byte 0x1A \b, [ROM+MBC5+RAM] ->0x147 byte 0x1B \b, [ROM+MBC5+RAM+BATT] ->0x147 byte 0x1C \b, [ROM+MBC5+RUMBLE] ->0x147 byte 0x1D \b, [ROM+MBC5+RUMBLE+SRAM] ->0x147 byte 0x1E \b, [ROM+MBC5+RUMBLE+SRAM+BATT] ->0x147 byte 0x1F \b, [Pocket Camera] ->0x147 byte 0xFD \b, [Bandai TAMA5] ->0x147 byte 0xFE \b, [Hudson HuC-3] ->0x147 byte 0xFF \b, [Hudson HuC-1] - ->0x148 byte 0 \b, ROM: 256Kbit ->0x148 byte 1 \b, ROM: 512Kbit ->0x148 byte 2 \b, ROM: 1Mbit ->0x148 byte 3 \b, ROM: 2Mbit ->0x148 byte 4 \b, ROM: 4Mbit ->0x148 byte 5 \b, ROM: 8Mbit ->0x148 byte 6 \b, ROM: 16Mbit ->0x148 byte 0x52 \b, ROM: 9Mbit ->0x148 byte 0x53 \b, ROM: 10Mbit ->0x148 byte 0x54 \b, ROM: 12Mbit - ->0x149 byte 1 \b, RAM: 16Kbit ->0x149 byte 2 \b, RAM: 64Kbit ->0x149 byte 3 \b, RAM: 128Kbit ->0x149 byte 4 \b, RAM: 1Mbit - -#>0x14e long x \b, CRC: %x - -#------------------------------------------------------------------------------ -# genesis: file(1) magic for the Sega MegaDrive/Genesis raw ROM format -# -0x100 string SEGA Sega MegaDrive/Genesis raw ROM dump ->0x120 string >\0 Name: "%.16s" ->0x110 string >\0 %.16s ->0x1B0 string RA with SRAM - -#------------------------------------------------------------------------------ -# genesis: file(1) magic for the Super MegaDrive ROM dump format -# -0x280 string EAGN Super MagicDrive ROM dump ->0 byte x %dx16k blocks ->2 byte 0 \b, last in series or standalone ->2 byte >0 \b, split ROM ->8 byte 0xAA ->9 byte 0xBB - -#------------------------------------------------------------------------------ -# genesis: file(1) alternate magic for the Super MegaDrive ROM dump format -# -0x280 string EAMG Super MagicDrive ROM dump ->0 byte x %dx16k blocks ->2 byte x \b, last in series or standalone ->8 byte 0xAA ->9 byte 0xBB - -#------------------------------------------------------------------------------ -# smsgg: file(1) magic for Sega Master System and Game Gear ROM dumps -# -# Does not detect all images. Very preliminary guesswork. Need more data -# on format. -# -# FIXME: need a little more info...;P -# -#0 byte 0xF3 -#>1 byte 0xED Sega Master System/Game Gear ROM dump -#>1 byte 0x31 Sega Master System/Game Gear ROM dump -#>1 byte 0xDB Sega Master System/Game Gear ROM dump -#>1 byte 0xAF Sega Master System/Game Gear ROM dump -#>1 byte 0xC3 Sega Master System/Game Gear ROM dump - -#------------------------------------------------------------------------------ -# dreamcast: file(1) uncertain magic for the Sega Dreamcast VMU image format -# -0 belong 0x21068028 Sega Dreamcast VMU game image -0 string LCDi Dream Animator file - -#------------------------------------------------------------------------------ -# v64: file(1) uncertain magic for the V64 format N64 ROM dumps -# -0 belong 0x37804012 V64 Nintendo 64 ROM dump - -# From: "Nelson A. de Oliveira" <naoliv@gmail.com> -# Nintendo .nds -192 string \044\377\256Qi\232 Nintendo DS Game ROM Image -# Nintendo .gba -0 string \056\000\000\352$\377\256Qi Nintendo Game Boy Advance ROM Image - -#------------------------------------------------------------------------------ -# msx: file(1) magic for MSX game cartridge dumps -# Too simple - MPi -#0 beshort 0x4142 MSX game cartridge dump - -#------------------------------------------------------------------------------ -# Sony Playstation executables (Adam Sjoegren <asjo@diku.dk>) : -0 string PS-X\ EXE Sony Playstation executable -# Area: ->113 string x (%s) - -#------------------------------------------------------------------------------ -# Microsoft Xbox executables .xbe (Esa Hyytiä <ehyytia@cc.hut.fi>) -0 string XBEH XBE, Microsoft Xbox executable -# probabilistic checks whether signed or not ->0x0004 ulelong =0x0 ->>&2 ulelong =0x0 ->>>&2 ulelong =0x0 \b, not signed ->0x0004 ulelong >0 ->>&2 ulelong >0 ->>>&2 ulelong >0 \b, signed -# expect base address of 0x10000 ->0x0104 ulelong =0x10000 ->>(0x0118-0x0FF60) ulelong&0x80000007 0x80000007 \b, all regions ->>(0x0118-0x0FF60) ulelong&0x80000007 !0x80000007 ->>>(0x0118-0x0FF60) ulelong >0 (regions: ->>>>(0x0118-0x0FF60) ulelong &0x00000001 NA ->>>>(0x0118-0x0FF60) ulelong &0x00000002 Japan ->>>>(0x0118-0x0FF60) ulelong &0x00000004 Rest_of_World ->>>>(0x0118-0x0FF60) ulelong &0x80000000 Manufacturer ->>>(0x0118-0x0FF60) ulelong >0 \b) - -# -------------------------------- -# Microsoft Xbox data file formats -0 string XIP0 XIP, Microsoft Xbox data -0 string XTF0 XTF, Microsoft Xbox data - -# Atari Lynx cartridge dump (EXE/BLL header) -# From: "Stefan A. Haubenthal" <polluks@web.de> - -0 beshort 0x8008 Lynx cartridge, ->2 beshort x RAM start $%04x ->6 string BS93 - -# Opera file system that is used on the 3DO console -# From: Serge van den Boom <svdb@stack.nl> -0 string \x01ZZZZZ\x01 3DO "Opera" file system - -# From Gürkan Sengün <gurkan@linuks.mine.nu>, www.linuks.mine.nu -0 string GBS Nintendo Gameboy Music/Audio Data -12 string GameBoy\ Music\ Module Nintendo Gameboy Music Module - -# Playstations Patch Files from: From: Thomas Klausner <tk@giga.or.at> -0 string PPF30 Playstation Patch File version 3.0 ->5 byte 0 \b, PPF 1.0 patch ->5 byte 1 \b, PPF 2.0 patch ->5 byte 2 \b, PPF 3.0 patch ->>56 byte 0 \b, Imagetype BIN (any) ->>56 byte 1 \b, Imagetype GI (PrimoDVD) ->>57 byte 0 \b, Blockcheck disabled ->>57 byte 1 \b, Blockcheck enabled ->>58 byte 0 \b, Undo data not available ->>58 byte 1 \b, Undo data available ->6 string x \b, description: %s - -0 string PPF20 Playstation Patch File version 2.0 ->5 byte 0 \b, PPF 1.0 patch ->5 byte 1 \b, PPF 2.0 patch ->>56 lelong >0 \b, size of file to patch %d ->6 string x \b, description: %s - -0 string PPF10 Playstation Patch File version 1.0 ->5 byte 0 \b, Simple Encoding ->6 string x \b, description: %s - -# From: Daniel Dawson <ddawson@icehouse.net> -# SNES9x .smv "movie" file format. -0 string SMV\x1A SNES9x input recording ->0x4 lelong x \b, version %d -# version 4 is latest so far ->0x4 lelong <5 ->>0x8 ledate x \b, recorded at %s ->>0xc lelong >0 \b, rerecorded %d times ->>0x10 lelong x \b, %d frames long ->>0x14 byte >0 \b, data for controller(s): ->>>0x14 byte &0x1 #1 ->>>0x14 byte &0x2 #2 ->>>0x14 byte &0x4 #3 ->>>0x14 byte &0x8 #4 ->>>0x14 byte &0x10 #5 ->>0x15 byte ^0x1 \b, begins from snapshot ->>0x15 byte &0x1 \b, begins from reset ->>0x15 byte ^0x2 \b, NTSC standard ->>0x15 byte &0x2 \b, PAL standard ->>0x17 byte &0x1 \b, settings: -# WIP1Timing not used as of version 4 ->>>0x4 lelong <4 ->>>>0x17 byte &0x2 WIP1Timing ->>>0x17 byte &0x4 Left+Right ->>>0x17 byte &0x8 VolumeEnvX ->>>0x17 byte &0x10 FakeMute ->>>0x17 byte &0x20 SyncSound -# New flag as of version 4 ->>>0x4 lelong >3 ->>>>0x17 byte &0x80 NoCPUShutdown ->>0x4 lelong <4 ->>>0x18 lelong >0x23 ->>>>0x20 leshort !0 ->>>>>0x20 lestring16 x \b, metadata: "%s" ->>0x4 lelong >3 ->>>0x24 byte >0 \b, port 1: ->>>>0x24 byte 1 joypad ->>>>0x24 byte 2 mouse ->>>>0x24 byte 3 SuperScope ->>>>0x24 byte 4 Justifier ->>>>0x24 byte 5 multitap ->>>0x24 byte >0 \b, port 2: ->>>>0x25 byte 1 joypad ->>>>0x25 byte 2 mouse ->>>>0x25 byte 3 SuperScope ->>>>0x25 byte 4 Justifier ->>>>0x25 byte 5 multitap ->>>0x18 lelong >0x43 ->>>>0x40 leshort !0 ->>>>>0x40 lestring16 x \b, metadata: "%s" ->>0x17 byte &0x40 \b, ROM: ->>>(0x18.l-26) lelong x CRC32 0x%08x ->>>(0x18.l-23) string x "%s" - -# Type: scummVM savegame files -# From: Sven Hartge <debian@ds9.argh.org> -0 string SCVM ScummVM savegame ->12 string >\0 "%s" -#------------------------------------------------------------------------------ -# convex: file(1) magic for Convex boxes -# -# Convexes are big-endian. -# -# /*\ -# * Below are the magic numbers and tests added for Convex. -# * Added at beginning, because they are expected to be used most. -# \*/ -0 belong 0507 Convex old-style object ->16 belong >0 not stripped -0 belong 0513 Convex old-style demand paged executable ->16 belong >0 not stripped -0 belong 0515 Convex old-style pre-paged executable ->16 belong >0 not stripped -0 belong 0517 Convex old-style pre-paged, non-swapped executable ->16 belong >0 not stripped -0 belong 0x011257 Core file -# -# The following are a series of dump format magic numbers. Each one -# corresponds to a drastically different dump format. The first on is -# the original dump format on a 4.1 BSD or earlier file system. The -# second marks the change between the 4.1 file system and the 4.2 file -# system. The Third marks the changing of the block size from 1K -# to 2K to be compatible with an IDC file system. The fourth indicates -# a dump that is dependent on Convex Storage Manager, because data in -# secondary storage is not physically contained within the dump. -# The restore program uses these number to determine how the data is -# to be extracted. -# -24 belong =60011 dump format, 4.1 BSD or earlier -24 belong =60012 dump format, 4.2 or 4.3 BSD without IDC -24 belong =60013 dump format, 4.2 or 4.3 BSD (IDC compatible) -24 belong =60014 dump format, Convex Storage Manager by-reference dump -# -# what follows is a bunch of bit-mask checks on the flags field of the opthdr. -# If there is no `=' sign, assume just checking for whether the bit is set? -# -0 belong 0601 Convex SOFF ->88 belong&0x000f0000 =0x00000000 c1 ->88 belong &0x00010000 c2 ->88 belong &0x00020000 c2mp ->88 belong &0x00040000 parallel ->88 belong &0x00080000 intrinsic ->88 belong &0x00000001 demand paged ->88 belong &0x00000002 pre-paged ->88 belong &0x00000004 non-swapped ->88 belong &0x00000008 POSIX -# ->84 belong &0x80000000 executable ->84 belong &0x40000000 object ->84 belong&0x20000000 =0 not stripped ->84 belong&0x18000000 =0x00000000 native fpmode ->84 belong&0x18000000 =0x10000000 ieee fpmode ->84 belong&0x18000000 =0x18000000 undefined fpmode -# -0 belong 0605 Convex SOFF core -# -0 belong 0607 Convex SOFF checkpoint ->88 belong&0x000f0000 =0x00000000 c1 ->88 belong &0x00010000 c2 ->88 belong &0x00020000 c2mp ->88 belong &0x00040000 parallel ->88 belong &0x00080000 intrinsic ->88 belong &0x00000008 POSIX -# ->84 belong&0x18000000 =0x00000000 native fpmode ->84 belong&0x18000000 =0x10000000 ieee fpmode ->84 belong&0x18000000 =0x18000000 undefined fpmode - -#------------------------------------------------------------------------------ -# cracklib: file (1) magic for cracklib v2.7 - -0 lelong 0x70775631 Cracklib password index, little endian ->4 long >0 (%i words) ->4 long 0 ("64-bit") ->>8 long >-1 (%i words) -0 belong 0x70775631 Cracklib password index, big endian ->4 belong >-1 (%i words) -# really bellong 0x0000000070775631 -0 search/1 \0\0\0\0pwV1 Cracklib password index, big endian ("64-bit") ->12 belong >0 (%i words) -# ---------------------------------------------------------------------------- -# ctags: file (1) magic for Exuberant Ctags files -# From: Alexander Mai <mai@migdal.ikp.physik.tu-darmstadt.de> -0 search/1 =!_TAG Exuberant Ctags tag file text - -#------------------------------------------------------------------------------ -# dact: file(1) magic for DACT compressed files -# -0 long 0x444354C3 DACT compressed data ->4 byte >-1 (version %i. ->5 byte >-1 $BS%i. ->6 byte >-1 $BS%i) ->7 long >0 $BS, original size: %i bytes ->15 long >30 $BS, block size: %i bytes - -#------------------------------------------------------------------------------ -# database: file(1) magic for various databases -# -# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk) -# -# -# GDBM magic numbers -# Will be maintained as part of the GDBM distribution in the future. -# <downsj@teeny.org> -0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian -!:mime application/x-gdbm -0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian -!:mime application/x-gdbm -0 string GDBM GNU dbm 2.x database -!:mime application/x-gdbm -# -# Berkeley DB -# -# Ian Darwin's file /etc/magic files: big/little-endian version. -# -# Hash 1.85/1.86 databases store metadata in network byte order. -# Btree 1.85/1.86 databases store the metadata in host byte order. -# Hash and Btree 2.X and later databases store the metadata in host byte order. - -0 long 0x00061561 Berkeley DB -!:mime application/x-dbm ->8 belong 4321 ->>4 belong >2 1.86 ->>4 belong <3 1.85 ->>4 belong >0 (Hash, version %d, native byte-order) ->8 belong 1234 ->>4 belong >2 1.86 ->>4 belong <3 1.85 ->>4 belong >0 (Hash, version %d, little-endian) - -0 belong 0x00061561 Berkeley DB ->8 belong 4321 ->>4 belong >2 1.86 ->>4 belong <3 1.85 ->>4 belong >0 (Hash, version %d, big-endian) ->8 belong 1234 ->>4 belong >2 1.86 ->>4 belong <3 1.85 ->>4 belong >0 (Hash, version %d, native byte-order) - -0 long 0x00053162 Berkeley DB 1.85/1.86 ->4 long >0 (Btree, version %d, native byte-order) -0 belong 0x00053162 Berkeley DB 1.85/1.86 ->4 belong >0 (Btree, version %d, big-endian) -0 lelong 0x00053162 Berkeley DB 1.85/1.86 ->4 lelong >0 (Btree, version %d, little-endian) - -12 long 0x00061561 Berkeley DB ->16 long >0 (Hash, version %d, native byte-order) -12 belong 0x00061561 Berkeley DB ->16 belong >0 (Hash, version %d, big-endian) -12 lelong 0x00061561 Berkeley DB ->16 lelong >0 (Hash, version %d, little-endian) - -12 long 0x00053162 Berkeley DB ->16 long >0 (Btree, version %d, native byte-order) -12 belong 0x00053162 Berkeley DB ->16 belong >0 (Btree, version %d, big-endian) -12 lelong 0x00053162 Berkeley DB ->16 lelong >0 (Btree, version %d, little-endian) - -12 long 0x00042253 Berkeley DB ->16 long >0 (Queue, version %d, native byte-order) -12 belong 0x00042253 Berkeley DB ->16 belong >0 (Queue, version %d, big-endian) -12 lelong 0x00042253 Berkeley DB ->16 lelong >0 (Queue, version %d, little-endian) - -# From Max Bowsher. -12 long 0x00040988 Berkeley DB ->16 long >0 (Log, version %d, native byte-order) -12 belong 0x00040988 Berkeley DB ->16 belong >0 (Log, version %d, big-endian) -12 lelong 0x00040988 Berkeley DB ->16 lelong >0 (Log, version %d, little-endian) - -# -# -# Round Robin Database Tool by Tobias Oetiker <oetiker@ee.ethz.ch> -0 string RRD RRDTool DB ->4 string x version %s -#---------------------------------------------------------------------- -# ROOT: file(1) magic for ROOT databases -# -0 string root\0 ROOT file ->4 belong x Version %d ->33 belong x (Compression: %d) - -# XXX: Weak magic. -# Alex Ott <ott@jet.msk.su> -## Paradox file formats -#2 leshort 0x0800 Paradox -#>0x39 byte 3 v. 3.0 -#>0x39 byte 4 v. 3.5 -#>0x39 byte 9 v. 4.x -#>0x39 byte 10 v. 5.x -#>0x39 byte 11 v. 5.x -#>0x39 byte 12 v. 7.x -#>>0x04 byte 0 indexed .DB data file -#>>0x04 byte 1 primary index .PX file -#>>0x04 byte 2 non-indexed .DB data file -#>>0x04 byte 3 non-incrementing secondary index .Xnn file -#>>0x04 byte 4 secondary index .Ynn file -#>>0x04 byte 5 incrementing secondary index .Xnn file -#>>0x04 byte 6 non-incrementing secondary index .XGn file -#>>0x04 byte 7 secondary index .YGn file -#>>>0x04 byte 8 incrementing secondary index .XGn file - -## XBase database files -#0 byte 0x02 -#>8 leshort >0 -#>>12 leshort 0 FoxBase -#!:mime application/x-dbf -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x03 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 FoxBase+, FoxPro, dBaseIII+, dBaseIV, no memo -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x04 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 dBASE IV no memo file -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x05 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 dBASE V no memo file -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x30 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 Visual FoxPro -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x43 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 FlagShip with memo var size -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x7b -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 dBASEIV with memo -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x83 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 FoxBase+, dBaseIII+ with memo -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x8b -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 dBaseIV with memo -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x8e -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 dBaseIV with SQL Table -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0xb3 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 FlagShip with .dbt memo -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0xf5 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 FoxPro with memo -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 leshort 0x0006 DBase 3 index file - -# MS Access database -4 string Standard\ Jet\ DB Microsoft Access Database -!:mime application/x-msaccess - -# TDB database from Samba et al - Martin Pool <mbp@samba.org> -0 string TDB\ file TDB database ->32 lelong 0x2601196D version 6, little-endian ->>36 lelong x hash size %d bytes - -# SE Linux policy database -0 lelong 0xf97cff8c SE Linux policy ->16 lelong x v%d ->20 lelong 1 MLS ->24 lelong x %d symbols ->28 lelong x %d ocons - -# ICE authority file data (Wolfram Kleff) -2 string ICE ICE authority data - -# X11 Xauthority file (Wolfram Kleff) -10 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -11 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -12 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -13 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -14 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -15 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -16 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -17 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -18 string MIT-MAGIC-COOKIE-1 X11 Xauthority data - -# From: Maxime Henrion <mux@FreeBSD.org> -# PostgreSQL's custom dump format, Maxime Henrion <mux@FreeBSD.org> -0 string PGDMP PostgreSQL custom database dump ->5 byte x - v%d ->6 byte x \b.%d ->5 beshort <0x101 \b-0 ->5 beshort >0x100 ->>7 byte x \b-%d - -# Type: Advanced Data Format (ADF) database -# URL: http://www.grc.nasa.gov/WWW/cgns/adf/ -# From: Nicolas Chauvat <nicolas.chauvat@logilab.fr> -0 string @(#)ADF\ Database CGNS Advanced Data Format - -# Tokyo Cabinet magic data -# http://tokyocabinet.sourceforge.net/index.html -0 string ToKyO\ CaBiNeT\n Tokyo Cabinet ->14 string x \b (%s) ->32 byte 0 \b, Hash -!:mime application/x-tokyocabinet-hash ->32 byte 1 \b, B+ tree -!:mime application/x-tokyocabinet-btree ->32 byte 2 \b, Fixed-length -!:mime application/x-tokyocabinet-fixed ->32 byte 3 \b, Table -!:mime application/x-tokyocabinet-table ->33 byte &1 \b, [open] ->33 byte &2 \b, [fatal] ->34 byte x \b, apow=%d ->35 byte x \b, fpow=%d ->36 byte &0x01 \b, [large] ->36 byte &0x02 \b, [deflate] ->36 byte &0x04 \b, [bzip] ->36 byte &0x08 \b, [tcbs] ->36 byte &0x10 \b, [excodec] ->40 lequad x \b, bnum=%lld ->48 lequad x \b, rnum=%lld ->56 lequad x \b, fsiz=%lld - -# Type: QDBM Quick Database Manager -# From: Benoit Sibaud <bsibaud@april.org> -0 string \\[depot\\]\n\f Quick Database Manager, little endian -0 string \\[DEPOT\\]\n\f Quick Database Manager, big endian - -# Type: TokyoCabinet database -# URL: http://tokyocabinet.sourceforge.net/ -# From: Benoit Sibaud <bsibaud@april.org> -0 string ToKyO\ CaBiNeT\n TokyoCabinet database ->14 string x (version %s) - -#------------------------------------------------------------------------------ -# diamond: file(1) magic for Diamond system -# -# ... diamond is a multi-media mail and electronic conferencing system.... -# -# XXX - I think it was either renamed Slate, or replaced by Slate.... -# -# The full deal is too long... -#0 string <list>\n<protocol\ bbn-multimedia-format> Diamond Multimedia Document -0 string =<list>\n<protocol\ bbn-m Diamond Multimedia Document -#------------------------------------------------------------------------------ -# diff: file(1) magic for diff(1) output -# -0 search/1 diff\ diff output text -!:mime text/x-diff -0 search/1 ***\ diff output text -!:mime text/x-diff -0 search/1 Only\ in\ diff output text -!:mime text/x-diff -0 search/1 Common\ subdirectories:\ diff output text -!:mime text/x-diff - -0 search/1 Index: RCS/CVS diff output text -!:mime text/x-diff -# Digital UNIX - Info -# -0 string =!<arch>\n________64E Alpha archive ->22 string X -- out of date -# -# Alpha COFF Based Executables -# The stripped stuff really needs to be an 8 byte (64 bit) compare, -# but this works -0 leshort 0x183 COFF format alpha ->22 leshort&020000 &010000 sharable library, ->22 leshort&020000 ^010000 dynamically linked, ->24 leshort 0410 pure ->24 leshort 0413 demand paged ->8 lelong >0 executable or object module, not stripped ->8 lelong 0 ->>12 lelong 0 executable or object module, stripped ->>12 lelong >0 executable or object module, not stripped ->27 byte >0 - version %d. ->26 byte >0 %d- ->28 leshort >0 %d -# -# The next is incomplete, we could tell more about this format, -# but its not worth it. -0 leshort 0x188 Alpha compressed COFF -0 leshort 0x18f Alpha u-code object -# -# -# Some other interesting Digital formats, -0 string \377\377\177 ddis/ddif -0 string \377\377\174 ddis/dots archive -0 string \377\377\176 ddis/dtif table data -0 string \033c\033 LN03 output -0 long 04553207 X image -# -0 string =!<PDF>!\n profiling data file -# -# Locale data tables (MIPS and Alpha). -# -0 short 0x0501 locale data table ->6 short 0x24 for MIPS ->6 short 0x40 for Alpha -# ATSC A/53 aka AC-3 aka Dolby Digital <ashitaka@gmx.at> -# from http://www.atsc.org/standards/a_52a.pdf -# corrections, additions, etc. are always welcome! -# -# syncword -0 beshort 0x0b77 ATSC A/52 aka AC-3 aka Dolby Digital stream, -# fscod ->4 byte&0xc0 0x00 48 kHz, ->4 byte&0xc0 0x40 44.1 kHz, ->4 byte&0xc0 0x80 32 kHz, -# is this one used for 96 kHz? ->4 byte&0xc0 0xc0 reserved frequency, -# ->5 byte&7 = 0 \b, complete main (CM) ->5 byte&7 = 1 \b, music and effects (ME) ->5 byte&7 = 2 \b, visually impaired (VI) ->5 byte&7 = 3 \b, hearing impaired (HI) ->5 byte&7 = 4 \b, dialogue (D) ->5 byte&7 = 5 \b, commentary (C) ->5 byte&7 = 6 \b, emergency (E) -# acmod ->6 byte&0xe0 0x00 1+1 front, ->6 byte&0xe0 0x20 1 front/0 rear, ->6 byte&0xe0 0x40 2 front/0 rear, ->6 byte&0xe0 0x60 3 front/0 rear, ->6 byte&0xe0 0x80 2 front/1 rear, ->6 byte&0xe0 0xa0 3 front/1 rear, ->6 byte&0xe0 0xc0 2 front/2 rear, ->6 byte&0xe0 0xe0 3 front/2 rear, -# lfeon (these may be incorrect) ->7 byte&0x40 0x00 LFE off, ->7 byte&0x40 0x40 LFE on, -# ->4 byte&0x3e = 0x00 \b, 32 kbit/s ->4 byte&0x3e = 0x02 \b, 40 kbit/s ->4 byte&0x3e = 0x04 \b, 48 kbit/s ->4 byte&0x3e = 0x06 \b, 56 kbit/s ->4 byte&0x3e = 0x08 \b, 64 kbit/s ->4 byte&0x3e = 0x0a \b, 80 kbit/s ->4 byte&0x3e = 0x0c \b, 96 kbit/s ->4 byte&0x3e = 0x0e \b, 112 kbit/s ->4 byte&0x3e = 0x10 \b, 128 kbit/s ->4 byte&0x3e = 0x12 \b, 160 kbit/s ->4 byte&0x3e = 0x14 \b, 192 kbit/s ->4 byte&0x3e = 0x16 \b, 224 kbit/s ->4 byte&0x3e = 0x18 \b, 256 kbit/s ->4 byte&0x3e = 0x1a \b, 320 kbit/s ->4 byte&0x3e = 0x1c \b, 384 kbit/s ->4 byte&0x3e = 0x1e \b, 448 kbit/s ->4 byte&0x3e = 0x20 \b, 512 kbit/s ->4 byte&0x3e = 0x22 \b, 576 kbit/s ->4 byte&0x3e = 0x24 \b, 640 kbit/s -# dsurmod (these may be incorrect) ->6 beshort&0x0180 0x0000 Dolby Surround not indicated ->6 beshort&0x0180 0x0080 not Dolby Surround encoded ->6 beshort&0x0180 0x0100 Dolby Surround encoded ->6 beshort&0x0180 0x0180 reserved Dolby Surround mode - -#------------------------------------------------------------------------------ -# dump: file(1) magic for dump file format--for new and old dump filesystems -# -# We specify both byte orders in order to recognize byte-swapped dumps. -# -24 belong 60012 new-fs dump file (big endian), ->4 bedate x Previous dump %s, ->8 bedate x This dump %s, ->12 belong >0 Volume %ld, ->692 belong 0 Level zero, type: ->692 belong >0 Level %d, type: ->0 belong 1 tape header, ->0 belong 2 beginning of file record, ->0 belong 3 map of inodes on tape, ->0 belong 4 continuation of file record, ->0 belong 5 end of volume, ->0 belong 6 map of inodes deleted, ->0 belong 7 end of medium (for floppy), ->676 string >\0 Label %s, ->696 string >\0 Filesystem %s, ->760 string >\0 Device %s, ->824 string >\0 Host %s, ->888 belong >0 Flags %x - -24 belong 60011 old-fs dump file (big endian), -#>4 bedate x Previous dump %s, -#>8 bedate x This dump %s, ->12 belong >0 Volume %ld, ->692 belong 0 Level zero, type: ->692 belong >0 Level %d, type: ->0 belong 1 tape header, ->0 belong 2 beginning of file record, ->0 belong 3 map of inodes on tape, ->0 belong 4 continuation of file record, ->0 belong 5 end of volume, ->0 belong 6 map of inodes deleted, ->0 belong 7 end of medium (for floppy), ->676 string >\0 Label %s, ->696 string >\0 Filesystem %s, ->760 string >\0 Device %s, ->824 string >\0 Host %s, ->888 belong >0 Flags %x - -24 lelong 60012 new-fs dump file (little endian), ->4 ledate x This dump %s, ->8 ledate x Previous dump %s, ->12 lelong >0 Volume %ld, ->692 lelong 0 Level zero, type: ->692 lelong >0 Level %d, type: ->0 lelong 1 tape header, ->0 lelong 2 beginning of file record, ->0 lelong 3 map of inodes on tape, ->0 lelong 4 continuation of file record, ->0 lelong 5 end of volume, ->0 lelong 6 map of inodes deleted, ->0 lelong 7 end of medium (for floppy), ->676 string >\0 Label %s, ->696 string >\0 Filesystem %s, ->760 string >\0 Device %s, ->824 string >\0 Host %s, ->888 lelong >0 Flags %x - -24 lelong 60011 old-fs dump file (little endian), -#>4 ledate x Previous dump %s, -#>8 ledate x This dump %s, ->12 lelong >0 Volume %ld, ->692 lelong 0 Level zero, type: ->692 lelong >0 Level %d, type: ->0 lelong 1 tape header, ->0 lelong 2 beginning of file record, ->0 lelong 3 map of inodes on tape, ->0 lelong 4 continuation of file record, ->0 lelong 5 end of volume, ->0 lelong 6 map of inodes deleted, ->0 lelong 7 end of medium (for floppy), ->676 string >\0 Label %s, ->696 string >\0 Filesystem %s, ->760 string >\0 Device %s, ->824 string >\0 Host %s, ->888 lelong >0 Flags %x - -18 leshort 60011 old-fs dump file (16-bit, assuming PDP-11 endianness), ->2 medate x Previous dump %s, ->6 medate x This dump %s, ->10 leshort >0 Volume %ld, ->0 leshort 1 tape header. ->0 leshort 2 beginning of file record. ->0 leshort 3 map of inodes on tape. ->0 leshort 4 continuation of file record. ->0 leshort 5 end of volume. ->0 leshort 6 map of inodes deleted. ->0 leshort 7 end of medium (for floppy). - -24 belong 0x19540119 new-fs dump file (ufs2, big endian), ->896 beqdate x Previous dump %s, ->904 beqdate x This dump %s, ->12 belong >0 Volume %ld, ->692 belong 0 Level zero, type: ->692 belong >0 Level %d, type: ->0 belong 1 tape header, ->0 belong 2 beginning of file record, ->0 belong 3 map of inodes on tape, ->0 belong 4 continuation of file record, ->0 belong 5 end of volume, ->0 belong 6 map of inodes deleted, ->0 belong 7 end of medium (for floppy), ->676 string >\0 Label %s, ->696 string >\0 Filesystem %s, ->760 string >\0 Device %s, ->824 string >\0 Host %s, ->888 belong >0 Flags %x - -24 lelong 0x19540119 new-fs dump file (ufs2, little endian), ->896 leqdate x This dump %s, ->904 leqdate x Previous dump %s, ->12 lelong >0 Volume %ld, ->692 lelong 0 Level zero, type: ->692 lelong >0 Level %d, type: ->0 lelong 1 tape header, ->0 lelong 2 beginning of file record, ->0 lelong 3 map of inodes on tape, ->0 lelong 4 continuation of file record, ->0 lelong 5 end of volume, ->0 lelong 6 map of inodes deleted, ->0 lelong 7 end of medium (for floppy), ->676 string >\0 Label %s, ->696 string >\0 Filesystem %s, ->760 string >\0 Device %s, ->824 string >\0 Host %s, ->888 lelong >0 Flags %x - -#------------------------------------------------------------------------------ -# Dyadic: file(1) magic for Dyalog APL. -# -0 byte 0xaa ->1 byte <4 Dyalog APL ->>1 byte 0x00 incomplete workspace ->>1 byte 0x01 component file ->>1 byte 0x02 external variable ->>1 byte 0x03 workspace ->>2 byte x version %d ->>3 byte x .%d - -#------------------------------------------------------------------------------ -# T602 editor documents -# by David Necas <yeti@physics.muni.cz> -0 string @CT\ T602 document data, ->4 string 0 Kamenicky ->4 string 1 CP 852 ->4 string 2 KOI8-CS ->4 string >2 unknown encoding - -# Vi IMproved Encrypted file -# by David Necas <yeti@physics.muni.cz> -0 string VimCrypt~ Vim encrypted file data -# Vi IMproved Swap file -# by Sven Wegener <swegener@gentoo.org> -0 string b0VIM\ Vim swap file ->&0 string >\0 \b, version %s - -#------------------------------------------------------------------------------ -# efi: file(1) magic for Universal EFI binaries - -0 lelong 0x0ef1fab9 ->4 lelong 1 Universal EFI binary with 1 architecture ->>&0 lelong 7 \b, i386 ->>&0 lelong 0x01000007 \b, x86_64 ->4 lelong 2 Universal EFI binary with 2 architectures ->>&0 lelong 7 \b, i386 ->>&0 lelong 0x01000007 \b, x86_64 ->>&20 lelong 7 \b, i386 ->>&20 lelong 0x01000007 \b, x86_64 ->4 lelong >2 Universal EFI binary with %ld architectures - -#------------------------------------------------------------------------------ -# elf: file(1) magic for ELF executables -# -# We have to check the byte order flag to see what byte order all the -# other stuff in the header is in. -# -# What're the correct byte orders for the nCUBE and the Fujitsu VPP500? -# -# Created by: unknown -# Modified by (1): Daniel Quinlan <quinlan@yggdrasil.com> -# Modified by (2): Peter Tobias <tobias@server.et-inf.fho-emden.de> (core support) -# Modified by (3): Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de> (fix of core support) -# Modified by (4): <gerardo.cacciari@gmail.com> (VMS Itanium) -# Modified by (5): Matthias Urlichs <smurf@debian.org> (Listing of many architectures) -0 string \177ELF ELF ->4 byte 0 invalid class ->4 byte 1 32-bit ->4 byte 2 64-bit ->5 byte 0 invalid byte order ->5 byte 1 LSB ->>16 leshort 0 no file type, -!:strength *2 -!:mime application/octet-stream ->>16 leshort 1 relocatable, -!:mime application/x-object ->>16 leshort 2 executable, -!:mime application/x-executable ->>16 leshort 3 shared object, -!:mime application/x-sharedlib ->>16 leshort 4 core file -!:mime application/x-coredump -# Core file detection is not reliable. -#>>>(0x38+0xcc) string >\0 of '%s' -#>>>(0x38+0x10) lelong >0 (signal %d), ->>16 leshort &0xff00 processor-specific, ->>18 leshort 0 no machine, ->>18 leshort 1 AT&T WE32100 - invalid byte order, ->>18 leshort 2 SPARC - invalid byte order, ->>18 leshort 3 Intel 80386, ->>18 leshort 4 Motorola ->>>36 lelong &0x01000000 68000 - invalid byte order, ->>>36 lelong &0x00810000 CPU32 - invalid byte order, ->>>36 lelong 0 68020 - invalid byte order, ->>18 leshort 5 Motorola 88000 - invalid byte order, ->>18 leshort 6 Intel 80486, ->>18 leshort 7 Intel 80860, -# The official e_machine number for MIPS is now #8, regardless of endianness. -# The second number (#10) will be deprecated later. For now, we still -# say something if #10 is encountered, but only gory details for #8. ->>18 leshort 8 MIPS, ->>>36 lelong &0x20 N32 ->>18 leshort 10 MIPS, ->>>36 lelong &0x20 N32 ->>18 leshort 8 -# only for 32-bit ->>>4 byte 1 ->>>>36 lelong&0xf0000000 0x00000000 MIPS-I ->>>>36 lelong&0xf0000000 0x10000000 MIPS-II ->>>>36 lelong&0xf0000000 0x20000000 MIPS-III ->>>>36 lelong&0xf0000000 0x30000000 MIPS-IV ->>>>36 lelong&0xf0000000 0x40000000 MIPS-V ->>>>36 lelong&0xf0000000 0x50000000 MIPS32 ->>>>36 lelong&0xf0000000 0x60000000 MIPS64 ->>>>36 lelong&0xf0000000 0x70000000 MIPS32 rel2 ->>>>36 lelong&0xf0000000 0x80000000 MIPS64 rel2 -# only for 64-bit ->>>4 byte 2 ->>>>48 lelong&0xf0000000 0x00000000 MIPS-I ->>>>48 lelong&0xf0000000 0x10000000 MIPS-II ->>>>48 lelong&0xf0000000 0x20000000 MIPS-III ->>>>48 lelong&0xf0000000 0x30000000 MIPS-IV ->>>>48 lelong&0xf0000000 0x40000000 MIPS-V ->>>>48 lelong&0xf0000000 0x50000000 MIPS32 ->>>>48 lelong&0xf0000000 0x60000000 MIPS64 ->>>>48 lelong&0xf0000000 0x70000000 MIPS32 rel2 ->>>>48 lelong&0xf0000000 0x80000000 MIPS64 rel2 ->>18 leshort 9 Amdahl - invalid byte order, ->>18 leshort 10 MIPS (deprecated), ->>18 leshort 11 RS6000 - invalid byte order, ->>18 leshort 15 PA-RISC - invalid byte order, ->>>50 leshort 0x0214 2.0 ->>>48 leshort &0x0008 (LP64), ->>18 leshort 16 nCUBE, ->>18 leshort 17 Fujitsu VPP500, ->>18 leshort 18 SPARC32PLUS - invalid byte order, ->>18 leshort 20 PowerPC, ->>18 leshort 22 IBM S/390, ->>18 leshort 36 NEC V800, ->>18 leshort 37 Fujitsu FR20, ->>18 leshort 38 TRW RH-32, ->>18 leshort 39 Motorola RCE, ->>18 leshort 40 ARM, ->>18 leshort 41 Alpha, ->>18 leshort 0xa390 IBM S/390 (obsolete), ->>18 leshort 42 Renesas SH, ->>18 leshort 43 SPARC V9 - invalid byte order, ->>18 leshort 44 Siemens Tricore Embedded Processor, ->>18 leshort 45 Argonaut RISC Core, Argonaut Technologies Inc., ->>18 leshort 46 Renesas H8/300, ->>18 leshort 47 Renesas H8/300H, ->>18 leshort 48 Renesas H8S, ->>18 leshort 49 Renesas H8/500, ->>18 leshort 50 IA-64, ->>18 leshort 51 Stanford MIPS-X, ->>18 leshort 52 Motorola Coldfire, ->>18 leshort 53 Motorola M68HC12, ->>18 leshort 54 Fujitsu MMA, ->>18 leshort 55 Siemens PCP, ->>18 leshort 56 Sony nCPU, ->>18 leshort 57 Denso NDR1, ->>18 leshort 58 Start*Core, ->>18 leshort 59 Toyota ME16, ->>18 leshort 60 ST100, ->>18 leshort 61 Tinyj emb., ->>18 leshort 62 x86-64, ->>18 leshort 63 Sony DSP, ->>18 leshort 66 FX66, ->>18 leshort 67 ST9+ 8/16 bit, ->>18 leshort 68 ST7 8 bit, ->>18 leshort 69 MC68HC16, ->>18 leshort 70 MC68HC11, ->>18 leshort 71 MC68HC08, ->>18 leshort 72 MC68HC05, ->>18 leshort 73 SGI SVx, ->>18 leshort 74 ST19 8 bit, ->>18 leshort 75 Digital VAX, ->>18 leshort 76 Axis cris, ->>18 leshort 77 Infineon 32-bit embedded, ->>18 leshort 78 Element 14 64-bit DSP, ->>18 leshort 79 LSI Logic 16-bit DSP, ->>18 leshort 80 MMIX, ->>18 leshort 81 Harvard machine-independent, ->>18 leshort 82 SiTera Prism, ->>18 leshort 83 Atmel AVR 8-bit, ->>18 leshort 84 Fujitsu FR30, ->>18 leshort 85 Mitsubishi D10V, ->>18 leshort 86 Mitsubishi D30V, ->>18 leshort 87 NEC v850, ->>18 leshort 88 Renesas M32R, ->>18 leshort 89 Matsushita MN10300, ->>18 leshort 90 Matsushita MN10200, ->>18 leshort 91 picoJava, ->>18 leshort 92 OpenRISC, ->>18 leshort 93 ARC Cores Tangent-A5, ->>18 leshort 94 Tensilica Xtensa, ->>18 leshort 97 NatSemi 32k, ->>18 leshort 106 Analog Devices Blackfin, ->>18 leshort 113 Altera Nios II, ->>18 leshort 0xae META, ->>18 leshort 0x3426 OpenRISC (obsolete), ->>18 leshort 0x8472 OpenRISC (obsolete), ->>18 leshort 0x9026 Alpha (unofficial), ->>20 lelong 0 invalid version ->>20 lelong 1 version 1 ->>36 lelong 1 MathCoPro/FPU/MAU Required ->5 byte 2 MSB ->>16 beshort 0 no file type, -!:mime application/octet-stream ->>16 beshort 1 relocatable, -!:mime application/x-object ->>16 beshort 2 executable, -!:mime application/x-executable ->>16 beshort 3 shared object, -!:mime application/x-sharedlib ->>16 beshort 4 core file, -!:mime application/x-coredump -#>>>(0x38+0xcc) string >\0 of '%s' -#>>>(0x38+0x10) belong >0 (signal %d), ->>16 beshort &0xff00 processor-specific, ->>18 beshort 0 no machine, ->>18 beshort 1 AT&T WE32100, ->>18 beshort 2 SPARC, ->>18 beshort 3 Intel 80386 - invalid byte order, ->>18 beshort 4 Motorola ->>>36 belong &0x01000000 68000, ->>>36 belong &0x00810000 CPU32, ->>>36 belong 0 68020, ->>18 beshort 5 Motorola 88000, ->>18 beshort 6 Intel 80486 - invalid byte order, ->>18 beshort 7 Intel 80860, -# only for MIPS - see comment in little-endian section above. ->>18 beshort 8 MIPS, ->>>36 belong &0x20 N32 ->>18 beshort 10 MIPS, ->>>36 belong &0x20 N32 ->>18 beshort 8 -# only for 32-bit ->>>4 byte 1 ->>>>36 belong&0xf0000000 0x00000000 MIPS-I ->>>>36 belong&0xf0000000 0x10000000 MIPS-II ->>>>36 belong&0xf0000000 0x20000000 MIPS-III ->>>>36 belong&0xf0000000 0x30000000 MIPS-IV ->>>>36 belong&0xf0000000 0x40000000 MIPS-V ->>>>36 belong&0xf0000000 0x50000000 MIPS32 ->>>>36 belong&0xf0000000 0x60000000 MIPS64 ->>>>36 belong&0xf0000000 0x70000000 MIPS32 rel2 ->>>>36 belong&0xf0000000 0x80000000 MIPS64 rel2 -# only for 64-bit ->>>4 byte 2 ->>>>48 belong&0xf0000000 0x00000000 MIPS-I ->>>>48 belong&0xf0000000 0x10000000 MIPS-II ->>>>48 belong&0xf0000000 0x20000000 MIPS-III ->>>>48 belong&0xf0000000 0x30000000 MIPS-IV ->>>>48 belong&0xf0000000 0x40000000 MIPS-V ->>>>48 belong&0xf0000000 0x50000000 MIPS32 ->>>>48 belong&0xf0000000 0x60000000 MIPS64 ->>>>48 belong&0xf0000000 0x70000000 MIPS32 rel2 ->>>>48 belong&0xf0000000 0x80000000 MIPS64 rel2 ->>18 beshort 9 Amdahl, ->>18 beshort 10 MIPS (deprecated), ->>18 beshort 11 RS6000, ->>18 beshort 15 PA-RISC ->>>50 beshort 0x0214 2.0 ->>>48 beshort &0x0008 (LP64) ->>18 beshort 16 nCUBE, ->>18 beshort 17 Fujitsu VPP500, ->>18 beshort 18 SPARC32PLUS, ->>>36 belong&0xffff00 0x000100 V8+ Required, ->>>36 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required, ->>>36 belong&0xffff00 0x000400 HaL R1 Extensions Required, ->>>36 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required, ->>18 beshort 20 PowerPC or cisco 4500, ->>18 beshort 21 64-bit PowerPC or cisco 7500, ->>18 beshort 22 IBM S/390, ->>18 beshort 23 Cell SPU, ->>18 beshort 24 cisco SVIP, ->>18 beshort 25 cisco 7200, ->>18 beshort 36 NEC V800 or cisco 12000, ->>18 beshort 37 Fujitsu FR20, ->>18 beshort 38 TRW RH-32, ->>18 beshort 39 Motorola RCE, ->>18 beshort 40 ARM, ->>18 beshort 41 Alpha, ->>18 beshort 42 Renesas SH, ->>18 beshort 43 SPARC V9, ->>>48 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required, ->>>48 belong&0xffff00 0x000400 HaL R1 Extensions Required, ->>>48 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required, ->>>48 belong&0x3 0 total store ordering, ->>>48 belong&0x3 1 partial store ordering, ->>>48 belong&0x3 2 relaxed memory ordering, ->>18 beshort 44 Siemens Tricore Embedded Processor, ->>18 beshort 45 Argonaut RISC Core, Argonaut Technologies Inc., ->>18 beshort 46 Renesas H8/300, ->>18 beshort 47 Renesas H8/300H, ->>18 beshort 48 Renesas H8S, ->>18 beshort 49 Renesas H8/500, ->>18 beshort 50 IA-64, ->>18 beshort 51 Stanford MIPS-X, ->>18 beshort 52 Motorola Coldfire, ->>18 beshort 53 Motorola M68HC12, ->>18 beshort 73 Cray NV1, ->>18 beshort 75 Digital VAX, ->>18 beshort 88 Renesas M32R, ->>18 leshort 92 OpenRISC, ->>18 leshort 0x3426 OpenRISC (obsolete), ->>18 leshort 0x8472 OpenRISC (obsolete), ->>18 beshort 94 Tensilica Xtensa, ->>18 beshort 97 NatSemi 32k, ->>18 beshort 0x18ad AVR32 (unofficial), ->>18 beshort 0x9026 Alpha (unofficial), ->>18 beshort 0xa390 IBM S/390 (obsolete), ->>20 belong 0 invalid version ->>20 belong 1 version 1 ->>36 belong 1 MathCoPro/FPU/MAU Required -# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed -# like proper ELF, but extracting the string had bad results. ->4 byte <0x80 ->>8 string >\0 (%s) ->8 string \0 ->>7 byte 0 (SYSV) ->>7 byte 1 (HP-UX) ->>7 byte 2 (NetBSD) ->>7 byte 3 (GNU/Linux) ->>7 byte 4 (GNU/Hurd) ->>7 byte 5 (86Open) ->>7 byte 6 (Solaris) ->>7 byte 7 (Monterey) ->>7 byte 8 (IRIX) ->>7 byte 9 (FreeBSD) ->>7 byte 10 (Tru64) ->>7 byte 11 (Novell Modesto) ->>7 byte 12 (OpenBSD) ->8 string \2 ->>7 byte 13 (OpenVMS) ->>7 byte 97 (ARM) ->>7 byte 255 (embedded) - -#------------------------------------------------------------------------------ -# encore: file(1) magic for Encore machines -# -# XXX - needs to have the byte order specified (NS32K was little-endian, -# dunno whether they run the 88K in little-endian mode or not). -# -0 short 0x154 Encore ->20 short 0x107 executable ->20 short 0x108 pure executable ->20 short 0x10b demand-paged executable ->20 short 0x10f unsupported executable ->12 long >0 not stripped ->22 short >0 - version %ld ->22 short 0 - -#>4 date x stamp %s -0 short 0x155 Encore unsupported executable ->12 long >0 not stripped ->22 short >0 - version %ld ->22 short 0 - -#>4 date x stamp %s -#------------------------------------------------------------------------------ -# EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1] -# Stefan Praszalowicz (hpicollo@worldnet.fr) -# Useful information for improving this file can be found at: -# http://software.frodo.looijaard.name/psiconv/formats/Index.html -0 lelong 0x10000037 ->4 lelong 0x1000006D ->>8 lelong 0x1000007F Psion Word ->>8 lelong 0x10000088 Psion Sheet ->>8 lelong 0x1000007D Psion Sketch ->>8 lelong 0x10000085 Psion TextEd - -#------------------------------------------------------------------------------ -# erlang: file(1) magic for Erlang JAM and BEAM files -# URL: http://www.erlang.org/faq/x779.html#AEN812 - -# OTP R3-R4 -0 string \0177BEAM! Old Erlang BEAM file ->6 short >0 - version %d - -# OTP R5 and onwards -0 string FOR1 ->8 string BEAM Erlang BEAM file - -# 4.2 version may have a copyright notice! -4 string Tue\ Jan\ 22\ 14:32:44\ MET\ 1991 Erlang JAM file - version 4.2 -79 string Tue\ Jan\ 22\ 14:32:44\ MET\ 1991 Erlang JAM file - version 4.2 - -4 string 1.0\ Fri\ Feb\ 3\ 09:55:56\ MET\ 1995 Erlang JAM file - version 4.3 - -#------------------------------------------------------------------------------ -# ESRI Shapefile format (.shp .shx .dbf=DBaseIII) -# Based on info from -# <URL:http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf> -0 belong 9994 ESRI Shapefile ->4 belong =0 ->8 belong =0 ->12 belong =0 ->16 belong =0 ->20 belong =0 ->28 lelong x version %d ->24 belong x length %d ->32 lelong =0 type Null Shape ->32 lelong =1 type Point ->32 lelong =3 type PolyLine ->32 lelong =5 type Polygon ->32 lelong =8 type MultiPoint ->32 lelong =11 type PointZ ->32 lelong =13 type PolyLineZ ->32 lelong =15 type PolygonZ ->32 lelong =18 type MultiPointZ ->32 lelong =21 type PointM ->32 lelong =23 type PolyLineM ->32 lelong =25 type PolygonM ->32 lelong =28 type MultiPointM ->32 lelong =31 type MultiPatch - -#------------------------------------------------------------------------------ -# fcs: file(1) magic for FCS (Flow Cytometry Standard) data files -# From Roger Leigh <roger@whinlatter.uklinux.net> -0 string FCS1.0 Flow Cytometry Standard (FCS) data, version 1.0 -0 string FCS2.0 Flow Cytometry Standard (FCS) data, version 2.0 -0 string FCS3.0 Flow Cytometry Standard (FCS) data, version 3.0 - - -#------------------------------------------------------------------------------ -# filesystems: file(1) magic for different filesystems -# -0 string \366\366\366\366 PC formatted floppy with no filesystem -# Sun disk labels -# From /usr/include/sun/dklabel.h: -0774 beshort 0xdabe -# modified by Joerg Jenderek, because original test -# succeeds for Cabinet archive dao360.dl_ with negative blocks ->0770 long >0 Sun disk label ->>0 string x '%s ->>>31 string >\0 \b%s ->>>>63 string >\0 \b%s ->>>>>95 string >\0 \b%s ->>0 string x \b' ->>0734 short >0 %d rpm, ->>0736 short >0 %d phys cys, ->>0740 short >0 %d alts/cyl, ->>0746 short >0 %d interleave, ->>0750 short >0 %d data cyls, ->>0752 short >0 %d alt cyls, ->>0754 short >0 %d heads/partition, ->>0756 short >0 %d sectors/track, ->>0764 long >0 start cyl %ld, ->>0770 long x %ld blocks -# Is there a boot block written 1 sector in? ->512 belong&077777777 0600407 \b, boot block present -# Joerg Jenderek: Smart Boot Manager backup file is 41 byte header + first sectors of disc -# (http://btmgr.sourceforge.net/docs/user-guide-3.html) -0 string SBMBAKUP_ Smart Boot Manager backup file ->9 string x \b, version %-5.5s ->>14 string =_ ->>>15 string x %-.1s ->>>>16 string =_ \b. ->>>>>17 string x \b%-.1s ->>>>>>18 string =_ \b. ->>>>>>>19 string x \b%-.1s ->>>22 ubyte 0 ->>>>21 ubyte x \b, from drive 0x%x ->>>22 ubyte >0 ->>>>21 string x \b, from drive %s - -# Joerg Jenderek -# DOS Emulator image is 128 byte, null right padded header + harddisc image -0 string DOSEMU\0 ->0x27E leshort 0xAA55 -#offset is 128 ->>19 ubyte 128 ->>>(19.b-1) ubyte 0x0 DOS Emulator image ->>>>7 ulelong >0 \b, %u heads ->>>>11 ulelong >0 \b, %d sectors/track ->>>>15 ulelong >0 \b, %d cylinders - -# updated by Joerg Jenderek at Sep 2007 -# only for sector sizes with 512 or more Bytes -0x1FE leshort 0xAA55 x86 boot sector -# to do also for sectors < than 512 Bytes and some other files, GRR -#30 search/481 \x55\xAA x86 boot sector -# not for BeOS floppy 1440k, MBRs -#(11.s-2) uleshort 0xAA55 x86 boot sector ->2 string OSBS \b, OS/BS MBR -# J\xf6rg Jenderek <joerg dot jenderek at web dot de> ->0x8C string Invalid\ partition\ table \b, MS-DOS MBR -# dr-dos with some upper-, lowercase variants ->0x9D string Invalid\ partition\ table$ ->>181 string No\ Operating\ System$ ->>>201 string Operating\ System\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03 ->0x9D string Invalid\ partition\ table$ ->>181 string No\ operating\ system$ ->>>201 string Operating\ system\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03 ->342 string Invalid\ partition\ table$ ->>366 string No\ operating\ system$ ->>>386 string Operating\ system\ load\ error$ \b, DR-DOS MBR, version 7.01 to 7.03 ->295 string NEWLDR\0 ->>302 string Bad\ PT\ $ ->>>310 string No\ OS\ $ ->>>>317 string OS\ load\ err$ ->>>>>329 string Moved\ or\ missing\ IBMBIO.LDR\n\r ->>>>>>358 string Press\ any\ key\ to\ continue.\n\r$ ->>>>>>>387 string Copyright\ (c)\ 1984,1998 ->>>>>>>>411 string Caldera\ Inc.\0 \b, DR-DOS MBR (IBMBIO.LDR) ->0x10F string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 4.10.1998, 4.10.2222 ->>0x1B8 ubelong >0 \b, Serial 0x%-.4x ->0x8B string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 5.00 to 4.00.950 ->271 string Invalid\ partition\ table\0 ->>295 string Error\ loading\ operating\ system\0 ->>>326 string Missing\ operating\ system\0 \b, mbr -# ->139 string Invalid\ partition\ table\0 ->>163 string Error\ loading\ operating\ system\0 ->>>194 string Missing\ operating\ system\0 \b, Microsoft Windows XP mbr -# http://www.heise.de/ct/05/09/006/ page 184 -#HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\DosDevices\?:=Serial4Bytes+8Bytes ->>>>0x1B8 ulelong >0 \b,Serial 0x%-.4x ->300 string Invalid\ partition\ table\0 ->>324 string Error\ loading\ operating\ system\0 ->>>355 string Missing\ operating\ system\0 \b, Microsoft Windows XP MBR -#??>>>389 string Invalid\ system\ disk ->>>>0x1B8 ulelong >0 \b, Serial 0x%-.4x ->300 string Ung\201ltige\ Partitionstabelle -#split string to avoid error: String too long ->>328 string Fehler\ beim\ Laden\ ->>>346 string des\ Betriebssystems ->>>>366 string Betriebssystem\ nicht\ vorhanden \b, Microsoft Windows XP MBR (german) ->>>>>0x1B8 ulelong >0 \b, Serial 0x%-.4x -#>0x145 string Default:\ F \b, FREE-DOS MBR -#>0x14B string Default:\ F \b, FREE-DOS 1.0 MBR ->0x145 search/7 Default:\ F \b, FREE-DOS MBR -#>>313 string F0\ .\ .\ . -#>>>322 string disk\ 1 -#>>>>382 string FAT3 ->64 string no\ active\ partition\ found ->>96 string read\ error\ while\ reading\ drive \b, FREE-DOS Beta 0.9 MBR -# Ranish Partition Manager http://www.ranish.com/part/ ->387 search/4 \0\ Error!\r ->>378 search/7 Virus! ->>>397 search/4 Booting\ ->>>>408 search/4 HD1/\0 \b, Ranish MBR ( ->>>>>416 string Writing\ changes... \b2.37 ->>>>>>438 ubyte x \b,0x%x dots ->>>>>>440 ubyte >0 \b,virus check ->>>>>>441 ubyte >0 \b,partition %c -#2.38,2.42,2.44 ->>>>>416 string !Writing\ changes... \b ->>>>>>418 ubyte 1 \bvirus check, ->>>>>>419 ubyte x \b0x%x seconds ->>>>>>420 ubyte&0x0F >0 \b,partition ->>>>>>>420 ubyte&0x0F <5 \b %x ->>>>>>>420 ubyte&0x0F 0Xf \b ask ->>>>>420 ubyte x \b) -# ->271 string Operating\ system\ loading ->>296 string error\r \b, SYSLINUX MBR (2.10) -# http://www.acronis.de/ ->362 string MBR\ Error\ \0\r ->>376 string ress\ any\ key\ to\ ->>>392 string boot\ from\ floppy...\0 \b, Acronis MBR -# added by Joerg Jenderek -# http://www.visopsys.org/ -# http://partitionlogic.org.uk/ ->309 string No\ bootable\ partition\ found\r ->>339 string I/O\ Error\ reading\ boot\ sector\r \b, Visopsys MBR ->349 string No\ bootable\ partition\ found\r ->>379 string I/O\ Error\ reading\ boot\ sector\r \b, simple Visopsys MBR -# bootloader, bootmanager ->0x40 string SBML -# label with 11 characters of FAT 12 bit filesystem ->>43 string SMART\ BTMGR ->>>430 string SBMK\ Bad!\r \b, Smart Boot Manager -# OEM-ID not always "SBM" -#>>>>3 strings SBM ->>>>6 string >\0 \b, version %s ->382 string XOSLLOADXCF \b, eXtended Operating System Loader ->6 string LILO \b, LInux i386 boot LOader ->>120 string LILO \b, version 22.3.4 SuSe ->>172 string LILO \b, version 22.5.8 Debian -# updated by Joerg Jenderek at Oct 2008 -# variables according to grub-0.97/stage1/stage1.S or -# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data -# usual values are marked with comments to get only informations of strange GRUB loaders ->342 search/60 \0Geom\0 -#>0 ulelong x %x=0x009048EB , 0x2a9048EB 0 ->>0x41 ubyte <2 ->>>0x3E ubyte >2 \b; GRand Unified Bootloader -# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90 ->>>>0x3E ubyte x \b, stage1 version 0x%x -#If it is 0xFF, use a drive passed by BIOS ->>>>0x40 ubyte <0xFF \b, boot drive 0x%x -# in most case 0,1,0x2e for GRUB 0.5.95 ->>>>0x41 ubyte >0 \b, LBA flag 0x%x ->>>>0x42 uleshort <0x8000 \b, stage2 address 0x%x -#>>>>0x42 uleshort =0x8000 \b, stage2 address 0x%x (usual) ->>>>0x42 uleshort >0x8000 \b, stage2 address 0x%x -#>>>>0x44 ulelong =1 \b, 1st sector stage2 0x%x (default) ->>>>0x44 ulelong >1 \b, 1st sector stage2 0x%x ->>>>0x48 uleshort <0x800 \b, stage2 segment 0x%x -#>>>>0x48 uleshort =0x800 \b, stage2 segment 0x%x (usual) ->>>>0x48 uleshort >0x800 \b, stage2 segment 0x%x ->>>>402 string Geom\0Hard\ Disk\0Read\0\ Error\0 ->>>>>394 string stage1 \b, GRUB version 0.5.95 ->>>>382 string Geom\0Hard\ Disk\0Read\0\ Error\0 ->>>>>376 string GRUB\ \0 \b, GRUB version 0.93 or 1.94 ->>>>383 string Geom\0Hard\ Disk\0Read\0\ Error\0 ->>>>>377 string GRUB\ \0 \b, GRUB version 0.94 ->>>>385 string Geom\0Hard\ Disk\0Read\0\ Error\0 ->>>>>379 string GRUB\ \0 \b, GRUB version 0.95 or 0.96 ->>>>391 string Geom\0Hard\ Disk\0Read\0\ Error\0 ->>>>>385 string GRUB\ \0 \b, GRUB version 0.97 -#unkown version ->>>343 string Geom\0Read\0\ Error\0 ->>>>321 string Loading\ stage1.5 \b, GRUB version x.y ->>>380 string Geom\0Hard\ Disk\0Read\0\ Error\0 ->>>>374 string GRUB\ \0 \b, GRUB version n.m -# http://syslinux.zytor.com/ ->478 string Boot\ failed\r ->>495 string LDLINUX\ SYS \b, SYSLINUX bootloader (1.62) ->480 string Boot\ failed\r ->>495 string LDLINUX\ SYS \b, SYSLINUX bootloader (2.06 or 2.11) ->484 string Boot\ error\r \b, SYSLINUX bootloader (3.11) ->395 string chksum\0\ ERROR!\0 \b, Gujin bootloader -# http://www.bcdwb.de/bcdw/index_e.htm ->3 string BCDL ->>498 string BCDL\ \ \ \ BIN \b, Bootable CD Loader (1.50Z) -# mbr partion table entries -# OEM-ID does not contain MicroSoft,NEWLDR,DOS,SYSLINUX,or MTOOLs ->3 string !MS ->>3 string !SYSLINUX ->>>3 string !MTOOL ->>>>3 string !NEWLDR ->>>>>5 string !DOS -# not FAT (32 bit) ->>>>>>82 string !FAT32 -#not Linux kernel ->>>>>>>514 string !HdrS -#not BeOS ->>>>>>>>422 string !Be\ Boot\ Loader -# active flag 0 or 0x80 and type > 0 ->>>>>>>>>446 ubyte <0x81 ->>>>>>>>>>446 ubyte&0x7F 0 ->>>>>>>>>>>450 ubyte >0 \b; partition 1: ID=0x%x ->>>>>>>>>>>>446 ubyte 0x80 \b, active ->>>>>>>>>>>>447 ubyte x \b, starthead %u -#>>>>>>>>>>>>448 ubyte x \b, start C_S: 0x%x -#>>>>>>>>>>>>448 ubeshort&1023 x \b, startcylinder? %d ->>>>>>>>>>>>454 ulelong x \b, startsector %u ->>>>>>>>>>>>458 ulelong x \b, %u sectors -# ->>>>>>>>>462 ubyte <0x81 ->>>>>>>>>>462 ubyte&0x7F 0 ->>>>>>>>>>>466 ubyte >0 \b; partition 2: ID=0x%x ->>>>>>>>>>>>462 ubyte 0x80 \b, active ->>>>>>>>>>>>463 ubyte x \b, starthead %u -#>>>>>>>>>>>>464 ubyte x \b, start C_S: 0x%x -#>>>>>>>>>>>>464 ubeshort&1023 x \b, startcylinder? %d ->>>>>>>>>>>>470 ulelong x \b, startsector %u ->>>>>>>>>>>>474 ulelong x \b, %u sectors -# ->>>>>>>>>478 ubyte <0x81 ->>>>>>>>>>478 ubyte&0x7F 0 ->>>>>>>>>>>482 ubyte >0 \b; partition 3: ID=0x%x ->>>>>>>>>>>>478 ubyte 0x80 \b, active ->>>>>>>>>>>>479 ubyte x \b, starthead %u -#>>>>>>>>>>>>480 ubyte x \b, start C_S: 0x%x -#>>>>>>>>>>>>481 ubyte x \b, start C2S: 0x%x -#>>>>>>>>>>>>480 ubeshort&1023 x \b, startcylinder? %d ->>>>>>>>>>>>486 ulelong x \b, startsector %u ->>>>>>>>>>>>490 ulelong x \b, %u sectors -# ->>>>>>>>>494 ubyte <0x81 ->>>>>>>>>>494 ubyte&0x7F 0 ->>>>>>>>>>>498 ubyte >0 \b; partition 4: ID=0x%x ->>>>>>>>>>>>494 ubyte 0x80 \b, active ->>>>>>>>>>>>495 ubyte x \b, starthead %u -#>>>>>>>>>>>>496 ubyte x \b, start C_S: 0x%x -#>>>>>>>>>>>>496 ubeshort&1023 x \b, startcylinder? %d ->>>>>>>>>>>>502 ulelong x \b, startsector %u ->>>>>>>>>>>>506 ulelong x \b, %u sectors -# mbr partion table entries end -# http://www.acronis.de/ -#FAT label=ACRONIS\ SZ -#OEM-ID=BOOTWIZ0 ->442 string Non-system\ disk,\ ->>459 string press\ any\ key...\x7\0 \b, Acronis Startup Recovery Loader -# DOS names like F11.SYS are 8 right space padded bytes+3 bytes ->>>477 ubyte&0xDF >0 ->>>>477 string x \b %-.3s ->>>>>480 ubyte&0xDF >0 ->>>>>>480 string x \b%-.5s ->>>>485 ubyte&0xDF >0 ->>>>>485 string x \b.%-.3s -# ->185 string FDBOOT\ Version\ ->>204 string \rNo\ Systemdisk.\ ->>>220 string Booting\ from\ harddisk.\n\r ->>>245 string Cannot\ load\ from\ harddisk.\n\r ->>>>273 string Insert\ Systemdisk\ ->>>>>291 string and\ press\ any\ key.\n\r \b, FDBOOT harddisk Bootloader ->>>>>>200 string >\0 \b, version %-3s ->242 string Bootsector\ from\ C.H.\ Hochst\204 ->>278 string No\ Systemdisk.\ ->>>293 string Booting\ from\ harddisk.\n\r ->>>441 string Cannot\ load\ from\ harddisk.\n\r ->>>>469 string Insert\ Systemdisk\ ->>>>>487 string and\ press\ any\ key.\n\r \b, WinImage harddisk Bootloader ->>>>>>209 string >\0 \b, version %-4.4s ->(1.b+2) ubyte 0xe ->>(1.b+3) ubyte 0x1f ->>>(1.b+4) ubyte 0xbe ->>>>(1.b+5) ubyte 0x77 ->>>>(1.b+6) ubyte 0x7c ->>>>>(1.b+7) ubyte 0xac ->>>>>>(1.b+8) ubyte 0x22 ->>>>>>>(1.b+9) ubyte 0xc0 ->>>>>>>>(1.b+10) ubyte 0x74 ->>>>>>>>>(1.b+11) ubyte 0xb ->>>>>>>>>>(1.b+12) ubyte 0x56 ->>>>>>>>>>(1.b+13) ubyte 0xb4 \b, mkdosfs boot message display ->214 string Please\ try\ to\ install\ FreeDOS\ \b, DOS Emulator boot message display -#>>244 string from\ dosemu-freedos-*-bin.tgz\r -#>>>170 string Sorry,\ could\ not\ load\ an\ -#>>>>195 string operating\ system.\r\n -# ->103 string This\ is\ not\ a\ bootable\ disk.\ ->>132 string Please\ insert\ a\ bootable\ ->>>157 string floppy\ and\r\n ->>>>169 string press\ any\ key\ to\ try\ again...\r \b, FREE-DOS message display -# ->66 string Solaris\ Boot\ Sector ->>99 string Incomplete\ MDBoot\ load. ->>>89 string Version \b, Sun Solaris Bootloader ->>>>97 byte x version %c -# ->408 string OS/2\ !!\ SYS01475\r\0 ->>429 string OS/2\ !!\ SYS02025\r\0 ->>>450 string OS/2\ !!\ SYS02027\r\0 ->>>469 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp bootloader -# ->409 string OS/2\ !!\ SYS01475\r\0 ->>430 string OS/2\ !!\ SYS02025\r\0 ->>>451 string OS/2\ !!\ SYS02027\r\0 ->>>470 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp Bootloader ->112 string This\ disk\ is\ not\ bootable\r ->>142 string If\ you\ wish\ to\ make\ it\ bootable ->>>176 string run\ the\ DOS\ program\ SYS\ ->>>200 string after\ the\r ->>>>216 string system\ has\ been\ loaded\r\n ->>>>>242 string Please\ insert\ a\ DOS\ diskette\ ->>>>>271 string into\r\n\ the\ drive\ and\ ->>>>>>292 string strike\ any\ key...\0 \b, IBM OS/2 Warp message display -# XP ->430 string NTLDR\ is\ missing\xFF\r\n ->>449 string Disk\ error\xFF\r\n ->>>462 string Press\ any\ key\ to\ restart\r \b, Microsoft Windows XP Bootloader -# DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes ->>>>417 ubyte&0xDF >0 ->>>>>417 string x %-.5s ->>>>>>422 ubyte&0xDF >0 ->>>>>>>422 string x \b%-.3s ->>>>>425 ubyte&0xDF >0 ->>>>>>425 string >\ \b.%-.3s -# ->>>>371 ubyte >0x20 ->>>>>368 ubyte&0xDF >0 ->>>>>>368 string x %-.5s ->>>>>>>373 ubyte&0xDF >0 ->>>>>>>>373 string x \b%-.3s ->>>>>>376 ubyte&0xDF >0 ->>>>>>>376 string x \b.%-.3s -# ->430 string NTLDR\ nicht\ gefunden\xFF\r\n ->>453 string Datentr\204gerfehler\xFF\r\n ->>>473 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (german) ->>>>417 ubyte&0xDF >0 ->>>>>417 string x %-.5s ->>>>>>422 ubyte&0xDF >0 ->>>>>>>422 string x \b%-.3s ->>>>>425 ubyte&0xDF >0 ->>>>>>425 string >\ \b.%-.3s -# offset variant ->>>>379 string \0 ->>>>>368 ubyte&0xDF >0 ->>>>>>368 string x %-.5s ->>>>>>>373 ubyte&0xDF >0 ->>>>>>>>373 string x \b%-.3s -# ->430 string NTLDR\ fehlt\xFF\r\n ->>444 string Datentr\204gerfehler\xFF\r\n ->>>464 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (2.german) ->>>>417 ubyte&0xDF >0 ->>>>>417 string x %-.5s ->>>>>>422 ubyte&0xDF >0 ->>>>>>>422 string x \b%-.3s ->>>>>425 ubyte&0xDF >0 ->>>>>>425 string >\ \b.%-.3s -# variant ->>>>371 ubyte >0x20 ->>>>>368 ubyte&0xDF >0 ->>>>>>368 string x %-.5s ->>>>>>>373 ubyte&0xDF >0 ->>>>>>>>373 string x \b%-.3s ->>>>>>376 ubyte&0xDF >0 ->>>>>>>376 string x \b.%-.3s -# ->430 string NTLDR\ fehlt\xFF\r\n ->>444 string Medienfehler\xFF\r\n ->>>459 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (3.german) ->>>>371 ubyte >0x20 ->>>>>368 ubyte&0xDF >0 ->>>>>>368 string x %-.5s ->>>>>>>373 ubyte&0xDF >0 ->>>>>>>>373 string x \b%-.3s ->>>>>>376 ubyte&0xDF >0 ->>>>>>>376 string x \b.%-.3s -# variant ->>>>417 ubyte&0xDF >0 ->>>>>417 string x %-.5s ->>>>>>422 ubyte&0xDF >0 ->>>>>>>422 string x \b%-.3s ->>>>>425 ubyte&0xDF >0 ->>>>>>425 string >\ \b.%-.3s -# ->430 string Datentr\204ger\ entfernen\xFF\r\n ->>454 string Medienfehler\xFF\r\n ->>>469 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (4.german) ->>>>379 string \0 ->>>>>368 ubyte&0xDF >0 ->>>>>>368 string x %-.5s ->>>>>>>373 ubyte&0xDF >0 ->>>>>>>>373 string x \b%-.3s ->>>>>>376 ubyte&0xDF >0 ->>>>>>>376 string x \b.%-.3s -# variant ->>>>417 ubyte&0xDF >0 ->>>>>417 string x %-.5s ->>>>>>422 ubyte&0xDF >0 ->>>>>>>422 string x \b%-.3s ->>>>>425 ubyte&0xDF >0 ->>>>>>425 string >\ \b.%-.3s -# - -#>3 string NTFS\ \ \ \ ->389 string Fehler\ beim\ Lesen\ ->>407 string des\ Datentr\204gers ->>>426 string NTLDR\ fehlt ->>>>440 string NTLDR\ ist\ komprimiert ->>>>>464 string Neustart\ mit\ Strg+Alt+Entf\r \b, Microsoft Windows XP Bootloader NTFS (german) -#>3 string NTFS\ \ \ \ ->313 string A\ disk\ read\ error\ occurred.\r ->>345 string A\ kernel\ file\ is\ missing\ ->>>370 string from\ the\ disk.\r ->>>>484 string NTLDR\ is\ compressed ->>>>>429 string Insert\ a\ system\ diskette\ ->>>>>>454 string and\ restart\r\nthe\ system.\r \b, Microsoft Windows XP Bootloader NTFS -# DOS loader variants different languages,offsets ->472 ubyte&0xDF >0 ->>389 string Invalid\ system\ disk\xFF\r\n ->>>411 string Disk\ I/O\ error ->>>>428 string Replace\ the\ disk,\ and\ ->>>>>455 string press\ any\ key \b, Microsoft Windows 98 Bootloader -#IO.SYS ->>>>>>472 ubyte&0xDF >0 ->>>>>>>472 string x \b %-.2s ->>>>>>>>474 ubyte&0xDF >0 ->>>>>>>>>474 string x \b%-.5s ->>>>>>>>>>479 ubyte&0xDF >0 ->>>>>>>>>>>479 string x \b%-.1s ->>>>>>>480 ubyte&0xDF >0 ->>>>>>>>480 string x \b.%-.3s -#MSDOS.SYS ->>>>>>>483 ubyte&0xDF >0 \b+ ->>>>>>>>483 string x \b%-.5s ->>>>>>>>>488 ubyte&0xDF >0 ->>>>>>>>>>488 string x \b%-.3s ->>>>>>>>491 ubyte&0xDF >0 ->>>>>>>>>491 string x \b.%-.3s -# ->>390 string Invalid\ system\ disk\xFF\r\n ->>>412 string Disk\ I/O\ error\xFF\r\n ->>>>429 string Replace\ the\ disk,\ and\ ->>>>>451 string then\ press\ any\ key\r \b, Microsoft Windows 98 Bootloader ->>388 string Ungueltiges\ System\ \xFF\r\n ->>>410 string E/A-Fehler\ \ \ \ \xFF\r\n ->>>>427 string Datentraeger\ wechseln\ und\ ->>>>>453 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (german) -#WINBOOT.SYS only not spaces (0xDF) ->>>>>>497 ubyte&0xDF >0 ->>>>>>>497 string x %-.5s ->>>>>>>>502 ubyte&0xDF >0 ->>>>>>>>>502 string x \b%-.1s ->>>>>>>>>>503 ubyte&0xDF >0 ->>>>>>>>>>>503 string x \b%-.1s ->>>>>>>>>>>>504 ubyte&0xDF >0 ->>>>>>>>>>>>>504 string x \b%-.1s ->>>>>>505 ubyte&0xDF >0 ->>>>>>>505 string x \b.%-.3s -#IO.SYS ->>>>>>472 ubyte&0xDF >0 or ->>>>>>>472 string x \b %-.2s ->>>>>>>>474 ubyte&0xDF >0 ->>>>>>>>>474 string x \b%-.5s ->>>>>>>>>>479 ubyte&0xDF >0 ->>>>>>>>>>>479 string x \b%-.1s ->>>>>>>480 ubyte&0xDF >0 ->>>>>>>>480 string x \b.%-.3s -#MSDOS.SYS ->>>>>>>483 ubyte&0xDF >0 \b+ ->>>>>>>>483 string x \b%-.5s ->>>>>>>>>488 ubyte&0xDF >0 ->>>>>>>>>>488 string x \b%-.3s ->>>>>>>>491 ubyte&0xDF >0 ->>>>>>>>>491 string x \b.%-.3s -# ->>390 string Ungueltiges\ System\ \xFF\r\n ->>>412 string E/A-Fehler\ \ \ \ \xFF\r\n ->>>>429 string Datentraeger\ wechseln\ und\ ->>>>>455 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (German) -#WINBOOT.SYS only not spaces (0xDF) ->>>>>>497 ubyte&0xDF >0 ->>>>>>>497 string x %-.7s ->>>>>>>>504 ubyte&0xDF >0 ->>>>>>>>>504 string x \b%-.1s ->>>>>>505 ubyte&0xDF >0 ->>>>>>>505 string x \b.%-.3s -#IO.SYS ->>>>>>472 ubyte&0xDF >0 or ->>>>>>>472 string x \b %-.2s ->>>>>>>>474 ubyte&0xDF >0 ->>>>>>>>>474 string x \b%-.6s ->>>>>>>480 ubyte&0xDF >0 ->>>>>>>>480 string x \b.%-.3s -#MSDOS.SYS ->>>>>>>483 ubyte&0xDF >0 \b+ ->>>>>>>>483 string x \b%-.5s ->>>>>>>>>488 ubyte&0xDF >0 ->>>>>>>>>>488 string x \b%-.3s ->>>>>>>>491 ubyte&0xDF >0 ->>>>>>>>>491 string x \b.%-.3s -# ->>389 string Ungueltiges\ System\ \xFF\r\n ->>>411 string E/A-Fehler\ \ \ \ \xFF\r\n ->>>>428 string Datentraeger\ wechseln\ und\ ->>>>>454 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (GERMAN) -# DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes ->>>>>>472 string x %-.2s ->>>>>>>474 ubyte&0xDF >0 ->>>>>>>>474 string x \b%-.5s ->>>>>>>>479 ubyte&0xDF >0 ->>>>>>>>>479 string x \b%-.1s ->>>>>>480 ubyte&0xDF >0 ->>>>>>>480 string x \b.%-.3s ->>>>>>483 ubyte&0xDF >0 \b+ ->>>>>>>483 string x \b%-.5s ->>>>>>>488 ubyte&0xDF >0 ->>>>>>>>488 string x \b%-.2s ->>>>>>>>490 ubyte&0xDF >0 ->>>>>>>>>490 string x \b%-.1s ->>>>>>>491 ubyte&0xDF >0 ->>>>>>>>491 string x \b.%-.3s ->479 ubyte&0xDF >0 ->>416 string Kein\ System\ oder\ ->>>433 string Laufwerksfehler ->>>>450 string Wechseln\ und\ Taste\ dr\201cken \b, Microsoft DOS Bootloader (german) -#IO.SYS ->>>>>479 string x \b %-.2s ->>>>>>481 ubyte&0xDF >0 ->>>>>>>481 string x \b%-.6s ->>>>>487 ubyte&0xDF >0 ->>>>>>487 string x \b.%-.3s -#MSDOS.SYS ->>>>>>490 ubyte&0xDF >0 \b+ ->>>>>>>490 string x \b%-.5s ->>>>>>>>495 ubyte&0xDF >0 ->>>>>>>>>495 string x \b%-.3s ->>>>>>>498 ubyte&0xDF >0 ->>>>>>>>498 string x \b.%-.3s -# ->376 search/41 Non-System\ disk\ or\ ->>395 search/41 disk\ error\r ->>>407 search/41 Replace\ and\ ->>>>419 search/41 press\ \b, ->>>>419 search/41 strike\ \b, old ->>>>426 search/41 any\ key\ when\ ready\r MS or PC-DOS bootloader -#449 Disk\ Boot\ failure\r MS 3.21 -#466 Boot\ Failure\r MS 3.30 ->>>>>468 search/18 \0 -#IO.SYS,IBMBIO.COM ->>>>>>&0 string x \b %-.2s ->>>>>>>&-20 ubyte&0xDF >0 ->>>>>>>>&-1 string x \b%-.4s ->>>>>>>>>&-16 ubyte&0xDF >0 ->>>>>>>>>>&-1 string x \b%-.2s ->>>>>>&8 ubyte&0xDF >0 \b. ->>>>>>>&-1 string x \b%-.3s -#MSDOS.SYS,IBMDOS.COM ->>>>>>&11 ubyte&0xDF >0 \b+ ->>>>>>>&-1 string x \b%-.5s ->>>>>>>>&-6 ubyte&0xDF >0 ->>>>>>>>>&-1 string x \b%-.1s ->>>>>>>>>>&-5 ubyte&0xDF >0 ->>>>>>>>>>>&-1 string x \b%-.2s ->>>>>>>&7 ubyte&0xDF >0 \b. ->>>>>>>>&-1 string x \b%-.3s ->441 string Cannot\ load\ from\ harddisk.\n\r ->>469 string Insert\ Systemdisk\ ->>>487 string and\ press\ any\ key.\n\r \b, MS (2.11) DOS bootloader -#>43 string \224R-LOADER\ \ SYS =label ->54 string SYS ->>324 string VASKK ->>>495 string NEWLDR\0 \b, DR-DOS Bootloader (LOADER.SYS) -# ->98 string Press\ a\ key\ to\ retry\0\r ->>120 string Cannot\ find\ file\ \0\r ->>>139 string Disk\ read\ error\0\r ->>>>156 string Loading\ ...\0 \b, DR-DOS (3.41) Bootloader -#DRBIOS.SYS ->>>>>44 ubyte&0xDF >0 ->>>>>>44 string x \b %-.6s ->>>>>>>50 ubyte&0xDF >0 ->>>>>>>>50 string x \b%-.2s ->>>>>>52 ubyte&0xDF >0 ->>>>>>>52 string x \b.%-.3s -# ->70 string IBMBIO\ \ COM ->>472 string Cannot\ load\ DOS!\ ->>>489 string Any\ key\ to\ retry \b, DR-DOS Bootloader ->>471 string Cannot\ load\ DOS\ ->>487 string press\ key\ to\ retry \b, Open-DOS Bootloader -#?? ->444 string KERNEL\ \ SYS ->>314 string BOOT\ error! \b, FREE-DOS Bootloader ->499 string KERNEL\ \ SYS ->>305 string BOOT\ err!\0 \b, Free-DOS Bootloader ->449 string KERNEL\ \ SYS ->>319 string BOOT\ error! \b, FREE-DOS 0.5 Bootloader -# ->449 string Loading\ FreeDOS ->>0x1AF ulelong >0 \b, FREE-DOS 0.95,1.0 Bootloader ->>>497 ubyte&0xDF >0 ->>>>497 string x \b %-.6s ->>>>>503 ubyte&0xDF >0 ->>>>>>503 string x \b%-.1s ->>>>>>>504 ubyte&0xDF >0 ->>>>>>>>504 string x \b%-.1s ->>>>505 ubyte&0xDF >0 ->>>>>505 string x \b.%-.3s -# ->331 string Error!.0 \b, FREE-DOS 1.0 bootloader -# ->125 string Loading\ FreeDOS...\r ->>311 string BOOT\ error!\r \b, FREE-DOS bootloader ->>>441 ubyte&0xDF >0 ->>>>441 string x \b %-.6s ->>>>>447 ubyte&0xDF >0 ->>>>>>447 string x \b%-.1s ->>>>>>>448 ubyte&0xDF >0 ->>>>>>>>448 string x \b%-.1s ->>>>449 ubyte&0xDF >0 ->>>>>449 string x \b.%-.3s ->124 string FreeDOS\0 ->>331 string \ err\0 \b, FREE-DOS BETa 0.9 Bootloader -# DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes ->>>497 ubyte&0xDF >0 ->>>>497 string x \b %-.6s ->>>>>503 ubyte&0xDF >0 ->>>>>>503 string x \b%-.1s ->>>>>>>504 ubyte&0xDF >0 ->>>>>>>>504 string x \b%-.1s ->>>>505 ubyte&0xDF >0 ->>>>>505 string x \b.%-.3s ->>333 string \ err\0 \b, FREE-DOS BEta 0.9 Bootloader ->>>497 ubyte&0xDF >0 ->>>>497 string x \b %-.6s ->>>>>503 ubyte&0xDF >0 ->>>>>>503 string x \b%-.1s ->>>>>>>504 ubyte&0xDF >0 ->>>>>>>>504 string x \b%-.1s ->>>>505 ubyte&0xDF >0 ->>>>>505 string x \b.%-.3s ->>334 string \ err\0 \b, FREE-DOS Beta 0.9 Bootloader ->>>497 ubyte&0xDF >0 ->>>>497 string x \b %-.6s ->>>>>503 ubyte&0xDF >0 ->>>>>>503 string x \b%-.1s ->>>>>>>504 ubyte&0xDF >0 ->>>>>>>>504 string x \b%-.1s ->>>>505 ubyte&0xDF >0 ->>>>>505 string x \b.%-.3s ->336 string Error!\ ->>343 string Hit\ a\ key\ to\ reboot. \b, FREE-DOS Beta 0.9sr1 Bootloader ->>>497 ubyte&0xDF >0 ->>>>497 string x \b %-.6s ->>>>>503 ubyte&0xDF >0 ->>>>>>503 string x \b%-.1s ->>>>>>>504 ubyte&0xDF >0 ->>>>>>>>504 string x \b%-.1s ->>>>505 ubyte&0xDF >0 ->>>>>505 string x \b.%-.3s -# added by Joerg Jenderek -# http://www.visopsys.org/ -# http://partitionlogic.org.uk/ -# OEM-ID=Visopsys ->478 ulelong 0 ->>(1.b+326) string I/O\ Error\ reading\ ->>>(1.b+344) string Visopsys\ loader\r ->>>>(1.b+361) string Press\ any\ key\ to\ continue.\r \b, Visopsys loader -# http://alexfru.chat.ru/epm.html#bootprog ->494 ubyte >0x4D ->>495 string >E ->>>495 string <S -#OEM-ID is not reliable ->>>>3 string BootProg -# It just looks for a program file name at the root directory -# and loads corresponding file with following execution. -# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes ->>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader ->>>>>499 string x \b %-.1s ->>>>>>500 ubyte&0xDF >0 ->>>>>>>500 string x \b%-.1s ->>>>>>>>501 ubyte&0xDF >0 ->>>>>>>>>501 string x \b%-.1s ->>>>>>>>>>502 ubyte&0xDF >0 ->>>>>>>>>>>502 string x \b%-.1s ->>>>>>>>>>>>503 ubyte&0xDF >0 ->>>>>>>>>>>>>503 string x \b%-.1s ->>>>>>>>>>>>>>504 ubyte&0xDF >0 ->>>>>>>>>>>>>>>504 string x \b%-.1s ->>>>>>>>>>>>>>>>505 ubyte&0xDF >0 ->>>>>>>>>>>>>>>>>505 string x \b%-.1s ->>>>>>>>>>>>>>>>>>506 ubyte&0xDF >0 ->>>>>>>>>>>>>>>>>>>506 string x \b%-.1s -#name extension ->>>>>507 ubyte&0xDF >0 \b. ->>>>>>507 string x \b%-.1s ->>>>>>>508 ubyte&0xDF >0 ->>>>>>>>508 string x \b%-.1s ->>>>>>>>>509 ubyte&0xDF >0 ->>>>>>>>>>509 string x \b%-.1s -#If the boot sector fails to read any other sector, -#it prints a very short message ("RE") to the screen and hangs the computer. -#If the boot sector fails to find needed program in the root directory, -#it also hangs with another message ("NF"). ->>>>>492 string RENF \b, FAT (12 bit) ->>>>>495 string RENF \b, FAT (16 bit) -# http://alexfru.chat.ru/epm.html#bootprog ->494 ubyte >0x4D ->>495 string >E ->>>495 string <S -#OEM-ID is not reliable ->>>>3 string BootProg -# It just looks for a program file name at the root directory -# and loads corresponding file with following execution. -# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes ->>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader ->>>>>499 string x \b %-.1s ->>>>>>500 ubyte&0xDF >0 ->>>>>>>500 string x \b%-.1s ->>>>>>>>501 ubyte&0xDF >0 ->>>>>>>>>501 string x \b%-.1s ->>>>>>>>>>502 ubyte&0xDF >0 ->>>>>>>>>>>502 string x \b%-.1s ->>>>>>>>>>>>503 ubyte&0xDF >0 ->>>>>>>>>>>>>503 string x \b%-.1s ->>>>>>>>>>>>>>504 ubyte&0xDF >0 ->>>>>>>>>>>>>>>504 string x \b%-.1s ->>>>>>>>>>>>>>>>505 ubyte&0xDF >0 ->>>>>>>>>>>>>>>>>505 string x \b%-.1s ->>>>>>>>>>>>>>>>>>506 ubyte&0xDF >0 ->>>>>>>>>>>>>>>>>>>506 string x \b%-.1s -#name extension ->>>>>507 ubyte&0xDF >0 \b. ->>>>>>507 string x \b%-.1s ->>>>>>>508 ubyte&0xDF >0 ->>>>>>>>508 string x \b%-.1s ->>>>>>>>>509 ubyte&0xDF >0 ->>>>>>>>>>509 string x \b%-.1s -#If the boot sector fails to read any other sector, -#it prints a very short message ("RE") to the screen and hangs the computer. -#If the boot sector fails to find needed program in the root directory, -#it also hangs with another message ("NF"). ->>>>>492 string RENF \b, FAT (12 bit) ->>>>>495 string RENF \b, FAT (16 bit) -# x86 bootloader end -# updated by Joerg Jenderek at Sep 2007 ->3 ubyte 0 -#no active flag ->>446 ubyte 0 -# partition 1 not empty ->>>450 ubyte >0 -# partitions 3,4 empty ->>>>482 ubyte 0 ->>>>>498 ubyte 0 -# partition 2 ID=0,5,15 ->>>>>>466 ubyte <0x10 ->>>>>>>466 ubyte 0x05 \b, extended partition table ->>>>>>>466 ubyte 0x0F \b, extended partition table (LBA) ->>>>>>>466 ubyte 0x0 \b, extended partition table (last) -# JuMP short bootcodeoffset NOP assembler instructions will usually be EB xx 90 -# http://mirror.href.com/thestarman/asm/2bytejumps.htmm#FWD -# older drives may use Near JuMP instruction E9 xx xx ->0 lelong&0x009000EB 0x009000EB ->0 lelong&0x000000E9 0x000000E9 -# minimal short forward jump found 03cx?? -# maximal short forward jump is 07fx ->1 ubyte <0xff \b, code offset 0x%x -# mtools-3.9.8/msdos.h -# usual values are marked with comments to get only informations of strange FAT systems -# valid sectorsize must be a power of 2 from 32 to 32768 ->>11 uleshort&0x000f x ->>>11 uleshort <32769 ->>>>11 uleshort >31 ->>>>>21 ubyte&0xf0 0xF0 ->>>>>>3 string >\0 \b, OEM-ID "%8.8s" -#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC ->>>>>>>8 string IHC \b cached by Windows 9M ->>>>>>11 uleshort >512 \b, Bytes/sector %u -#>>>>>>11 uleshort =512 \b, Bytes/sector %u=512 (usual) ->>>>>>11 uleshort <512 \b, Bytes/sector %u ->>>>>>13 ubyte >1 \b, sectors/cluster %u -#>>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies) ->>>>>>14 uleshort >32 \b, reserved sectors %u -#>>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32) -#>>>>>>14 uleshort >1 \b, reserved sectors %u -#>>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16) ->>>>>>14 uleshort <1 \b, reserved sectors %u ->>>>>>16 ubyte >2 \b, FATs %u -#>>>>>>16 ubyte =2 \b, FATs %u (usual) ->>>>>>16 ubyte =1 \b, FAT %u ->>>>>>16 ubyte >0 ->>>>>>17 uleshort >0 \b, root entries %u -#>>>>>>17 uleshort =0 \b, root entries %u=0 (usual Fat32) ->>>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB) -#>>>>>>19 uleshort =0 \b, sectors %u=0 (usual Fat32) ->>>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x -#>>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy) ->>>>>>21 ubyte <0xF0 \b, Media descriptor 0x%x ->>>>>>22 uleshort >0 \b, sectors/FAT %u -#>>>>>>22 uleshort =0 \b, sectors/FAT %u=0 (usual Fat32) ->>>>>>26 ubyte >2 \b, heads %u -#>>>>>>26 ubyte =2 \b, heads %u (usual floppy) ->>>>>>26 ubyte =1 \b, heads %u -#skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk ->>>>>>38 ubyte !0x70 ->>>>>>>28 ulelong >0 \b, hidden sectors %u -#>>>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy) ->>>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB) -#>>>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB) -# FAT<32 specific ->>>>>>82 string !FAT32 -#>>>>>>>36 ubyte 0x80 \b, physical drive 0x%x=0x80 (usual harddisk) -#>>>>>>>36 ubyte 0 \b, physical drive 0x%x=0 (usual floppy) ->>>>>>>36 ubyte !0x80 ->>>>>>>>36 ubyte !0 \b, physical drive 0x%x ->>>>>>>37 ubyte >0 \b, reserved 0x%x -#>>>>>>>37 ubyte =0 \b, reserved 0x%x ->>>>>>>38 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) ->>>>>>>38 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) ->>>>>>>38 ubyte =0x29 ->>>>>>>>39 ulelong x \b, serial number 0x%x ->>>>>>>>43 string <NO\ NAME \b, label: "%11.11s" ->>>>>>>>43 string >NO\ NAME \b, label: "%11.11s" ->>>>>>>>43 string =NO\ NAME \b, unlabeled ->>>>>>>54 string FAT \b, FAT ->>>>>>>>54 string FAT12 \b (12 bit) ->>>>>>>>54 string FAT16 \b (16 bit) -# FAT32 specific ->>>>>>82 string FAT32 \b, FAT (32 bit) ->>>>>>>36 ulelong x \b, sectors/FAT %u ->>>>>>>40 uleshort >0 \b, extension flags %u -#>>>>>>>40 uleshort =0 \b, extension flags %u ->>>>>>>42 uleshort >0 \b, fsVersion %u -#>>>>>>>42 uleshort =0 \b, fsVersion %u (usual) ->>>>>>>44 ulelong >2 \b, rootdir cluster %u -#>>>>>>>44 ulelong =2 \b, rootdir cluster %u -#>>>>>>>44 ulelong =1 \b, rootdir cluster %u ->>>>>>>48 uleshort >1 \b, infoSector %u -#>>>>>>>48 uleshort =1 \b, infoSector %u (usual) ->>>>>>>48 uleshort <1 \b, infoSector %u ->>>>>>>50 uleshort >6 \b, Backup boot sector %u -#>>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual) ->>>>>>>50 uleshort <6 \b, Backup boot sector %u ->>>>>>>54 ulelong >0 \b, reserved1 0x%x ->>>>>>>58 ulelong >0 \b, reserved2 0x%x ->>>>>>>62 ulelong >0 \b, reserved3 0x%x -# same structure as FAT1X ->>>>>>>64 ubyte >0x80 \b, physical drive 0x%x -#>>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk) ->>>>>>>64 ubyte&0x7F >0 \b, physical drive 0x%x -#>>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy) ->>>>>>>65 ubyte >0 \b, reserved 0x%x ->>>>>>>66 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) ->>>>>>>66 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) ->>>>>>>66 ubyte =0x29 ->>>>>>>>67 ulelong x \b, serial number 0x%x ->>>>>>>>71 string <NO\ NAME \b, label: "%11.11s" ->>>>>>>71 string >NO\ NAME \b, label: "%11.11s" ->>>>>>>71 string =NO\ NAME \b, unlabeled -### FATs end ->0x200 lelong 0x82564557 \b, BSD disklabel -# FATX -0 string FATX FATX filesystem data - - -# Minix filesystems - Juan Cespedes <cespedes@debian.org> -0x410 leshort 0x137f Minix filesystem -0x410 beshort 0x137f Minix filesystem (big endian) ->0x402 beshort !0 \b, %d zones ->0x1e string minix \b, bootable -0x410 leshort 0x138f Minix filesystem, 30 char names -0x410 leshort 0x2468 Minix filesystem, version 2 -0x410 leshort 0x2478 Minix filesystem, version 2, 30 char names - -# romfs filesystems - Juan Cespedes <cespedes@debian.org> -0 string -rom1fs- romfs filesystem, version 1 ->8 belong x %d bytes, ->16 string x named %s. - -# netboot image - Juan Cespedes <cespedes@debian.org> -0 lelong 0x1b031336L Netboot image, ->4 lelong&0xFFFFFF00 0 ->>4 lelong&0x100 0x000 mode 2 ->>4 lelong&0x100 0x100 mode 3 ->4 lelong&0xFFFFFF00 !0 unknown mode - -0x18b string OS/2 OS/2 Boot Manager - -# updated by Joerg Jenderek at Oct 2008!! -# http://syslinux.zytor.com/iso.php -0 ulelong 0x7c40eafa isolinux Loader -# http://syslinux.zytor.com/pxe.php -0 ulelong 0x007c05ea pxelinux Loader -0 ulelong 0x60669c66 pxelinux Loader - -# added by Joerg Jenderek -# In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or -# grub-1.94/kern/i386/pc/startup.S -# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data -# usual values are marked with comments to get only informations of strange GRUB loaders -0x200 uleshort 0x70EA -# found only version 3.{1,2} ->0x206 ubeshort >0x0300 -# GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > "00" ->>0x212 ubyte >0x29 ->>>0x213 ubyte >0x29 -# not iso9660_stage1_5 -#>>>0 ulelong&0x00BE5652 0x00BE5652 ->>>>0x213 ubyte >0x29 GRand Unified Bootloader -# config_file for stage1_5 is 0xffffffff + default "/boot/grub/stage2" ->>>>0x217 ubyte 0xFF stage1_5 ->>>>0x217 ubyte <0xFF stage2 ->>>>0x206 ubyte x \b version %u ->>>>0x207 ubyte x \b.%u -# module_size for 1.94 ->>>>0x208 ulelong <0xffffff \b, installed partition %u -#>>>>0x208 ulelong =0xffffff \b, %u (default) ->>>>0x208 ulelong >0xffffff \b, installed partition %u -# GRUB 0.5.95 unofficial ->>>>0x20C ulelong&0x2E300000 0x2E300000 -# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs ->>>>>0x20C ubyte x \b, identifier 0x%x -#>>>>>0x20D ubyte =0 \b, LBA flag 0x%x (default) ->>>>>0x20D ubyte >0 \b, LBA flag 0x%x -# GRUB version as string ->>>>>0x20E string >\0 \b, GRUB version %-s -# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default ->>>>>>0x215 ulong 0xffffffff ->>>>>>>0x219 string >\0 \b, configuration file %-s ->>>>>>0x215 ulong !0xffffffff ->>>>>>>0x215 string >\0 \b, configuration file %-s -# newer GRUB versions ->>>>0x20C ulelong&0x2E300000 !0x2E300000 -##>>>>>0x20C ulelong =0 \b, saved entry %d (usual) ->>>>>0x20C ulelong >0 \b, saved entry %d -# for 1.94 contains kernel image size -# for 0.93,0.94,0.96,0.97 -# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs 6=vstafs 7=jfs 8=xfs 9=iso9660 a=ufs2 ->>>>>0x210 ubyte x \b, identifier 0x%x -# The flag for LBA forcing is in most cases 0 -#>>>>>0x211 ubyte =0 \b, LBA flag 0x%x (default) ->>>>>0x211 ubyte >0 \b, LBA flag 0x%x -# GRUB version as string ->>>>>0x212 string >\0 \b, GRUB version %-s -# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default ->>>>>0x217 ulong 0xffffffff ->>>>>>0x21b string >\0 \b, configuration file %-s ->>>>>0x217 ulong !0xffffffff ->>>>>>0x217 string >\0 \b, configuration file %-s - -9564 lelong 0x00011954 Unix Fast File system [v1] (little-endian), ->8404 string x last mounted on %s, -#>9504 ledate x last checked at %s, ->8224 ledate x last written at %s, ->8401 byte x clean flag %d, ->8228 lelong x number of blocks %d, ->8232 lelong x number of data blocks %d, ->8236 lelong x number of cylinder groups %d, ->8240 lelong x block size %d, ->8244 lelong x fragment size %d, ->8252 lelong x minimum percentage of free blocks %d, ->8256 lelong x rotational delay %dms, ->8260 lelong x disk rotational speed %drps, ->8320 lelong 0 TIME optimization ->8320 lelong 1 SPACE optimization - -42332 lelong 0x19540119 Unix Fast File system [v2] (little-endian) ->&-1164 string x last mounted on %s, ->&-696 string >\0 volume name %s, ->&-304 leqldate x last written at %s, ->&-1167 byte x clean flag %d, ->&-1168 byte x readonly flag %d, ->&-296 lequad x number of blocks %lld, ->&-288 lequad x number of data blocks %lld, ->&-1332 lelong x number of cylinder groups %d, ->&-1328 lelong x block size %d, ->&-1324 lelong x fragment size %d, ->&-180 lelong x average file size %d, ->&-176 lelong x average number of files in dir %d, ->&-272 lequad x pending blocks to free %lld, ->&-264 lelong x pending inodes to free %ld, ->&-664 lequad x system-wide uuid %0llx, ->&-1316 lelong x minimum percentage of free blocks %d, ->&-1248 lelong 0 TIME optimization ->&-1248 lelong 1 SPACE optimization - -66908 lelong 0x19540119 Unix Fast File system [v2] (little-endian) ->&-1164 string x last mounted on %s, ->&-696 string >\0 volume name %s, ->&-304 leqldate x last written at %s, ->&-1167 byte x clean flag %d, ->&-1168 byte x readonly flag %d, ->&-296 lequad x number of blocks %lld, ->&-288 lequad x number of data blocks %lld, ->&-1332 lelong x number of cylinder groups %d, ->&-1328 lelong x block size %d, ->&-1324 lelong x fragment size %d, ->&-180 lelong x average file size %d, ->&-176 lelong x average number of files in dir %d, ->&-272 lequad x pending blocks to free %lld, ->&-264 lelong x pending inodes to free %ld, ->&-664 lequad x system-wide uuid %0llx, ->&-1316 lelong x minimum percentage of free blocks %d, ->&-1248 lelong 0 TIME optimization ->&-1248 lelong 1 SPACE optimization - -9564 belong 0x00011954 Unix Fast File system [v1] (big-endian), ->7168 belong 0x4c41424c Apple UFS Volume ->>7186 string x named %s, ->>7176 belong x volume label version %d, ->>7180 bedate x created on %s, ->8404 string x last mounted on %s, -#>9504 bedate x last checked at %s, ->8224 bedate x last written at %s, ->8401 byte x clean flag %d, ->8228 belong x number of blocks %d, ->8232 belong x number of data blocks %d, ->8236 belong x number of cylinder groups %d, ->8240 belong x block size %d, ->8244 belong x fragment size %d, ->8252 belong x minimum percentage of free blocks %d, ->8256 belong x rotational delay %dms, ->8260 belong x disk rotational speed %drps, ->8320 belong 0 TIME optimization ->8320 belong 1 SPACE optimization - -42332 belong 0x19540119 Unix Fast File system [v2] (big-endian) ->&-1164 string x last mounted on %s, ->&-696 string >\0 volume name %s, ->&-304 beqldate x last written at %s, ->&-1167 byte x clean flag %d, ->&-1168 byte x readonly flag %d, ->&-296 bequad x number of blocks %lld, ->&-288 bequad x number of data blocks %lld, ->&-1332 belong x number of cylinder groups %d, ->&-1328 belong x block size %d, ->&-1324 belong x fragment size %d, ->&-180 belong x average file size %d, ->&-176 belong x average number of files in dir %d, ->&-272 bequad x pending blocks to free %lld, ->&-264 belong x pending inodes to free %ld, ->&-664 bequad x system-wide uuid %0llx, ->&-1316 belong x minimum percentage of free blocks %d, ->&-1248 belong 0 TIME optimization ->&-1248 belong 1 SPACE optimization - -66908 belong 0x19540119 Unix Fast File system [v2] (big-endian) ->&-1164 string x last mounted on %s, ->&-696 string >\0 volume name %s, ->&-304 beqldate x last written at %s, ->&-1167 byte x clean flag %d, ->&-1168 byte x readonly flag %d, ->&-296 bequad x number of blocks %lld, ->&-288 bequad x number of data blocks %lld, ->&-1332 belong x number of cylinder groups %d, ->&-1328 belong x block size %d, ->&-1324 belong x fragment size %d, ->&-180 belong x average file size %d, ->&-176 belong x average number of files in dir %d, ->&-272 bequad x pending blocks to free %lld, ->&-264 belong x pending inodes to free %ld, ->&-664 bequad x system-wide uuid %0llx, ->&-1316 belong x minimum percentage of free blocks %d, ->&-1248 belong 0 TIME optimization ->&-1248 belong 1 SPACE optimization - -# ext2/ext3 filesystems - Andreas Dilger <adilger@dilger.ca> -# ext4 filesystem - Eric Sandeen <sandeen@sandeen.net> -# volume label and UUID Russell Coker -# http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/ -0x438 leshort 0xEF53 Linux ->0x44c lelong x rev %d ->0x43e leshort x \b.%d -# No journal? ext2 ->0x45c lelong ^0x0000004 ext2 filesystem data ->>0x43a leshort ^0x0000001 (mounted or unclean) -# Has a journal? ext3 or ext4 ->0x45c lelong &0x0000004 -# and small INCOMPAT? ->>0x460 lelong <0x0000040 -# and small RO_COMPAT? ->>>0x464 lelong <0x0000008 ext3 filesystem data -# else large RO_COMPAT? ->>>0x464 lelong >0x0000007 ext4 filesystem data -# else large INCOMPAT? ->>0x460 lelong >0x000003f ext4 filesystem data ->0x468 belong x \b, UUID=%08x ->0x46c beshort x \b-%04x ->0x46e beshort x \b-%04x ->0x470 beshort x \b-%04x ->0x472 belong x \b-%08x ->0x476 beshort x \b%04x ->0x478 string >0 \b, volume name "%s" -# General flags for any ext* fs ->0x460 lelong &0x0000004 (needs journal recovery) ->0x43a leshort &0x0000002 (errors) -# INCOMPAT flags ->0x460 lelong &0x0000001 (compressed) -#>0x460 lelong &0x0000002 (filetype) -#>0x460 lelong &0x0000010 (meta bg) ->0x460 lelong &0x0000040 (extents) ->0x460 lelong &0x0000080 (64bit) -#>0x460 lelong &0x0000100 (mmp) -#>0x460 lelong &0x0000200 (flex bg) -# RO_INCOMPAT flags -#>0x464 lelong &0x0000001 (sparse super) ->0x464 lelong &0x0000002 (large files) ->0x464 lelong &0x0000008 (huge files) -#>0x464 lelong &0x0000010 (gdt checksum) -#>0x464 lelong &0x0000020 (many subdirs) -#>0x463 lelong &0x0000040 (extra isize) - -# SGI disk labels - Nathan Scott <nathans@debian.org> -0 belong 0x0BE5A941 SGI disk label (volume header) - -# SGI XFS filesystem - Nathan Scott <nathans@debian.org> -0 belong 0x58465342 SGI XFS filesystem data ->0x4 belong x (blksz %d, ->0x68 beshort x inosz %d, ->0x64 beshort ^0x2004 v1 dirs) ->0x64 beshort &0x2004 v2 dirs) - -############################################################################ -# Minix-ST kernel floppy -0x800 belong 0x46fc2700 Atari-ST Minix kernel image ->19 string \240\5\371\5\0\011\0\2\0 \b, 720k floppy ->19 string \320\2\370\5\0\011\0\1\0 \b, 360k floppy - -############################################################################ -# Hmmm, is this a better way of detecting _standard_ floppy images ? -19 string \320\2\360\3\0\011\0\1\0 DOS floppy 360k ->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector -19 string \240\5\371\3\0\011\0\2\0 DOS floppy 720k ->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector -19 string \100\013\360\011\0\022\0\2\0 DOS floppy 1440k ->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector - -19 string \240\5\371\5\0\011\0\2\0 DOS floppy 720k, IBM ->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector -19 string \100\013\371\5\0\011\0\2\0 DOS floppy 1440k, mkdosfs ->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector - -19 string \320\2\370\5\0\011\0\1\0 Atari-ST floppy 360k -19 string \240\5\371\5\0\011\0\2\0 Atari-ST floppy 720k - -# Valid media descriptor bytes for MS-DOS: -# -# Byte Capacity Media Size and Type -# ------------------------------------------------- -# -# F0 2.88 MB 3.5-inch, 2-sided, 36-sector -# F0 1.44 MB 3.5-inch, 2-sided, 18-sector -# F9 720K 3.5-inch, 2-sided, 9-sector -# F9 1.2 MB 5.25-inch, 2-sided, 15-sector -# FD 360K 5.25-inch, 2-sided, 9-sector -# FF 320K 5.25-inch, 2-sided, 8-sector -# FC 180K 5.25-inch, 1-sided, 9-sector -# FE 160K 5.25-inch, 1-sided, 8-sector -# FE 250K 8-inch, 1-sided, single-density -# FD 500K 8-inch, 2-sided, single-density -# FE 1.2 MB 8-inch, 2-sided, double-density -# F8 ----- Fixed disk -# -# FC xxxK Apricot 70x1x9 boot disk. -# -# Originally a bitmap: -# xxxxxxx0 Not two sided -# xxxxxxx1 Double sided -# xxxxxx0x Not 8 SPT -# xxxxxx1x 8 SPT -# xxxxx0xx Not Removable drive -# xxxxx1xx Removable drive -# 11111xxx Must be one. -# -# But now it's rather random: -# 111111xx Low density disk -# 00 SS, Not 8 SPT -# 01 DS, Not 8 SPT -# 10 SS, 8 SPT -# 11 DS, 8 SPT -# -# 11111001 Double density 3� floppy disk, high density 5� -# 11110000 High density 3� floppy disk -# 11111000 Hard disk any format -# - -# CDROM Filesystems -# Modified for UDF by gerardo.cacciari@gmail.com -32769 string CD001 -!:mime application/x-iso9660-image ->38913 string !NSR0 ISO 9660 CD-ROM filesystem data ->38913 string NSR0 UDF filesystem data ->>38917 string 1 (version 1.0) ->>38917 string 2 (version 1.5) ->>38917 string 3 (version 2.0) ->>38917 byte >0x33 (unknown version, ID 0x%X) ->>38917 byte <0x31 (unknown version, ID 0x%X) -# "application id" which appears to be used as a volume label ->32808 string >\0 '%s' ->34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable) -37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors) -!:mime application/x-iso9660-image -32776 string CDROM High Sierra CD-ROM filesystem data - -# cramfs filesystem - russell@coker.com.au -0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian ->4 lelong x size %lu ->8 lelong &1 version #2 ->8 lelong &2 sorted_dirs ->8 lelong &4 hole_support ->32 lelong x CRC 0x%x, ->36 lelong x edition %lu, ->40 lelong x %lu blocks, ->44 lelong x %lu files - -0 belong 0x28cd3d45 Linux Compressed ROM File System data, big endian ->4 belong x size %lu ->8 belong &1 version #2 ->8 belong &2 sorted_dirs ->8 belong &4 hole_support ->32 belong x CRC 0x%x, ->36 belong x edition %lu, ->40 belong x %lu blocks, ->44 belong x %lu files - -# reiserfs - russell@coker.com.au -0x10034 string ReIsErFs ReiserFS V3.5 -0x10034 string ReIsEr2Fs ReiserFS V3.6 -0x10034 string ReIsEr3Fs ReiserFS V3.6.19 ->0x1002c leshort x block size %d ->0x10032 leshort &2 (mounted or unclean) ->0x10000 lelong x num blocks %d ->0x10040 lelong 1 tea hash ->0x10040 lelong 2 yura hash ->0x10040 lelong 3 r5 hash - -# JFFS - russell@coker.com.au -0 lelong 0x34383931 Linux Journalled Flash File system, little endian -0 belong 0x34383931 Linux Journalled Flash File system, big endian - -# EST flat binary format (which isn't, but anyway) -# From: Mark Brown <broonie@sirena.org.uk> -0 string ESTFBINR EST flat binary - -# Aculab VoIP firmware -# From: Mark Brown <broonie@sirena.org.uk> -0 string VoIP\ Startup\ and Aculab VoIP firmware ->35 string x format %s - -# u-boot/PPCBoot image file -# From: Mark Brown <broonie@sirena.org.uk> -0 belong 0x27051956 u-boot/PPCBoot image ->4 string PPCBoot ->>12 string x version %s - -# JFFS2 file system -0 leshort 0x1984 Linux old jffs2 filesystem data little endian -0 leshort 0x1985 Linux jffs2 filesystem data little endian - -# Squashfs -0 string sqsh Squashfs filesystem, big endian, ->28 beshort x version %d. ->30 beshort x \b%d, ->28 beshort <3 ->>8 belong x %d bytes, ->28 beshort >2 ->>63 bequad x %lld bytes, -#>>67 belong x %d bytes, ->4 belong x %d inodes, ->28 beshort <2 ->>32 beshort x blocksize: %d bytes, ->28 beshort >1 ->>51 belong x blocksize: %d bytes, ->39 bedate x created: %s -0 string hsqs Squashfs filesystem, little endian, ->28 leshort x version %d. ->30 leshort x \b%d, ->28 leshort <3 ->>8 lelong x %d bytes, ->28 leshort >2 ->>63 lequad x %lld bytes, -#>>63 lelong x %d bytes, ->4 lelong x %d inodes, ->28 leshort <2 ->>32 leshort x blocksize: %d bytes, ->28 leshort >1 ->>51 lelong x blocksize: %d bytes, ->39 ledate x created: %s - -0 string td\000 floppy image data (TeleDisk) - -# AFS Dump Magic -# From: Ty Sarna <tsarna@sarna.org> -0 string \x01\xb3\xa1\x13\x22 AFS Dump ->&0 belong x (v%d) ->>&0 byte 0x76 ->>>&0 belong x Vol %d, ->>>>&0 byte 0x6e ->>>>>&0 string x %s ->>>>>>&1 byte 0x74 ->>>>>>>&0 beshort 2 ->>>>>>>>&4 bedate x on: %s ->>>>>>>>&0 bedate =0 full dump ->>>>>>>>&0 bedate !0 incremental since: %s - -#---------------------------------------------------------- -# VMS backup savesets - gerardo.cacciari@gmail.com -# -4 string \x01\x00\x01\x00\x01\x00 ->(0.s+16) string \x01\x01 ->>&(&0.b+8) byte 0x42 OpenVMS backup saveset data ->>>40 lelong x (block size %d, ->>>49 string >\0 original name '%s', ->>>2 short 1024 VAX generated) ->>>2 short 2048 AXP generated) ->>>2 short 4096 I64 generated) - -# Summary: Oracle Clustered Filesystem -# Created by: Aaron Botsis <redhat@digitalmafia.org> -8 string OracleCFS Oracle Clustered Filesystem, ->4 long x rev %d ->0 long x \b.%d, ->560 string x label: %.64s, ->136 string x mountpoint: %.128s - -# Summary: Oracle ASM tagged volume -# Created by: Aaron Botsis <redhat@digitalmafia.org> -32 string ORCLDISK Oracle ASM Volume, ->40 string x Disk Name: %0.12s -32 string ORCLCLRD Oracle ASM Volume (cleared), ->40 string x Disk Name: %0.12s - -# Oracle Clustered Filesystem - Aaron Botsis <redhat@digitalmafia.org> -8 string OracleCFS Oracle Clustered Filesystem, ->4 long x rev %d ->0 long x \b.%d, ->560 string x label: %.64s, ->136 string x mountpoint: %.128s - -# Oracle ASM tagged volume - Aaron Botsis <redhat@digitalmafia.org> -32 string ORCLDISK Oracle ASM Volume, ->40 string x Disk Name: %0.12s -32 string ORCLCLRD Oracle ASM Volume (cleared), ->40 string x Disk Name: %0.12s - -# Compaq/HP RILOE floppy image -# From: Dirk Jagdmann <doj@cubic.org> -0 string CPQRFBLO Compaq/HP RILOE floppy image - -#------------------------------------------------------------------------------ -# Files-11 On-Disk Structure (OpenVMS file system) - gerardo.cacciari@gmail.com -# These bits come from LBN 1 (home block) of ODS-2 and ODS-5 volumes, which is -# mapped to VBN 2 of [000000]INDEXF.SYS;1 -# -1008 string DECFILE11B Files-11 On-Disk Structure ->525 byte x Level %d ->525 byte x (ODS-%d OpenVMS file system), ->984 string x volume label is '%-12.12s' - -# From: Thomas Klausner <wiz@NetBSD.org> -# http://filext.com/file-extension/DAA -# describes the daa file format. The magic would be: -0 string DAA\x0\x0\x0\x0\x0 PowerISO Direct-Access-Archive - -# From Albert Cahalan <acahalan@gmail.com> -# really le32 operation,destination,payloadsize (but quite predictable) -# 01 00 00 00 00 00 00 c0 00 02 00 00 -0 string \1\0\0\0\0\0\0\300\0\2\0\0 Marvell Libertas firmware - -# From Eric Sandeen -# GFS2 -0x10000 belong 0x01161970 GFS2 Filesystem ->0x10024 belong x (blocksize %d, ->0x10060 string >\0 lockproto %s) - -# BTRFS -0x10040 string _BHRfS_M BTRFS Filesystem ->0x1012b string >\0 (label "%s", ->0x10090 lelong x sectorsize %d, ->0x10094 lelong x nodesize %d, ->0x10098 lelong x leafsize %d) - - -# dvdisaster's .ecc -# From: "Nelson A. de Oliveira" <naoliv@gmail.com> -0 string *dvdisaster* dvdisaster error correction file - -# Type: CROM filesystem -# From: Werner Fink <werner@suse.de> -0 string CROMFS CROMFS ->6 string >\0 \b version %2.2s, ->8 ulequad >0 \b block data at %lld, ->16 ulequad >0 \b fblock table at %lld, ->24 ulequad >0 \b inode table at %lld, ->32 ulequad >0 \b root at %lld, ->40 ulelong >0 \b fblock size = %ld, ->44 ulelong >0 \b block size = %ld, ->48 ulequad >0 \b bytes = %lld - -#------------------------------------------------------------------------------ -# flash: file(1) magic for Macromedia Flash file format -# -# See -# -# http://www.macromedia.com/software/flash/open/ -# -0 string FWS Macromedia Flash data, ->3 byte x version %d -!:mime application/x-shockwave-flash -0 string CWS Macromedia Flash data (compressed), -!:mime application/x-shockwave-flash ->3 byte x version %d -# From: Cal Peake <cp@absolutedigital.net> -0 string FLV Macromedia Flash Video -!:mime video/x-flv - -# -# From Dave Wilson -0 string AGD4\xbe\xb8\xbb\xcb\x00 Macromedia Freehand 9 Document -#------------------------------------------------------------------------------ -# fonts: file(1) magic for font data -# -0 search/1 FONT ASCII vfont text -0 short 0436 Berkeley vfont data -0 short 017001 byte-swapped Berkeley vfont data - -# PostScript fonts (must precede "printer" entries), quinlan@yggdrasil.com -0 string %!PS-AdobeFont-1. PostScript Type 1 font text ->20 string >\0 (%s) -6 string %!PS-AdobeFont-1. PostScript Type 1 font program data - -# X11 font files in SNF (Server Natural Format) format -0 belong 00000004 X11 SNF font data, MSB first -0 lelong 00000004 X11 SNF font data, LSB first - -# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com) -0 search/1 STARTFONT\ X11 BDF font text - -# X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com) -# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides) -0 string \001fcp X11 Portable Compiled Font data ->12 byte 0x02 \b, LSB first ->12 byte 0x0a \b, MSB first -0 string D1.0\015 X11 Speedo font data - -#------------------------------------------------------------------------------ -# FIGlet fonts and controlfiles -# From figmagic supplied with Figlet version 2.2 -# "David E. O'Brien" <obrien@FreeBSD.ORG> -0 string flf FIGlet font ->3 string >2a version %-2.2s -0 string flc FIGlet controlfile ->3 string >2a version %-2.2s - -# libGrx graphics lib fonts, from Albert Cahalan (acahalan@cs.uml.edu) -# Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++ -0 belong 0x14025919 libGrx font data, ->8 leshort x %dx ->10 leshort x \b%d ->40 string x %s -# Misc. DOS VGA fonts, from Albert Cahalan (acahalan@cs.uml.edu) -0 belong 0xff464f4e DOS code page font data collection -7 belong 0x00454741 DOS code page font data -7 belong 0x00564944 DOS code page font data (from Linux?) -4098 string DOSFONT DOSFONT2 encrypted font data - -# downloadable fonts for browser (prints type) anthon@mnt.org -0 string PFR1 PFR1 font ->102 string >0 \b: %s - -# True Type fonts -0 string \000\001\000\000\000 TrueType font data - -0 string \007\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font -0 string \012\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font - -0 string ttcf TrueType font collection data - -# Opentype font data from Avi Bercovich -0 string OTTO OpenType font data - -# Gürkan Sengün <gurkan@linuks.mine.nu>, www.linuks.mine.nu -0 string SplineFontDB: Spline Font Database ->14 string x version %s -# FORTRAN source -0 regex/100 \^[Cc][\ \t] FORTRAN program -!:mime text/x-fortran -#------------------------------------------------------------------------------ -# frame: file(1) magic for FrameMaker files -# -# This stuff came on a FrameMaker demo tape, most of which is -# copyright, but this file is "published" as witness the following: -# -# Note that this is the Framemaker Maker Interchange Format, not the -# Normal format which would be application/vnd.framemaker. -# -0 string \<MakerFile FrameMaker document -!:mime application/x-mif ->11 string 5.5 (5.5 ->11 string 5.0 (5.0 ->11 string 4.0 (4.0 ->11 string 3.0 (3.0 ->11 string 2.0 (2.0 ->11 string 1.0 (1.0 ->14 byte x %c) -0 string \<MIFFile FrameMaker MIF (ASCII) file -!:mime application/x-mif ->9 string 4.0 (4.0) ->9 string 3.0 (3.0) ->9 string 2.0 (2.0) ->9 string 1.0 (1.x) -0 search/1 \<MakerDictionary FrameMaker Dictionary text -!:mime application/x-mif ->17 string 3.0 (3.0) ->17 string 2.0 (2.0) ->17 string 1.0 (1.x) -0 string \<MakerScreenFont FrameMaker Font file -!:mime application/x-mif ->17 string 1.01 (%s) -0 string \<MML FrameMaker MML file -!:mime application/x-mif -0 string \<BookFile FrameMaker Book file -!:mime application/x-mif ->10 string 3.0 (3.0 ->10 string 2.0 (2.0 ->10 string 1.0 (1.0 ->13 byte x %c) -# XXX - this book entry should be verified, if you find one, uncomment this -#0 string \<Book\ FrameMaker Book (ASCII) file -#!:mime application/x-mif -#>6 string 3.0 (3.0) -#>6 string 2.0 (2.0) -#>6 string 1.0 (1.0) -0 string \<Maker Intermediate Print File FrameMaker IPL file -!:mime application/x-mif - -#------------------------------------------------------------------------------ -# freebsd: file(1) magic for FreeBSD objects -# -# All new-style FreeBSD magic numbers are in host byte order (i.e., -# little-endian on x86). -# -# XXX - this comes from the file "freebsd" in a recent FreeBSD version of -# "file"; it, and the NetBSD stuff in "netbsd", appear to use different -# schemes for distinguishing between executable images, shared libraries, -# and object files. -# -# FreeBSD says: -# -# Regardless of whether it's pure, demand-paged, or none of the -# above: -# -# if the entry point is < 4096, then it's a shared library if -# the "has run-time loader information" bit is set, and is -# position-independent if the "is position-independent" bit -# is set; -# -# if the entry point is >= 4096 (or >4095, same thing), then it's -# an executable, and is dynamically-linked if the "has run-time -# loader information" bit is set. -# -# On x86, NetBSD says: -# -# If it's neither pure nor demand-paged: -# -# if it has the "has run-time loader information" bit set, it's -# a dynamically-linked executable; -# -# if it doesn't have that bit set, then: -# -# if it has the "is position-independent" bit set, it's -# position-independent; -# -# if the entry point is non-zero, it's an executable, otherwise -# it's an object file. -# -# If it's pure: -# -# if it has the "has run-time loader information" bit set, it's -# a dynamically-linked executable, otherwise it's just an -# executable. -# -# If it's demand-paged: -# -# if it has the "has run-time loader information" bit set, -# then: -# -# if the entry point is < 4096, it's a shared library; -# -# if the entry point is = 4096 or > 4096 (i.e., >= 4096), -# it's a dynamically-linked executable); -# -# if it doesn't have the "has run-time loader information" bit -# set, then it's just an executable. -# -# (On non-x86, NetBSD does much the same thing, except that it uses -# 8192 on 68K - except for "68k4k", which is presumably "68K with 4K -# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's -# had 8K pages; dunno about MIPS.) -# -# I suspect the two will differ only in perverse and uninteresting cases -# ("shared" libraries that aren't demand-paged and whose pages probably -# won't actually be shared, executables with entry points <4096). -# -# I leave it to those more familiar with FreeBSD and NetBSD to figure out -# what the right answer is (although using ">4095", FreeBSD-style, is -# probably better than separately checking for "=4096" and ">4096", -# NetBSD-style). (The old "netbsd" file analyzed FreeBSD demand paged -# executables using the NetBSD technique.) -# -0 lelong&0377777777 041400407 FreeBSD/i386 ->20 lelong <4096 ->>3 byte&0xC0 &0x80 shared library ->>3 byte&0xC0 0x40 PIC object ->>3 byte&0xC0 0x00 object ->20 lelong >4095 ->>3 byte&0x80 0x80 dynamically linked executable ->>3 byte&0x80 0x00 executable ->16 lelong >0 not stripped - -0 lelong&0377777777 041400410 FreeBSD/i386 pure ->20 lelong <4096 ->>3 byte&0xC0 &0x80 shared library ->>3 byte&0xC0 0x40 PIC object ->>3 byte&0xC0 0x00 object ->20 lelong >4095 ->>3 byte&0x80 0x80 dynamically linked executable ->>3 byte&0x80 0x00 executable ->16 lelong >0 not stripped - -0 lelong&0377777777 041400413 FreeBSD/i386 demand paged ->20 lelong <4096 ->>3 byte&0xC0 &0x80 shared library ->>3 byte&0xC0 0x40 PIC object ->>3 byte&0xC0 0x00 object ->20 lelong >4095 ->>3 byte&0x80 0x80 dynamically linked executable ->>3 byte&0x80 0x00 executable ->16 lelong >0 not stripped - -0 lelong&0377777777 041400314 FreeBSD/i386 compact demand paged ->20 lelong <4096 ->>3 byte&0xC0 &0x80 shared library ->>3 byte&0xC0 0x40 PIC object ->>3 byte&0xC0 0x00 object ->20 lelong >4095 ->>3 byte&0x80 0x80 dynamically linked executable ->>3 byte&0x80 0x00 executable ->16 lelong >0 not stripped - -# XXX gross hack to identify core files -# cores start with a struct tss; we take advantage of the following: -# byte 7: highest byte of the kernel stack pointer, always 0xfe -# 8/9: kernel (ring 0) ss value, always 0x0010 -# 10 - 27: ring 1 and 2 ss/esp, unused, thus always 0 -# 28: low order byte of the current PTD entry, always 0 since the -# PTD is page-aligned -# -7 string \357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 FreeBSD/i386 a.out core file ->1039 string >\0 from '%s' - -# /var/run/ld.so.hints -# What are you laughing about? -0 lelong 011421044151 ld.so hints file (Little Endian ->4 lelong >0 \b, version %d) ->4 belong <1 \b) -0 belong 011421044151 ld.so hints file (Big Endian ->4 belong >0 \b, version %d) ->4 belong <1 \b) - -# -# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities -# -0 string SCRSHOT_ scrshot(1) screenshot, ->8 byte x version %d, ->9 byte 2 %d bytes in header, ->>10 byte x %d chars wide by ->>11 byte x %d chars high - -#------------------------------------------------------------------------------ -# fsav: file(1) magic for datafellows fsav virus definition files -# Anthon van der Neut (anthon@mnt.org) - -# ftp://ftp.f-prot.com/pub/{macrdef2.zip,nomacro.def} -0 beshort 0x1575 fsav macro virus signatures ->8 leshort >0 (%d- ->11 byte >0 \b%02d- ->10 byte >0 \b%02d) -# ftp://ftp.f-prot.com/pub/sign.zip -#10 ubyte <12 -#>9 ubyte <32 -#>>8 ubyte 0x0a -#>>>12 ubyte 0x07 -#>>>>11 uleshort >0 fsav DOS/Windows virus signatures (%d- -#>>>>10 byte 0 \b01- -#>>>>10 byte 1 \b02- -#>>>>10 byte 2 \b03- -#>>>>10 byte 3 \b04- -#>>>>10 byte 4 \b05- -#>>>>10 byte 5 \b06- -#>>>>10 byte 6 \b07- -#>>>>10 byte 7 \b08- -#>>>>10 byte 8 \b09- -#>>>>10 byte 9 \b10- -#>>>>10 byte 10 \b11- -#>>>>10 byte 11 \b12- -#>>>>9 ubyte >0 \b%02d) -# ftp://ftp.f-prot.com/pub/sign2.zip -#0 ubyte 0x62 -#>1 ubyte 0xF5 -#>>2 ubyte 0x1 -#>>>3 ubyte 0x1 -#>>>>4 ubyte 0x0e -#>>>>>13 ubyte >0 fsav virus signatures -#>>>>>>11 ubyte x size 0x%02x -#>>>>>>12 ubyte x \b%02x -#>>>>>>13 ubyte x \b%02x bytes - -# Joerg Jenderek: joerg dot jenderek at web dot de -# http://www.clamav.net/doc/latest/html/node45.html -# .cvd files start with a 512 bytes colon separated header -# ClamAV-VDB:buildDate:version:signaturesNumbers:functionalityLevelRequired:MD5:Signature:builder:buildTime -# + gzipped tarball files -0 string ClamAV-VDB: ->11 string >\0 Clam AntiVirus database %-.23s ->>34 string : ->>>35 string !: \b, version ->>>>35 string x \b%-.1s ->>>>>36 string !: ->>>>>>36 string x \b%-.1s ->>>>>>>37 string !: ->>>>>>>>37 string x \b%-.1s ->>>>>>>>>38 string !: ->>>>>>>>>>38 string x \b%-.1s ->512 string \037\213 \b, gzipped ->769 string ustar\0 \b, tarred - -# Type: Grisoft AVG AntiVirus -# From: David Newgas <david@newgas.net> -0 string AVG7_ANTIVIRUS_VAULT_FILE AVG 7 Antivirus vault file data -#------------------------------------------------------------------------------ -# games: file(1) for games - -# Fabio Bonelli <fabiobonelli@libero.it> -# Quake II - III data files -0 string IDP2 Quake II 3D Model file, ->20 long x %lu skin(s), ->8 long x (%lu x ->12 long x %lu), ->40 long x %lu frame(s), ->16 long x Frame size %lu bytes, ->24 long x %lu vertices/frame, ->28 long x %lu texture coordinates, ->32 long x %lu triangles/frame - -0 string IBSP Quake ->4 long 0x26 II Map file (BSP) ->4 long 0x2E III Map file (BSP) - -0 string IDS2 Quake II SP2 sprite file - -#--------------------------------------------------------------------------- -# Doom and Quake -# submitted by Nicolas Patrois - -0 string \xcb\x1dBoom\xe6\xff\x03\x01 Boom or linuxdoom demo -# some doom lmp files don't match, I've got one beginning with \x6d\x02\x01\x01 - -24 string LxD\ 203 Linuxdoom save ->0 string x , name=%s ->44 string x , world=%s - -# Quake - -0 string PACK Quake I or II world or extension ->8 lelong >0 \b, %d entries - -#0 string -1\x0a Quake I demo -#>30 string x version %.4s -#>61 string x level %s - -#0 string 5\x0a Quake I save - -# The levels - -# Quake 1 - -0 string 5\x0aIntroduction Quake I save: start Introduction -0 string 5\x0athe_Slipgate_Complex Quake I save: e1m1 The slipgate complex -0 string 5\x0aCastle_of_the_Damned Quake I save: e1m2 Castle of the damned -0 string 5\x0athe_Necropolis Quake I save: e1m3 The necropolis -0 string 5\x0athe_Grisly_Grotto Quake I save: e1m4 The grisly grotto -0 string 5\x0aZiggurat_Vertigo Quake I save: e1m8 Ziggurat vertigo (secret) -0 string 5\x0aGloom_Keep Quake I save: e1m5 Gloom keep -0 string 5\x0aThe_Door_To_Chthon Quake I save: e1m6 The door to Chthon -0 string 5\x0aThe_House_of_Chthon Quake I save: e1m7 The house of Chthon -0 string 5\x0athe_Installation Quake I save: e2m1 The installation -0 string 5\x0athe_Ogre_Citadel Quake I save: e2m2 The ogre citadel -0 string 5\x0athe_Crypt_of_Decay Quake I save: e2m3 The crypt of decay (dopefish lives!) -0 string 5\x0aUnderearth Quake I save: e2m7 Underearth (secret) -0 string 5\x0athe_Ebon_Fortress Quake I save: e2m4 The ebon fortress -0 string 5\x0athe_Wizard's_Manse Quake I save: e2m5 The wizard's manse -0 string 5\x0athe_Dismal_Oubliette Quake I save: e2m6 The dismal oubliette -0 string 5\x0aTermination_Central Quake I save: e3m1 Termination central -0 string 5\x0aVaults_of_Zin Quake I save: e3m2 Vaults of Zin -0 string 5\x0athe_Tomb_of_Terror Quake I save: e3m3 The tomb of terror -0 string 5\x0aSatan's_Dark_Delight Quake I save: e3m4 Satan's dark delight -0 string 5\x0athe_Haunted_Halls Quake I save: e3m7 The haunted halls (secret) -0 string 5\x0aWind_Tunnels Quake I save: e3m5 Wind tunnels -0 string 5\x0aChambers_of_Torment Quake I save: e3m6 Chambers of torment -0 string 5\x0athe_Sewage_System Quake I save: e4m1 The sewage system -0 string 5\x0aThe_Tower_of_Despair Quake I save: e4m2 The tower of despair -0 string 5\x0aThe_Elder_God_Shrine Quake I save: e4m3 The elder god shrine -0 string 5\x0athe_Palace_of_Hate Quake I save: e4m4 The palace of hate -0 string 5\x0aHell's_Atrium Quake I save: e4m5 Hell's atrium -0 string 5\x0athe_Nameless_City Quake I save: e4m8 The nameless city (secret) -0 string 5\x0aThe_Pain_Maze Quake I save: e4m6 The pain maze -0 string 5\x0aAzure_Agony Quake I save: e4m7 Azure agony -0 string 5\x0aShub-Niggurath's_Pit Quake I save: end Shub-Niggurath's pit - -# Quake DeathMatch levels - -0 string 5\x0aPlace_of_Two_Deaths Quake I save: dm1 Place of two deaths -0 string 5\x0aClaustrophobopolis Quake I save: dm2 Claustrophobopolis -0 string 5\x0aThe_Abandoned_Base Quake I save: dm3 The abandoned base -0 string 5\x0aThe_Bad_Place Quake I save: dm4 The bad place -0 string 5\x0aThe_Cistern Quake I save: dm5 The cistern -0 string 5\x0aThe_Dark_Zone Quake I save: dm6 The dark zone - -# Scourge of Armagon - -0 string 5\x0aCommand_HQ Quake I save: start Command HQ -0 string 5\x0aThe_Pumping_Station Quake I save: hip1m1 The pumping station -0 string 5\x0aStorage_Facility Quake I save: hip1m2 Storage facility -0 string 5\x0aMilitary_Complex Quake I save: hip1m5 Military complex (secret) -0 string 5\x0athe_Lost_Mine Quake I save: hip1m3 The lost mine -0 string 5\x0aResearch_Facility Quake I save: hip1m4 Research facility -0 string 5\x0aAncient_Realms Quake I save: hip2m1 Ancient realms -0 string 5\x0aThe_Gremlin's_Domain Quake I save: hip2m6 The gremlin's domain (secret) -0 string 5\x0aThe_Black_Cathedral Quake I save: hip2m2 The black cathedral -0 string 5\x0aThe_Catacombs Quake I save: hip2m3 The catacombs -0 string 5\x0athe_Crypt__ Quake I save: hip2m4 The crypt -0 string 5\x0aMortum's_Keep Quake I save: hip2m5 Mortum's keep -0 string 5\x0aTur_Torment Quake I save: hip3m1 Tur torment -0 string 5\x0aPandemonium Quake I save: hip3m2 Pandemonium -0 string 5\x0aLimbo Quake I save: hip3m3 Limbo -0 string 5\x0athe_Edge_of_Oblivion Quake I save: hipdm1 The edge of oblivion (secret) -0 string 5\x0aThe_Gauntlet Quake I save: hip3m4 The gauntlet -0 string 5\x0aArmagon's_Lair Quake I save: hipend Armagon's lair - -# Malice - -0 string 5\x0aThe_Academy Quake I save: start The academy -0 string 5\x0aThe_Lab Quake I save: d1 The lab -0 string 5\x0aArea_33 Quake I save: d1b Area 33 -0 string 5\x0aSECRET_MISSIONS Quake I save: d3b Secret missions -0 string 5\x0aThe_Hospital Quake I save: d10 The hospital (secret) -0 string 5\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret) -0 string 5\x0aBACK_2_MALICE Quake I save: d4b Back to Malice -0 string 5\x0aArea44 Quake I save: d1c Area 44 -0 string 5\x0aTakahiro_Towers Quake I save: d2 Takahiro towers -0 string 5\x0aA_Rat's_Life Quake I save: d3 A rat's life -0 string 5\x0aInto_The_Flood Quake I save: d4 Into the flood -0 string 5\x0aThe_Flood Quake I save: d5 The flood -0 string 5\x0aNuclear_Plant Quake I save: d6 Nuclear plant -0 string 5\x0aThe_Incinerator_Plant Quake I save: d7 The incinerator plant -0 string 5\x0aThe_Foundry Quake I save: d7b The foundry -0 string 5\x0aThe_Underwater_Base Quake I save: d8 The underwater base -0 string 5\x0aTakahiro_Base Quake I save: d9 Takahiro base -0 string 5\x0aTakahiro_Laboratories Quake I save: d12 Takahiro laboratories -0 string 5\x0aStayin'_Alive Quake I save: d13 Stayin' alive -0 string 5\x0aB.O.S.S._HQ Quake I save: d14 B.O.S.S. HQ -0 string 5\x0aSHOWDOWN! Quake I save: d15 Showdown! - -# Malice DeathMatch levels - -0 string 5\x0aThe_Seventh_Precinct Quake I save: ddm1 The seventh precinct -0 string 5\x0aSub_Station Quake I save: ddm2 Sub station -0 string 5\x0aCrazy_Eights! Quake I save: ddm3 Crazy eights! -0 string 5\x0aEast_Side_Invertationa Quake I save: ddm4 East side invertationa -0 string 5\x0aSlaughterhouse Quake I save: ddm5 Slaughterhouse -0 string 5\x0aDOMINO Quake I save: ddm6 Domino -0 string 5\x0aSANDRA'S_LADDER Quake I save: ddm7 Sandra's ladder - - -0 string MComprHD MAME CHD compressed hard disk image, ->12 belong x version %lu - -# doom - submitted by Jon Dowland - -0 string =IWAD doom main IWAD data ->4 lelong x containing %d lumps -0 string =PWAD doom patch PWAD data ->4 lelong x containing %d lumps - - -# Summary: Warcraft 3 save -# Extension: .w3g -# Created by: "Nelson A. de Oliveira" <naoliv@gmail.com> -0 string Warcraft\ III\ recorded\ game %s - - -# Summary: Warcraft 3 map -# Extension: .w3m -# Created by: "Nelson A. de Oliveira" <naoliv@gmail.com> -0 string HM3W Warcraft III map file - - -# Summary: SGF Smart Game Format -# Extension: .sgf -# Reference: http://www.red-bean.com/sgf/ -# Created by: Eduardo Sabbatella <eduardo_sabbatella@yahoo.com.ar> -# Modified by (1): Abel Cheung (regex, more game format) -# FIXME: Some games don't have GM (game type) -0 regex \\(;.*GM\\[[0-9]{1,2}\\] Smart Game Format ->2 search/0x200 GM[ ->>&0 string 1] (Go) ->>&0 string 2] (Othello) ->>&0 string 3] (chess) ->>&0 string 4] (Gomoku+Renju) ->>&0 string 5] (Nine Men's Morris) ->>&0 string 6] (Backgammon) ->>&0 string 7] (Chinese chess) ->>&0 string 8] (Shogi) ->>&0 string 9] (Lines of Action) ->>&0 string 10] (Ataxx) ->>&0 string 11] (Hex) ->>&0 string 12] (Jungle) ->>&0 string 13] (Neutron) ->>&0 string 14] (Philosopher's Football) ->>&0 string 15] (Quadrature) ->>&0 string 16] (Trax) ->>&0 string 17] (Tantrix) ->>&0 string 18] (Amazons) ->>&0 string 19] (Octi) ->>&0 string 20] (Gess) ->>&0 string 21] (Twixt) ->>&0 string 22] (Zertz) ->>&0 string 23] (Plateau) ->>&0 string 24] (Yinsh) ->>&0 string 25] (Punct) ->>&0 string 26] (Gobblet) ->>&0 string 27] (hive) ->>&0 string 28] (Exxit) ->>&0 string 29] (Hnefatal) ->>&0 string 30] (Kuba) ->>&0 string 31] (Tripples) ->>&0 string 32] (Chase) ->>&0 string 33] (Tumbling Down) ->>&0 string 34] (Sahara) ->>&0 string 35] (Byte) ->>&0 string 36] (Focus) ->>&0 string 37] (Dvonn) ->>&0 string 38] (Tamsk) ->>&0 string 39] (Gipf) ->>&0 string 40] (Kropki) - - -# Summary: Civilization 4 video -# Extension: .bik -# Created by: Abel Cheung <abelcheung@gmail.com> -0 string BIKi Civilization 4 Video - - -############################################## -# NetImmerse/Gamebryo game engine entries - -# Summary: Gamebryo game engine file -# Extension: .nif, .kf -# Created by: Abel Cheung <abelcheung@gmail.com> -0 string Gamebryo\ File\ Format,\ Version\ Gamebryo game engine file ->&0 regex [0-9a-z.]+ \b, version %s - -# Summary: Gamebryo game engine file -# Extension: .kfm -# Created by: Abel Cheung <abelcheung@gmail.com> -0 string ;Gamebryo\ KFM\ File\ Version\ Gamebryo game engine animation File ->&0 regex [0-9a-z.]+ \b, version %s - -# Summary: NetImmerse game engine file -# Extension .nif -# Created by: Abel Cheung <abelcheung@gmail.com> -0 string NetImmerse\ File\ Format,\ Versio ->&0 string n\ NetImmerse game engine file ->>&0 regex [0-9a-z.]+ \b, version %s - -# Type: SGF Smart Game Format -# URL: http://www.red-bean.com/sgf/ -# From: Eduardo Sabbatella <eduardo_sabbatella@yahoo.com.ar> -2 regex/c \\(;.*GM\\[[0-9]{1,2}\\] Smart Game Format ->2 regex/c GM\\[1\\] - Go Game ->2 regex/c GM\\[6\\] - BackGammon Game ->2 regex/c GM\\[11\\] - Hex Game ->2 regex/c GM\\[18\\] - Amazons Game ->2 regex/c GM\\[19\\] - Octi Game ->2 regex/c GM\\[20\\] - Gess Game ->2 regex/c GM\\[21\\] - twix Game - -#------------------------------------------------------------------------------ -# gcc: file(1) magic for GCC special files -# -0 string gpch GCC precompiled header - -# The version field is annoying. It's 3 characters, not zero-terminated. ->5 byte x (version %c ->6 byte x \b%c ->7 byte x \b%c) - -# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O' ->4 byte 67 for C ->4 byte 111 for Objective C ->4 byte 43 for C++ ->4 byte 79 for Objective C++ - -#------------------------------------------------------------------------------ -# GEOS files (Vidar Madsen, vidar@gimp.org) -# semi-commonly used in embedded and handheld systems. -0 belong 0xc745c153 GEOS ->40 byte 1 executable ->40 byte 2 VMFile ->40 byte 3 binary ->40 byte 4 directory label ->40 byte <1 unknown ->40 byte >4 unknown ->4 string >\0 \b, name "%s" -#>44 short x \b, version %d -#>46 short x \b.%d -#>48 short x \b, rev %d -#>50 short x \b.%d -#>52 short x \b, proto %d -#>54 short x \br%d -#>168 string >\0 \b, copyright "%s" -#------------------------------------------------------------------------------ -# GIMP Gradient: file(1) magic for the GIMP's gradient data files -# by Federico Mena <federico@nuclecu.unam.mx> - -0 string GIMP\ Gradient GIMP gradient data - -#------------------------------------------------------------------------------ -# XCF: file(1) magic for the XCF image format used in the GIMP developed -# by Spencer Kimball and Peter Mattis -# ('Bucky' LaDieu, nega@vt.edu) - -0 string gimp\ xcf GIMP XCF image data, -!:mime image/x-xcf ->9 string file version 0, ->9 string v version ->>10 string >\0 %s, ->14 belong x %lu x ->18 belong x %lu, ->22 belong 0 RGB Color ->22 belong 1 Greyscale ->22 belong 2 Indexed Color ->22 belong >2 Unknown Image Type. - -#------------------------------------------------------------------------------ -# XCF: file(1) magic for the patterns used in the GIMP, developed -# by Spencer Kimball and Peter Mattis -# ('Bucky' LaDieu, nega@vt.edu) - -20 string GPAT GIMP pattern data, ->24 string x %s - -#------------------------------------------------------------------------------ -# XCF: file(1) magic for the brushes used in the GIMP, developed -# by Spencer Kimball and Peter Mattis -# ('Bucky' LaDieu, nega@vt.edu) - -20 string GIMP GIMP brush data - -# GIMP Curves File -# From: "Nelson A. de Oliveira" <naoliv@gmail.com> -0 string #\040GIMP\040Curves\040File GIMP curve file -# GNOME keyring -# Contributed by Josh Triplett -# FIXME: Could be simplified if pstring supported two-byte counts -0 string GnomeKeyring\n\r\0\n GNOME keyring ->&0 ubyte 0 \b, major version 0 ->>&0 ubyte 0 \b, minor version 0 ->>>&0 ubyte 0 \b, crypto type 0 (AEL) ->>>&0 ubyte >0 \b, crypto type %hhu (unknown) ->>>&1 ubyte 0 \b, hash type 0 (MD5) ->>>&1 ubyte >0 \b, hash type %hhu (unknown) ->>>&2 ubelong 0xFFFFFFFF \b, name NULL ->>>&2 ubelong !0xFFFFFFFF ->>>>&-4 ubelong >255 \b, name too long for file's pstring type ->>>>&-4 ubelong <256 ->>>>>&-1 pstring x \b, name "%s" ->>>>>>&0 ubeqdate x \b, last modified %s ->>>>>>&8 ubeqdate x \b, created %s ->>>>>>&16 ubelong &1 ->>>>>>>&0 ubelong x \b, locked if idle for %u seconds ->>>>>>&16 ubelong ^1 \b, not locked if idle ->>>>>>&24 ubelong x \b, hash iterations %u ->>>>>>&28 ubequad x \b, salt %llu ->>>>>>&52 ubelong x \b, %u item(s) -#------------------------------------------------------------------------------ -# gnu: file(1) magic for various GNU tools -# -# GNU nlsutils message catalog file format -# -0 string \336\22\4\225 GNU message catalog (little endian), ->4 lelong x revision %d, ->8 lelong x %d messages -0 string \225\4\22\336 GNU message catalog (big endian), ->4 belong x revision %d, ->8 belong x %d messages -# message catalogs, from Mitchum DSouza <m.dsouza@mrc-apu.cam.ac.uk> -0 string *nazgul* Nazgul style compiled message catalog ->8 lelong >0 \b, version %ld - -# GnuPG -# The format is very similar to pgp -0 string \001gpg GPG key trust database ->4 byte x version %d -# Note: magic.mime had 0x8501 for the next line instead of 0x8502 -0 beshort 0x8502 GPG encrypted data -!:mime text/PGP # encoding: data - -# This magic is not particularly good, as the keyrings don't have true -# magic. Nevertheless, it covers many keyrings. -0 beshort 0x9901 GPG key public ring -!:mime application/x-gnupg-keyring - -# Gnumeric spreadsheet -# This entry is only semi-helpful, as Gnumeric compresses its files, so -# they will ordinarily reported as "compressed", but at least -z helps -39 string =<gmr:Workbook Gnumeric spreadsheet - -# From: James Youngman <jay@gnu.org> -# gnu find magic -0 string \0LOCATE GNU findutils locate database data ->7 string >\0 \b, format %s ->7 string 02 \b (frcode) - -# Files produced by GNU gettext -0 long 0xDE120495 GNU-format message catalog data -0 long 0x950412DE GNU-format message catalog data - -#------------------------------------------------------------------------------ -# gnumeric: file(1) magic for Gnumeric spreadsheet -# This entry is only semi-helpful, as Gnumeric compresses its files, so -# they will ordinarily reported as "compressed", but at least -z helps -39 string =<gmr:Workbook Gnumeric spreadsheet -!:mime application/x-gnumeric - -#------------------------------------------------------------------------------ -# ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE -# -# ACE/gr binary -0 string \000\000\0001\000\000\0000\000\000\0000\000\000\0002\000\000\0000\000\000\0000\000\000\0003 old ACE/gr binary file ->39 byte >0 - version %c -# ACE/gr ascii -0 string #\ xvgr\ parameter\ file ACE/gr ascii file -0 string #\ xmgr\ parameter\ file ACE/gr ascii file -0 string #\ ACE/gr\ parameter\ file ACE/gr ascii file -# Grace projects -0 string #\ Grace\ project\ file Grace project file ->23 string @version\ (version ->>32 byte >0 %c ->>33 string >\0 \b.%.2s ->>35 string >\0 \b.%.2s) -# ACE/gr fit description files -0 string #\ ACE/gr\ fit\ description\ ACE/gr fit description file -# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE -#------------------------------------------------------------------------------ -# graphviz: file(1) magic for http://www.graphviz.org/ - -# FIXME: These patterns match too generally. For example, the first -# line matches a LaTeX file containing the word "graph" (with a { -# following later) and the second line matches this file. -#0 regex/100 [\r\n\t\ ]*graph[\r\n\t\ ]+.*\\{ graphviz graph text -#!:mime text/vnd.graphviz -#0 regex/100 [\r\n\t\ ]*digraph[\r\n\t\ ]+.*\\{ graphviz digraph text -#!:mime text/vnd.graphviz - -#------------------------------------------------------------------------------ -# gringotts: file(1) magic for Gringotts -# http://devel.pluto.linux.it/projects/Gringotts/ -# author: Germano Rizzo <mano@pluto.linux.it> -#GRG3????Y -0 string GRG Gringotts data file -#file format 1 ->3 string 1 v.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9 -#file format 2 ->3 string 2 v.2, MCRYPT S2K, ->>8 byte&0x70 0x00 RIJNDAEL-128 crypt, ->>8 byte&0x70 0x10 SERPENT crypt, ->>8 byte&0x70 0x20 TWOFISH crypt, ->>8 byte&0x70 0x30 CAST-256 crypt, ->>8 byte&0x70 0x40 SAFER+ crypt, ->>8 byte&0x70 0x50 LOKI97 crypt, ->>8 byte&0x70 0x60 3DES crypt, ->>8 byte&0x70 0x70 RIJNDAEL-256 crypt, ->>8 byte&0x08 0x00 SHA1 hash, ->>8 byte&0x08 0x08 RIPEMD-160 hash, ->>8 byte&0x04 0x00 ZLib ->>8 byte&0x04 0x04 BZip2 ->>8 byte&0x03 0x00 lvl.0 ->>8 byte&0x03 0x01 lvl.3 ->>8 byte&0x03 0x02 lvl.6 ->>8 byte&0x03 0x03 lvl.9 -#file format 3 ->3 string 3 v.3, OpenPGP S2K, ->>8 byte&0x70 0x00 RIJNDAEL-128 crypt, ->>8 byte&0x70 0x10 SERPENT crypt, ->>8 byte&0x70 0x20 TWOFISH crypt, ->>8 byte&0x70 0x30 CAST-256 crypt, ->>8 byte&0x70 0x40 SAFER+ crypt, ->>8 byte&0x70 0x50 LOKI97 crypt, ->>8 byte&0x70 0x60 3DES crypt, ->>8 byte&0x70 0x70 RIJNDAEL-256 crypt, ->>8 byte&0x08 0x00 SHA1 hash, ->>8 byte&0x08 0x08 RIPEMD-160 hash, ->>8 byte&0x04 0x00 ZLib ->>8 byte&0x04 0x04 BZip2 ->>8 byte&0x03 0x00 lvl.0 ->>8 byte&0x03 0x01 lvl.3 ->>8 byte&0x03 0x02 lvl.6 ->>8 byte&0x03 0x03 lvl.9 -#file format >3 ->3 string >3 v.%.1s (unknown details) - -#------------------------------------------------------------------------------ -# hitach-sh: file(1) magic for Hitachi Super-H -# -# Super-H COFF -# -0 beshort 0x0500 Hitachi SH big-endian COFF ->18 beshort&0x0002 =0x0000 object ->18 beshort&0x0002 =0x0002 executable ->18 beshort&0x0008 =0x0008 \b, stripped ->18 beshort&0x0008 =0x0000 \b, not stripped -# -0 leshort 0x0550 Hitachi SH little-endian COFF ->18 leshort&0x0002 =0x0000 object ->18 leshort&0x0002 =0x0002 executable ->18 leshort&0x0008 =0x0008 \b, stripped ->18 leshort&0x0008 =0x0000 \b, not stripped - -#------------------------------------------------------------------------------ -# hp: file(1) magic for Hewlett Packard machines (see also "printer") -# -# XXX - somebody should figure out whether any byte order needs to be -# applied to the "TML" stuff; I'm assuming the Apollo stuff is -# big-endian as it was mostly 68K-based. -# -# I think the 500 series was the old stack-based machines, running a -# UNIX environment atop the "SUN kernel"; dunno whether it was -# big-endian or little-endian. -# -# Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based; -# hp300 are 68020+68881 based; hp400 are also 68k. The following basic -# HP magic is useful for reference, but using "long" magic is a better -# practice in order to avoid collisions. -# -# Guy Harris (guy@netapp.com): some additions to this list came from -# HP-UX 10.0's "/usr/include/sys/unistd.h" (68030, 68040, PA-RISC 1.1, -# 1.2, and 2.0). The 1.2 and 2.0 stuff isn't in the HP-UX 10.0 -# "/etc/magic", though, except for the "archive file relocatable library" -# stuff, and the 68030 and 68040 stuff isn't there at all - are they not -# used in executables, or have they just not yet updated "/etc/magic" -# completely? -# -# 0 beshort 200 hp200 (68010) BSD binary -# 0 beshort 300 hp300 (68020+68881) BSD binary -# 0 beshort 0x20c hp200/300 HP-UX binary -# 0 beshort 0x20d hp400 (68030) HP-UX binary -# 0 beshort 0x20e hp400 (68040?) HP-UX binary -# 0 beshort 0x20b PA-RISC1.0 HP-UX binary -# 0 beshort 0x210 PA-RISC1.1 HP-UX binary -# 0 beshort 0x211 PA-RISC1.2 HP-UX binary -# 0 beshort 0x214 PA-RISC2.0 HP-UX binary - -# -# The "misc" stuff needs a byte order; the archives look suspiciously -# like the old 177545 archives (0xff65 = 0177545). -# -#### Old Apollo stuff -0 beshort 0627 Apollo m68k COFF executable ->18 beshort ^040000 not stripped ->22 beshort >0 - version %ld -0 beshort 0624 apollo a88k COFF executable ->18 beshort ^040000 not stripped ->22 beshort >0 - version %ld -0 long 01203604016 TML 0123 byte-order format -0 long 01702407010 TML 1032 byte-order format -0 long 01003405017 TML 2301 byte-order format -0 long 01602007412 TML 3210 byte-order format -#### PA-RISC 1.1 -0 belong 0x02100106 PA-RISC1.1 relocatable object -0 belong 0x02100107 PA-RISC1.1 executable ->168 belong &0x00000004 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x02100108 PA-RISC1.1 shared executable ->168 belong&0x4 0x4 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x0210010b PA-RISC1.1 demand-load executable ->168 belong&0x4 0x4 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x0210010e PA-RISC1.1 shared library ->96 belong >0 - not stripped - -0 belong 0x0210010d PA-RISC1.1 dynamic load library ->96 belong >0 - not stripped - -#### PA-RISC 2.0 -0 belong 0x02140106 PA-RISC2.0 relocatable object - -0 belong 0x02140107 PA-RISC2.0 executable ->168 belong &0x00000004 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x02140108 PA-RISC2.0 shared executable ->168 belong &0x00000004 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x0214010b PA-RISC2.0 demand-load executable ->168 belong &0x00000004 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x0214010e PA-RISC2.0 shared library ->96 belong >0 - not stripped - -0 belong 0x0214010d PA-RISC2.0 dynamic load library ->96 belong >0 - not stripped - -#### 800 -0 belong 0x020b0106 PA-RISC1.0 relocatable object - -0 belong 0x020b0107 PA-RISC1.0 executable ->168 belong&0x4 0x4 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x020b0108 PA-RISC1.0 shared executable ->168 belong&0x4 0x4 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x020b010b PA-RISC1.0 demand-load executable ->168 belong&0x4 0x4 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x020b010e PA-RISC1.0 shared library ->96 belong >0 - not stripped - -0 belong 0x020b010d PA-RISC1.0 dynamic load library ->96 belong >0 - not stripped - -0 belong 0x213c6172 archive file ->68 belong 0x020b0619 - PA-RISC1.0 relocatable library ->68 belong 0x02100619 - PA-RISC1.1 relocatable library ->68 belong 0x02110619 - PA-RISC1.2 relocatable library ->68 belong 0x02140619 - PA-RISC2.0 relocatable library - -#### 500 -0 long 0x02080106 HP s500 relocatable executable ->16 long >0 - version %ld - -0 long 0x02080107 HP s500 executable ->16 long >0 - version %ld - -0 long 0x02080108 HP s500 pure executable ->16 long >0 - version %ld - -#### 200 -0 belong 0x020c0108 HP s200 pure executable ->4 beshort >0 - version %ld ->8 belong &0x80000000 save fp regs ->8 belong &0x40000000 dynamically linked ->8 belong &0x20000000 debuggable ->36 belong >0 not stripped - -0 belong 0x020c0107 HP s200 executable ->4 beshort >0 - version %ld ->8 belong &0x80000000 save fp regs ->8 belong &0x40000000 dynamically linked ->8 belong &0x20000000 debuggable ->36 belong >0 not stripped - -0 belong 0x020c010b HP s200 demand-load executable ->4 beshort >0 - version %ld ->8 belong &0x80000000 save fp regs ->8 belong &0x40000000 dynamically linked ->8 belong &0x20000000 debuggable ->36 belong >0 not stripped - -0 belong 0x020c0106 HP s200 relocatable executable ->4 beshort >0 - version %ld ->6 beshort >0 - highwater %d ->8 belong &0x80000000 save fp regs ->8 belong &0x20000000 debuggable ->8 belong &0x10000000 PIC - -0 belong 0x020a0108 HP s200 (2.x release) pure executable ->4 beshort >0 - version %ld ->36 belong >0 not stripped - -0 belong 0x020a0107 HP s200 (2.x release) executable ->4 beshort >0 - version %ld ->36 belong >0 not stripped - -0 belong 0x020c010e HP s200 shared library ->4 beshort >0 - version %ld ->6 beshort >0 - highwater %d ->36 belong >0 not stripped - -0 belong 0x020c010d HP s200 dynamic load library ->4 beshort >0 - version %ld ->6 beshort >0 - highwater %d ->36 belong >0 not stripped - -#### MISC -0 long 0x0000ff65 HP old archive -0 long 0x020aff65 HP s200 old archive -0 long 0x020cff65 HP s200 old archive -0 long 0x0208ff65 HP s500 old archive - -0 long 0x015821a6 HP core file - -0 long 0x4da7eee8 HP-WINDOWS font ->8 byte >0 - version %ld -0 string Bitmapfile HP Bitmapfile - -0 string IMGfile CIS compimg HP Bitmapfile -# XXX - see "lif" -#0 short 0x8000 lif file -0 long 0x020c010c compiled Lisp - -0 string msgcat01 HP NLS message catalog, ->8 long >0 %d messages - -# Summary: HP-48/49 calculator -# Created by: phk@data.fls.dk -# Modified by (1): AMAKAWA Shuhei <sa264@cam.ac.uk> -# Modified by (2): Samuel Thibault <samuel.thibault@ens-lyon.org> (HP49 support) -0 string HPHP HP ->4 string 48 48 binary ->4 string 49 49 binary ->7 byte >64 - Rev %c ->8 leshort 0x2911 (ADR) ->8 leshort 0x2933 (REAL) ->8 leshort 0x2955 (LREAL) ->8 leshort 0x2977 (COMPLX) ->8 leshort 0x299d (LCOMPLX) ->8 leshort 0x29bf (CHAR) ->8 leshort 0x29e8 (ARRAY) ->8 leshort 0x2a0a (LNKARRAY) ->8 leshort 0x2a2c (STRING) ->8 leshort 0x2a4e (HXS) ->8 leshort 0x2a74 (LIST) ->8 leshort 0x2a96 (DIR) ->8 leshort 0x2ab8 (ALG) ->8 leshort 0x2ada (UNIT) ->8 leshort 0x2afc (TAGGED) ->8 leshort 0x2b1e (GROB) ->8 leshort 0x2b40 (LIB) ->8 leshort 0x2b62 (BACKUP) ->8 leshort 0x2b88 (LIBDATA) ->8 leshort 0x2d9d (PROG) ->8 leshort 0x2dcc (CODE) ->8 leshort 0x2e48 (GNAME) ->8 leshort 0x2e6d (LNAME) ->8 leshort 0x2e92 (XLIB) - -0 string %%HP: HP text ->6 string T(0) - T(0) ->6 string T(1) - T(1) ->6 string T(2) - T(2) ->6 string T(3) - T(3) ->10 string A(D) A(D) ->10 string A(R) A(R) ->10 string A(G) A(G) ->14 string F(.) F(.); ->14 string F(,) F(,); - - -# Summary: HP-38/39 calculator -# Created by: Samuel Thibault <samuel.thibault@ens-lyon.org> -0 string HP3 ->3 string 8 HP 38 ->3 string 9 HP 39 ->4 string Bin binary ->4 string Asc ASCII ->7 string A (Directory List) ->7 string B (Zaplet) ->7 string C (Note) ->7 string D (Program) ->7 string E (Variable) ->7 string F (List) ->7 string G (Matrix) ->7 string H (Library) ->7 string I (Target List) ->7 string J (ASCII Vector specification) ->7 string K (wildcard) - -# Summary: HP-38/39 calculator -# Created by: Samuel Thibault <samuel.thibault@ens-lyon.org> -0 string HP3 ->3 string 8 HP 38 ->3 string 9 HP 39 ->4 string Bin binary ->4 string Asc ASCII ->7 string A (Directory List) ->7 string B (Zaplet) ->7 string C (Note) ->7 string D (Program) ->7 string E (Variable) ->7 string F (List) ->7 string G (Matrix) ->7 string H (Library) ->7 string I (Target List) ->7 string J (ASCII Vector specification) ->7 string K (wildcard) - -# hpBSD magic numbers -0 beshort 200 hp200 (68010) BSD ->2 beshort 0407 impure binary ->2 beshort 0410 read-only binary ->2 beshort 0413 demand paged binary -0 beshort 300 hp300 (68020+68881) BSD ->2 beshort 0407 impure binary ->2 beshort 0410 read-only binary ->2 beshort 0413 demand paged binary -# -# From David Gero <dgero@nortelnetworks.com> -# HP-UX 10.20 core file format from /usr/include/sys/core.h -# Unfortunately, HP-UX uses corehead blocks without specifying the order -# There are four we care about: -# CORE_KERNEL, which starts with the string "HP-UX" -# CORE_EXEC, which contains the name of the command -# CORE_PROC, which contains the signal number that caused the core dump -# CORE_FORMAT, which contains the version of the core file format (== 1) -# The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC -# but we include all 6 variations of the order of the first 3, and -# assume that PROC will always be last -# Order 1: KERNEL, EXEC, FORMAT, PROC -0x10 string HP-UX ->0 belong 2 ->>0xC belong 0x3C ->>>0x4C belong 0x100 ->>>>0x58 belong 0x44 ->>>>>0xA0 belong 1 ->>>>>>0xAC belong 4 ->>>>>>>0xB0 belong 1 ->>>>>>>>0xB4 belong 4 core file ->>>>>>>>>0x90 string >\0 from '%s' ->>>>>>>>>0xC4 belong 3 - received SIGQUIT ->>>>>>>>>0xC4 belong 4 - received SIGILL ->>>>>>>>>0xC4 belong 5 - received SIGTRAP ->>>>>>>>>0xC4 belong 6 - received SIGABRT ->>>>>>>>>0xC4 belong 7 - received SIGEMT ->>>>>>>>>0xC4 belong 8 - received SIGFPE ->>>>>>>>>0xC4 belong 10 - received SIGBUS ->>>>>>>>>0xC4 belong 11 - received SIGSEGV ->>>>>>>>>0xC4 belong 12 - received SIGSYS ->>>>>>>>>0xC4 belong 33 - received SIGXCPU ->>>>>>>>>0xC4 belong 34 - received SIGXFSZ -# Order 2: KERNEL, FORMAT, EXEC, PROC ->>>0x4C belong 1 ->>>>0x58 belong 4 ->>>>>0x5C belong 1 ->>>>>>0x60 belong 0x100 ->>>>>>>0x6C belong 0x44 ->>>>>>>>0xB4 belong 4 core file ->>>>>>>>>0xA4 string >\0 from '%s' ->>>>>>>>>0xC4 belong 3 - received SIGQUIT ->>>>>>>>>0xC4 belong 4 - received SIGILL ->>>>>>>>>0xC4 belong 5 - received SIGTRAP ->>>>>>>>>0xC4 belong 6 - received SIGABRT ->>>>>>>>>0xC4 belong 7 - received SIGEMT ->>>>>>>>>0xC4 belong 8 - received SIGFPE ->>>>>>>>>0xC4 belong 10 - received SIGBUS ->>>>>>>>>0xC4 belong 11 - received SIGSEGV ->>>>>>>>>0xC4 belong 12 - received SIGSYS ->>>>>>>>>0xC4 belong 33 - received SIGXCPU ->>>>>>>>>0xC4 belong 34 - received SIGXFSZ -# Order 3: FORMAT, KERNEL, EXEC, PROC -0x24 string HP-UX ->0 belong 1 ->>0xC belong 4 ->>>0x10 belong 1 ->>>>0x14 belong 2 ->>>>>0x20 belong 0x3C ->>>>>>0x60 belong 0x100 ->>>>>>>0x6C belong 0x44 ->>>>>>>>0xB4 belong 4 core file ->>>>>>>>>0xA4 string >\0 from '%s' ->>>>>>>>>0xC4 belong 3 - received SIGQUIT ->>>>>>>>>0xC4 belong 4 - received SIGILL ->>>>>>>>>0xC4 belong 5 - received SIGTRAP ->>>>>>>>>0xC4 belong 6 - received SIGABRT ->>>>>>>>>0xC4 belong 7 - received SIGEMT ->>>>>>>>>0xC4 belong 8 - received SIGFPE ->>>>>>>>>0xC4 belong 10 - received SIGBUS ->>>>>>>>>0xC4 belong 11 - received SIGSEGV ->>>>>>>>>0xC4 belong 12 - received SIGSYS ->>>>>>>>>0xC4 belong 33 - received SIGXCPU ->>>>>>>>>0xC4 belong 34 - received SIGXFSZ -# Order 4: EXEC, KERNEL, FORMAT, PROC -0x64 string HP-UX ->0 belong 0x100 ->>0xC belong 0x44 ->>>0x54 belong 2 ->>>>0x60 belong 0x3C ->>>>>0xA0 belong 1 ->>>>>>0xAC belong 4 ->>>>>>>0xB0 belong 1 ->>>>>>>>0xB4 belong 4 core file ->>>>>>>>>0x44 string >\0 from '%s' ->>>>>>>>>0xC4 belong 3 - received SIGQUIT ->>>>>>>>>0xC4 belong 4 - received SIGILL ->>>>>>>>>0xC4 belong 5 - received SIGTRAP ->>>>>>>>>0xC4 belong 6 - received SIGABRT ->>>>>>>>>0xC4 belong 7 - received SIGEMT ->>>>>>>>>0xC4 belong 8 - received SIGFPE ->>>>>>>>>0xC4 belong 10 - received SIGBUS ->>>>>>>>>0xC4 belong 11 - received SIGSEGV ->>>>>>>>>0xC4 belong 12 - received SIGSYS ->>>>>>>>>0xC4 belong 33 - received SIGXCPU ->>>>>>>>>0xC4 belong 34 - received SIGXFSZ -# Order 5: FORMAT, EXEC, KERNEL, PROC -0x78 string HP-UX ->0 belong 1 ->>0xC belong 4 ->>>0x10 belong 1 ->>>>0x14 belong 0x100 ->>>>>0x20 belong 0x44 ->>>>>>0x68 belong 2 ->>>>>>>0x74 belong 0x3C ->>>>>>>>0xB4 belong 4 core file ->>>>>>>>>0x58 string >\0 from '%s' ->>>>>>>>>0xC4 belong 3 - received SIGQUIT ->>>>>>>>>0xC4 belong 4 - received SIGILL ->>>>>>>>>0xC4 belong 5 - received SIGTRAP ->>>>>>>>>0xC4 belong 6 - received SIGABRT ->>>>>>>>>0xC4 belong 7 - received SIGEMT ->>>>>>>>>0xC4 belong 8 - received SIGFPE ->>>>>>>>>0xC4 belong 10 - received SIGBUS ->>>>>>>>>0xC4 belong 11 - received SIGSEGV ->>>>>>>>>0xC4 belong 12 - received SIGSYS ->>>>>>>>>0xC4 belong 33 - received SIGXCPU ->>>>>>>>>0xC4 belong 34 - received SIGXFSZ -# Order 6: EXEC, FORMAT, KERNEL, PROC ->0 belong 0x100 ->>0xC belong 0x44 ->>>0x54 belong 1 ->>>>0x60 belong 4 ->>>>>0x64 belong 1 ->>>>>>0x68 belong 2 ->>>>>>>0x74 belong 0x2C ->>>>>>>>0xB4 belong 4 core file ->>>>>>>>>0x44 string >\0 from '%s' ->>>>>>>>>0xC4 belong 3 - received SIGQUIT ->>>>>>>>>0xC4 belong 4 - received SIGILL ->>>>>>>>>0xC4 belong 5 - received SIGTRAP ->>>>>>>>>0xC4 belong 6 - received SIGABRT ->>>>>>>>>0xC4 belong 7 - received SIGEMT ->>>>>>>>>0xC4 belong 8 - received SIGFPE ->>>>>>>>>0xC4 belong 10 - received SIGBUS ->>>>>>>>>0xC4 belong 11 - received SIGSEGV ->>>>>>>>>0xC4 belong 12 - received SIGSYS ->>>>>>>>>0xC4 belong 33 - received SIGXCPU ->>>>>>>>>0xC4 belong 34 - received SIGXFSZ - - - -#------------------------------------------------------------------------------ -# human68k: file(1) magic for Human68k (X680x0 DOS) binary formats -# Magic too short! -#0 string HU Human68k -#>68 string LZX LZX compressed -#>>72 string >\0 (version %s) -#>(8.L+74) string LZX LZX compressed -#>>(8.L+78) string >\0 (version %s) -#>60 belong >0 binded -#>(8.L+66) string #HUPAIR hupair -#>0 string HU X executable -#>(8.L+74) string #LIBCV1 - linked PD LIBC ver 1 -#>4 belong >0 - base address 0x%x -#>28 belong >0 not stripped -#>32 belong >0 with debug information -#0 beshort 0x601a Human68k Z executable -#0 beshort 0x6000 Human68k object file -#0 belong 0xd1000000 Human68k ar binary archive -#0 belong 0xd1010000 Human68k ar ascii archive -#0 beshort 0x0068 Human68k lib archive -#4 string LZX Human68k LZX compressed -#>8 string >\0 (version %s) -#>4 string LZX R executable -#2 string #HUPAIR Human68k hupair R executable - -#------------------------------------------------------------------------------ -# ibm370: file(1) magic for IBM 370 and compatibles. -# -# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable". -# What the heck *is* "USS/370"? -# AIX 4.1's "/etc/magic" has -# -# 0 short 0535 370 sysV executable -# >12 long >0 not stripped -# >22 short >0 - version %d -# >30 long >0 - 5.2 format -# 0 short 0530 370 sysV pure executable -# >12 long >0 not stripped -# >22 short >0 - version %d -# >30 long >0 - 5.2 format -# -# instead of the "USS/370" versions of the same magic numbers. -# -0 beshort 0537 370 XA sysV executable ->12 belong >0 not stripped ->22 beshort >0 - version %d ->30 belong >0 - 5.2 format -0 beshort 0532 370 XA sysV pure executable ->12 belong >0 not stripped ->22 beshort >0 - version %d ->30 belong >0 - 5.2 format -0 beshort 054001 370 sysV pure executable ->12 belong >0 not stripped -0 beshort 055001 370 XA sysV pure executable ->12 belong >0 not stripped -0 beshort 056401 370 sysV executable ->12 belong >0 not stripped -0 beshort 057401 370 XA sysV executable ->12 belong >0 not stripped -0 beshort 0531 SVR2 executable (Amdahl-UTS) ->12 belong >0 not stripped ->24 belong >0 - version %ld -0 beshort 0534 SVR2 pure executable (Amdahl-UTS) ->12 belong >0 not stripped ->24 belong >0 - version %ld -0 beshort 0530 SVR2 pure executable (USS/370) ->12 belong >0 not stripped ->24 belong >0 - version %ld -0 beshort 0535 SVR2 executable (USS/370) ->12 belong >0 not stripped ->24 belong >0 - version %ld - -#------------------------------------------------------------------------------ -# ibm6000: file(1) magic for RS/6000 and the RT PC. -# -0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module ->12 belong >0 not stripped -# Breaks sun4 statically linked execs. -#0 beshort 0x0103 executable (RT Version 2) or obj module -#>2 byte 0x50 pure -#>28 belong >0 not stripped -#>6 beshort >0 - version %ld -0 beshort 0x0104 shared library -0 beshort 0x0105 ctab data -0 beshort 0xfe04 structured file -0 string 0xabcdef AIX message catalog -0 belong 0x000001f9 AIX compiled message catalog -0 string \<aiaff> archive -0 string \<bigaf> archive (big format) - - -#------------------------------------------------------------------------------ -# iff: file(1) magic for Interchange File Format (see also "audio" & "images") -# -# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic -# Arts for file interchange. It has also been used by Apple, SGI, and -# especially Commodore-Amiga. -# -# IFF files begin with an 8 byte FORM header, followed by a 4 character -# FORM type, which is followed by the first chunk in the FORM. - -0 string FORM IFF data -#>4 belong x \b, FORM is %d bytes long -# audio formats ->8 string AIFF \b, AIFF audio -!:mime audio/x-aiff ->8 string AIFC \b, AIFF-C compressed audio -!:mime audio/x-aiff ->8 string 8SVX \b, 8SVX 8-bit sampled sound voice -!:mime audio/x-aiff ->8 string 16SV \b, 16SV 16-bit sampled sound voice ->8 string SAMP \b, SAMP sampled audio ->8 string MAUD \b, MAUD MacroSystem audio ->8 string SMUS \b, SMUS simple music ->8 string CMUS \b, CMUS complex music -# image formats ->8 string ILBMBMHD \b, ILBM interleaved image ->>20 beshort x \b, %d x ->>22 beshort x %d ->8 string RGBN \b, RGBN 12-bit RGB image ->8 string RGB8 \b, RGB8 24-bit RGB image ->8 string DEEP \b, DEEP TVPaint/XiPaint image ->8 string DR2D \b, DR2D 2-D object ->8 string TDDD \b, TDDD 3-D rendering ->8 string LWOB \b, LWOB 3-D object ->8 string LWO2 \b, LWO2 3-D object, v2 ->8 string LWLO \b, LWLO 3-D layered object ->8 string REAL \b, REAL Real3D rendering ->8 string MC4D \b, MC4D MaxonCinema4D rendering ->8 string ANIM \b, ANIM animation ->8 string YAFA \b, YAFA animation ->8 string SSA\ \b, SSA super smooth animation ->8 string ACBM \b, ACBM continuous image ->8 string FAXX \b, FAXX fax image -# other formats ->8 string FTXT \b, FTXT formatted text ->8 string CTLG \b, CTLG message catalog ->8 string PREF \b, PREF preferences ->8 string DTYP \b, DTYP datatype description ->8 string PTCH \b, PTCH binary patch ->8 string AMFF \b, AMFF AmigaMetaFile format ->8 string WZRD \b, WZRD StormWIZARD resource ->8 string DOC\ \b, DOC desktop publishing document - -# These go at the end of the iff rules -# -# I don't see why these might collide with anything else. -# -# Interactive Fiction related formats -# ->8 string IFRS \b, Blorb Interactive Fiction ->>24 string Exec with executable chunk ->8 string IFZS \b, Z-machine or Glulx saved game file (Quetzal) -#------------------------------------------------------------------------------ -# images: file(1) magic for image formats (see also "iff", and "c-lang" for -# XPM bitmaps) -# -# originally from jef@helios.ee.lbl.gov (Jef Poskanzer), -# additions by janl@ifi.uio.no as well as others. Jan also suggested -# merging several one- and two-line files into here. -# -# little magic: PCX (first byte is 0x0a) - -# Targa - matches `povray', `ppmtotga' and `xv' outputs -# by Philippe De Muyter <phdm@macqel.be> -# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11 -# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise -# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs -# `xv' recognizes only a subset of the following (RGB with pixelsize = 24) -# `tgatoppm' recognizes a superset (Index may be anything) -1 belong&0xfff7ffff 0x01010000 Targa image data - Map ->2 byte&8 8 - RLE ->12 leshort >0 %hd x ->14 leshort >0 %hd -1 belong&0xfff7ffff 0x00020000 Targa image data - RGB ->2 byte&8 8 - RLE ->12 leshort >0 %hd x ->14 leshort >0 %hd -1 belong&0xfff7ffff 0x00030000 Targa image data - Mono ->2 byte&8 8 - RLE ->12 leshort >0 %hd x ->14 leshort >0 %hd - -# PBMPLUS images -# The next byte following the magic is always whitespace. -0 search/1 P1 Netpbm PBM image text -!:mime image/x-portable-bitmap -0 search/1 P2 Netpbm PGM image text -!:mime image/x-portable-greymap -0 search/1 P3 Netpbm PPM image text -!:mime image/x-portable-pixmap -0 string P4 Netpbm PBM "rawbits" image data -!:mime image/x-portable-bitmap -0 string P5 Netpbm PGM "rawbits" image data -!:mime image/x-portable-greymap -0 string P6 Netpbm PPM "rawbits" image data -!:mime image/x-portable-pixmap -0 string P7 Netpbm PAM image file -!:mime image/x-portable-pixmap - -# From: bryanh@giraffe-data.com (Bryan Henderson) -0 string \117\072 Solitaire Image Recorder format ->4 string \013 MGI Type 11 ->4 string \021 MGI Type 17 -0 string .MDA MicroDesign data ->21 byte 48 version 2 ->21 byte 51 version 3 -0 string .MDP MicroDesign page data ->21 byte 48 version 2 ->21 byte 51 version 3 - -# NIFF (Navy Interchange File Format, a modification of TIFF) images -# [GRR: this *must* go before TIFF] -0 string IIN1 NIFF image data -!:mime image/x-niff - -# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com) -# The second word of TIFF files is the TIFF version number, 42, which has -# never changed. The TIFF specification recommends testing for it. -0 string MM\x00\x2a TIFF image data, big-endian -!:mime image/tiff -0 string II\x2a\x00 TIFF image data, little-endian -!:mime image/tiff - -# PNG [Portable Network Graphics, or "PNG's Not GIF"] images -# (Greg Roelofs, newt@uchicago.edu) -# (Albert Cahalan, acahalan@cs.uml.edu) -# -# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ... -# -0 string \x89PNG\x0d\x0a\x1a\x0a PNG image -!:mime image/png ->16 belong x \b, %ld x ->20 belong x %ld, ->24 byte x %d-bit ->25 byte 0 grayscale, ->25 byte 2 \b/color RGB, ->25 byte 3 colormap, ->25 byte 4 gray+alpha, ->25 byte 6 \b/color RGBA, -#>26 byte 0 deflate/32K, ->28 byte 0 non-interlaced ->28 byte 1 interlaced - -# possible GIF replacements; none yet released! -# (Greg Roelofs, newt@uchicago.edu) -# -# GRR 950115: this was mine ("Zip GIF"): -0 string GIF94z ZIF image (GIF+deflate alpha) -!:mime image/x-unknown -# -# GRR 950115: this is Jeremy Wohl's Free Graphics Format (better): -# -0 string FGF95a FGF image (GIF+deflate beta) -!:mime image/x-unknown -# -# GRR 950115: this is Thomas Boutell's Portable Bitmap Format proposal -# (best; not yet implemented): -# -0 string PBF PBF image (deflate compression) -!:mime image/x-unknown - -# GIF -0 string GIF8 GIF image data -!:mime image/gif -!:apple 8BIMGIFf ->4 string 7a \b, version 8%s, ->4 string 9a \b, version 8%s, ->6 leshort >0 %hd x ->8 leshort >0 %hd -#>10 byte &0x80 color mapped, -#>10 byte&0x07 =0x00 2 colors -#>10 byte&0x07 =0x01 4 colors -#>10 byte&0x07 =0x02 8 colors -#>10 byte&0x07 =0x03 16 colors -#>10 byte&0x07 =0x04 32 colors -#>10 byte&0x07 =0x05 64 colors -#>10 byte&0x07 =0x06 128 colors -#>10 byte&0x07 =0x07 256 colors - -# ITC (CMU WM) raster files. It is essentially a byte-reversed Sun raster, -# 1 plane, no encoding. -0 string \361\0\100\273 CMU window manager raster image data ->4 lelong >0 %d x ->8 lelong >0 %d, ->12 lelong >0 %d-bit - -# Magick Image File Format -0 string id=ImageMagick MIFF image data - -# Artisan -0 long 1123028772 Artisan image data ->4 long 1 \b, rectangular 24-bit ->4 long 2 \b, rectangular 8-bit with colormap ->4 long 3 \b, rectangular 32-bit (24-bit with matte) - -# FIG (Facility for Interactive Generation of figures), an object-based format -0 search/1 #FIG FIG image text ->5 string x \b, version %.3s - -# PHIGS -0 string ARF_BEGARF PHIGS clear text archive -0 string @(#)SunPHIGS SunPHIGS -# version number follows, in the form m.n ->40 string SunBin binary ->32 string archive archive - -# GKS (Graphics Kernel System) -0 string GKSM GKS Metafile ->24 string SunGKS \b, SunGKS - -# CGM image files -0 string BEGMF clear text Computer Graphics Metafile - -# MGR bitmaps (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de) -0 string yz MGR bitmap, modern format, 8-bit aligned -0 string zz MGR bitmap, old format, 1-bit deep, 16-bit aligned -0 string xz MGR bitmap, old format, 1-bit deep, 32-bit aligned -0 string yx MGR bitmap, modern format, squeezed - -# Fuzzy Bitmap (FBM) images -0 string %bitmap\0 FBM image data ->30 long 0x31 \b, mono ->30 long 0x33 \b, color - -# facsimile data -1 string PC\ Research,\ Inc group 3 fax data ->29 byte 0 \b, normal resolution (204x98 DPI) ->29 byte 1 \b, fine resolution (204x196 DPI) -# From: Herbert Rosmanith <herp@wildsau.idv.uni.linz.at> -0 string Sfff structured fax file - - -# PC bitmaps (OS/2, Windows BMP files) (Greg Roelofs, newt@uchicago.edu) -0 string BM ->14 leshort 12 PC bitmap, OS/2 1.x format -!:mime image/x-ms-bmp ->>18 leshort x \b, %d x ->>20 leshort x %d ->14 leshort 64 PC bitmap, OS/2 2.x format -!:mime image/x-ms-bmp ->>18 leshort x \b, %d x ->>20 leshort x %d ->14 leshort 40 PC bitmap, Windows 3.x format -!:mime image/x-ms-bmp ->>18 lelong x \b, %d x ->>22 lelong x %d x ->>28 leshort x %d ->14 leshort 128 PC bitmap, Windows NT/2000 format -!:mime image/x-ms-bmp ->>18 lelong x \b, %d x ->>22 lelong x %d x ->>28 leshort x %d -# Too simple - MPi -#0 string IC PC icon data -#0 string PI PC pointer image data -#0 string CI PC color icon data -#0 string CP PC color pointer image data -# Conflicts with other entries [BABYL] -#0 string BA PC bitmap array data - -# XPM icons (Greg Roelofs, newt@uchicago.edu) -# note possible collision with C/REXX entry in c-lang; currently commented out -0 search/1 /*\ XPM\ */ X pixmap image text - -# Utah Raster Toolkit RLE images (janl@ifi.uio.no) -0 leshort 0xcc52 RLE image data, ->6 leshort x %d x ->8 leshort x %d ->2 leshort >0 \b, lower left corner: %d ->4 leshort >0 \b, lower right corner: %d ->10 byte&0x1 =0x1 \b, clear first ->10 byte&0x2 =0x2 \b, no background ->10 byte&0x4 =0x4 \b, alpha channel ->10 byte&0x8 =0x8 \b, comment ->11 byte >0 \b, %d color channels ->12 byte >0 \b, %d bits per pixel ->13 byte >0 \b, %d color map channels - -# image file format (Robert Potter, potter@cs.rochester.edu) -0 string Imagefile\ version- iff image data -# this adds the whole header (inc. version number), informative but longish ->10 string >\0 %s - -# Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com) -0 belong 0x59a66a95 Sun raster image data ->4 belong >0 \b, %d x ->8 belong >0 %d, ->12 belong >0 %d-bit, -#>16 belong >0 %d bytes long, ->20 belong 0 old format, -#>20 belong 1 standard, ->20 belong 2 compressed, ->20 belong 3 RGB, ->20 belong 4 TIFF, ->20 belong 5 IFF, ->20 belong 0xffff reserved for testing, ->24 belong 0 no colormap ->24 belong 1 RGB colormap ->24 belong 2 raw colormap -#>28 belong >0 colormap is %d bytes long - -# SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com) -# -# See -# http://reality.sgi.com/grafica/sgiimage.html -# -0 beshort 474 SGI image data -#>2 byte 0 \b, verbatim ->2 byte 1 \b, RLE -#>3 byte 1 \b, normal precision ->3 byte 2 \b, high precision ->4 beshort x \b, %d-D ->6 beshort x \b, %d x ->8 beshort x %d ->10 beshort x \b, %d channel ->10 beshort !1 \bs ->80 string >0 \b, "%s" - -0 string IT01 FIT image data ->4 belong x \b, %d x ->8 belong x %d x ->12 belong x %d -# -0 string IT02 FIT image data ->4 belong x \b, %d x ->8 belong x %d x ->12 belong x %d -# -2048 string PCD_IPI Kodak Photo CD image pack file ->0xe02 byte&0x03 0x00 , landscape mode ->0xe02 byte&0x03 0x01 , portrait mode ->0xe02 byte&0x03 0x02 , landscape mode ->0xe02 byte&0x03 0x03 , portrait mode -0 string PCD_OPA Kodak Photo CD overview pack file - -# FITS format. Jeff Uphoff <juphoff@tarsier.cv.nrao.edu> -# FITS is the Flexible Image Transport System, the de facto standard for -# data and image transfer, storage, etc., for the astronomical community. -# (FITS floating point formats are big-endian.) -0 string SIMPLE\ \ = FITS image data ->109 string 8 \b, 8-bit, character or unsigned binary integer ->108 string 16 \b, 16-bit, two's complement binary integer ->107 string \ 32 \b, 32-bit, two's complement binary integer ->107 string -32 \b, 32-bit, floating point, single precision ->107 string -64 \b, 64-bit, floating point, double precision - -# other images -0 string This\ is\ a\ BitMap\ file Lisp Machine bit-array-file - -# From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image -# stuff. -# -0 beshort 0x1010 PEX Binary Archive - -# DICOM medical imaging data -128 string DICM DICOM medical imaging data -!:mime application/dicom - -# XWD - X Window Dump file. -# As described in /usr/X11R6/include/X11/XWDFile.h -# used by the xwd program. -# Bradford Castalia, idaeim, 1/01 -# updated by Adam Buchbinder, 2/09 -# The following assumes version 7 of the format; the first long is the length -# of the header, which is at least 25 4-byte longs, and the one at offset 8 -# is a constant which is always either 1 or 2. Offset 12 is the pixmap depth, -# which is a maximum of 32. -0 belong >100 ->8 belong <3 ->>12 belong <33 ->>>4 belong 7 XWD X Window Dump image data -!:mime image/x-xwindowdump ->>>>100 string >\0 \b, "%s" ->>>>16 belong x \b, %dx ->>>>20 belong x \b%dx ->>>>12 belong x \b%d - -# PDS - Planetary Data System -# These files use Parameter Value Language in the header section. -# Unfortunately, there is no certain magic, but the following -# strings have been found to be most likely. -0 string NJPL1I00 PDS (JPL) image data -2 string NJPL1I PDS (JPL) image data -0 string CCSD3ZF PDS (CCSD) image data -2 string CCSD3Z PDS (CCSD) image data -0 string PDS_ PDS image data -0 string LBLSIZE= PDS (VICAR) image data - -# pM8x: ATARI STAD compressed bitmap format -# -# from Oskar Schirmer <schirmer@scara.com> Feb 2, 2001 -# p M 8 5/6 xx yy zz data... -# Atari ST STAD bitmap is always 640x400, bytewise runlength compressed. -# bytes either run horizontally (pM85) or vertically (pM86). yy is the -# most frequent byte, xx and zz are runlength escape codes, where xx is -# used for runs of yy. -# -0 string pM85 Atari ST STAD bitmap image data (hor) ->5 byte 0x00 (white background) ->5 byte 0xFF (black background) -0 string pM86 Atari ST STAD bitmap image data (vert) ->5 byte 0x00 (white background) ->5 byte 0xFF (black background) - -# Gürkan Sengün <gurkan@linuks.mine.nu>, www.linuks.mine.nu -# http://www.atarimax.com/jindroush.atari.org/afmtatr.html -0 leshort 0x0296 Atari ATR image - -# XXX: -# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other -# magic. -# SGI RICE image file <mpruett@sgi.com> -#0 beshort 0x5249 RICE image -#>2 beshort x v%d -#>4 beshort x (%d x -#>6 beshort x %d) -#>8 beshort 0 8 bit -#>8 beshort 1 10 bit -#>8 beshort 2 12 bit -#>8 beshort 3 13 bit -#>10 beshort 0 4:2:2 -#>10 beshort 1 4:2:2:4 -#>10 beshort 2 4:4:4 -#>10 beshort 3 4:4:4:4 -#>12 beshort 1 RGB -#>12 beshort 2 CCIR601 -#>12 beshort 3 RP175 -#>12 beshort 4 YUV - -#------------------------------------------------------------------------------ -# -# Marco Schmidt (marcoschmidt@users.sourceforge.net) -- an image file format -# for the EPOC operating system, which is used with PDAs like those from Psion -# -# see http://huizen.dds.nl/~frodol/psiconv/html/Index.html for a description -# of various EPOC file formats - -0 string \x37\x00\x00\x10\x42\x00\x00\x10\x00\x00\x00\x00\x39\x64\x39\x47 EPOC MBM image file - -# PCX image files -# From: Dan Fandrich <dan@coneharvesters.com> -0 beshort 0x0a00 PCX ver. 2.5 image data -0 beshort 0x0a02 PCX ver. 2.8 image data, with palette -0 beshort 0x0a03 PCX ver. 2.8 image data, without palette -0 beshort 0x0a04 PCX for Windows image data -0 beshort 0x0a05 PCX ver. 3.0 image data ->4 leshort x bounding box [%hd, ->6 leshort x %hd] - ->8 leshort x [%hd, ->10 leshort x %hd], ->65 byte >1 %d planes each of ->3 byte x %hhd-bit ->68 byte 0 image, ->68 byte 1 colour, ->68 byte 2 grayscale, ->68 byte >2 image, ->68 byte <0 image, ->12 leshort >0 %hd x ->>14 leshort x %hd dpi, ->2 byte 0 uncompressed ->2 byte 1 RLE compressed - -# Adobe Photoshop -0 string 8BPS Adobe Photoshop Image -!:mime image/vnd.adobe.photoshop - -# XV thumbnail indicator (ThMO) -0 string P7\ 332 XV thumbnail image data - -# NITF is defined by United States MIL-STD-2500A -0 string NITF National Imagery Transmission Format ->25 string >\0 dated %.14s - -# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff) -0 belong 0x00010008 GEM Image data ->12 beshort x %d x ->14 beshort x %d, ->4 beshort x %d planes, ->8 beshort x %d x ->10 beshort x %d pixelsize - -# GEM Metafile (Wolfram Kleff) -0 lelong 0x0018FFFF GEM Metafile data ->4 leshort x version %d - -# -# SMJPEG. A custom Motion JPEG format used by Loki Entertainment -# Software Torbjorn Andersson <d91tan@Update.UU.SE>. -# -0 string \0\nSMJPEG SMJPEG ->8 belong x %d.x data -# According to the specification you could find any number of _TXT -# headers here, but I can't think of any way of handling that. None of -# the SMJPEG files I tried it on used this feature. Even if such a -# file is encountered the output should still be reasonable. ->16 string _SND \b, ->>24 beshort >0 %d Hz ->>26 byte 8 8-bit ->>26 byte 16 16-bit ->>28 string NONE uncompressed -# >>28 string APCM ADPCM compressed ->>27 byte 1 mono ->>28 byte 2 stereo -# Help! Isn't there any way to avoid writing this part twice? ->>32 string _VID \b, -# >>>48 string JFIF JPEG ->>>40 belong >0 %d frames ->>>44 beshort >0 (%d x ->>>46 beshort >0 %d) ->16 string _VID \b, -# >>32 string JFIF JPEG ->>24 belong >0 %d frames ->>28 beshort >0 (%d x ->>30 beshort >0 %d) - -0 string Paint\ Shop\ Pro\ Image\ File Paint Shop Pro Image File - -# "thumbnail file" (icon) -# descended from "xv", but in use by other applications as well (Wolfram Kleff) -0 string P7\ 332 XV "thumbnail file" (icon) data - -# taken from fkiss: (<yav@mte.biglobe.ne.jp> ?) -0 string KiSS KISS/GS ->4 byte 16 color ->>5 byte x %d bit ->>8 leshort x %d colors ->>10 leshort x %d groups ->4 byte 32 cell ->>5 byte x %d bit ->>8 leshort x %d x ->>10 leshort x %d ->>12 leshort x +%d ->>14 leshort x +%d - -# Webshots (www.webshots.com), by John Harrison -0 string C\253\221g\230\0\0\0 Webshots Desktop .wbz file - -# Hercules DASD image files -# From Jan Jaeger <jj@septa.nl> -0 string CKD_P370 Hercules CKD DASD image file ->8 long x \b, %d heads per cylinder ->12 long x \b, track size %d bytes ->16 byte x \b, device type 33%2.2X - -0 string CKD_C370 Hercules compressed CKD DASD image file ->8 long x \b, %d heads per cylinder ->12 long x \b, track size %d bytes ->16 byte x \b, device type 33%2.2X - -0 string CKD_S370 Hercules CKD DASD shadow file ->8 long x \b, %d heads per cylinder ->12 long x \b, track size %d bytes ->16 byte x \b, device type 33%2.2X - -# Squeak images and programs - etoffi@softhome.net -0 string \146\031\0\0 Squeak image data -0 search/1 'From\040Squeak Squeak program text - -# partimage: file(1) magic for PartImage files (experimental, incomplete) -# Author: Hans-Joachim Baader <hjb@pro-linux.de> -0 string PaRtImAgE-VoLuMe PartImage ->0x0020 string 0.6.1 file version %s ->>0x0060 lelong >-1 volume %ld -#>>0x0064 8 byte identifier -#>>0x007c reserved ->>0x0200 string >\0 type %s ->>0x1400 string >\0 device %s, ->>0x1600 string >\0 original filename %s, -# Some fields omitted ->>0x2744 lelong 0 not compressed ->>0x2744 lelong 1 gzip compressed ->>0x2744 lelong 2 bzip2 compressed ->>0x2744 lelong >2 compressed with unknown algorithm ->0x0020 string >0.6.1 file version %s ->0x0020 string <0.6.1 file version %s - -# DCX is multi-page PCX, using a simple header of up to 1024 -# offsets for the respective PCX components. -# From: Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de> -0 lelong 987654321 DCX multi-page PCX image data - -# Simon Walton <simonw@matteworld.com> -# Kodak Cineon format for scanned negatives -# http://www.kodak.com/US/en/motion/support/dlad/ -0 lelong 0xd75f2a80 Cineon image data ->200 belong >0 \b, %ld x ->204 belong >0 %ld - - -# Bio-Rad .PIC is an image format used by microscope control systems -# and related image processing software used by biologists. -# From: Vebjorn Ljosa <vebjorn@ljosa.com> -54 leshort 12345 Bio-Rad .PIC Image File ->0 leshort >0 %hd x ->2 leshort >0 %hd, ->4 leshort =1 1 image in file ->4 leshort >1 %hd images in file - -# From Jan "Yenya" Kasprzak <kas@fi.muni.cz> -# The description of *.mrw format can be found at -# http://www.dalibor.cz/minolta/raw_file_format.htm -0 string \000MRM Minolta Dimage camera raw image data - -# Summary: DjVu image / document -# Extension: .djvu -# Reference: http://djvu.org/docs/DjVu3Spec.djvu -# Submitted by: Stephane Loeuillet <stephane.loeuillet@tiscali.fr> -# Modified by (1): Abel Cheung <abelcheung@gmail.com> -0 string AT&TFORM -!:mime image/vnd.djvu ->12 string DJVM DjVu multiple page document ->12 string DJVU DjVu image or single page document ->12 string DJVI DjVu shared document ->12 string THUM DjVu page thumbnails - - -# From Marc Espie -0 lelong 20000630 OpenEXR image data - -# From: Tom Hilinski <tom.hilinski@comcast.net> -# http://www.unidata.ucar.edu/packages/netcdf/ -0 string CDF\001 NetCDF Data Format data - -#----------------------------------------------------------------------- -# Hierarchical Data Format, used to facilitate scientific data exchange -# specifications at http://hdf.ncsa.uiuc.edu/ -0 belong 0x0e031301 Hierarchical Data Format (version 4) data -!:mime application/x-hdf -0 string \211HDF\r\n\032 Hierarchical Data Format (version 5) data -!:mime application/x-hdf - -# From: Tobias Burnus <burnus@net-b.de> -# Xara (for a while: Corel Xara) is a graphic package, see -# http://www.xara.com/ for Windows and as GPL application for Linux -0 string XARA\243\243 Xara graphics file - -# http://www.cartesianinc.com/Tech/ -0 string CPC\262 Cartesian Perceptual Compression image -!:mime image/x-cpi - -# From Albert Cahalan <acahalan@gmail.com> -# puredigital used it for the CVS disposable camcorder -#8 lelong 4 ZBM bitmap image data -#>4 leshort x %u x -#>6 leshort x %u - -# From Albert Cahalan <acahalan@gmail.com> -# uncompressed 5:6:5 HighColor image for OLPC XO firmware icons -0 string C565 OLPC firmware icon image data ->4 leshort x %u x ->6 leshort x %u - -# Applied Images - Image files from Cytovision -# Gustavo Junior Alves <gjalves@gjalves.com.br> -0 string \xce\xda\xde\xfa Cytovision Metaphases file -0 string \xed\xad\xef\xac Cytovision Karyotype file -0 string \x0b\x00\x03\x00 Cytovision FISH Probe file -0 string \xed\xfe\xda\xbe Cytovision FLEX file -0 string \xed\xab\xed\xfe Cytovision FLEX file -0 string \xad\xfd\xea\xad Cytovision RATS file - -# Wavelet Scalar Quantization format used in gray-scale fingerprint images -# From Tano M Fotang <mfotang@quanteq.com> -0 string \xff\xa0\xff\xa8\x00 Wavelet Scalar Quantization image data - -# JPEG 2000 Code Stream Bitmap -# From Petr Splichal <psplicha@redhat.com> -0 string \xFF\x4F\xFF\x51\x00 JPEG-2000 Code Stream Bitmap data - -# Type: Ulead Photo Explorer5 (.pe5) -# URL: http://www.jisyo.com/cgibin/view.cgi?EXT=pe5 (Japanese) -# From: Simon Horman <horms@debian.org> -0 string IIO2H Ulead Photo Explorer5 - -# Type: X11 cursor -# URL: http://webcvs.freedesktop.org/mime/shared-mime-info/freedesktop.org.xml.in?view=markup -# From: Mathias Brodala <info@noctus.net> -0 string Xcur X11 cursor - -#------------------------------------------------------------------------------ -# inform: file(1) magic for Inform interactive fiction language - -# URL: http://www.inform-fiction.org/ -# From: Reuben Thomas <rrt@sc3d.org> - -0 search/cB/100 constant\ story Inform source text - -#------------------------------------------------------------------------------ -# intel: file(1) magic for x86 Unix -# -# Various flavors of x86 UNIX executable/object (other than Xenix, which -# is in "microsoft"). DOS is in "msdos"; the ambitious soul can do -# Windows as well. -# -# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and -# whatever comes next (HP-PA Hummingbird?). OS/2 may also go elsewhere -# as well, if, as, and when IBM makes it portable. -# -# The `versions' should be un-commented if they work for you. -# (Was the problem just one of endianness?) -# -0 leshort 0502 basic-16 executable ->12 lelong >0 not stripped -#>22 leshort >0 - version %ld -0 leshort 0503 basic-16 executable (TV) ->12 lelong >0 not stripped -#>22 leshort >0 - version %ld -0 leshort 0510 x86 executable ->12 lelong >0 not stripped -0 leshort 0511 x86 executable (TV) ->12 lelong >0 not stripped -0 leshort =0512 iAPX 286 executable small model (COFF) ->12 lelong >0 not stripped -#>22 leshort >0 - version %ld -0 leshort =0522 iAPX 286 executable large model (COFF) ->12 lelong >0 not stripped -#>22 leshort >0 - version %ld -# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan -0 leshort =0514 80386 COFF executable ->12 lelong >0 not stripped ->22 leshort >0 - version %ld - -# rom: file(1) magic for BIOS ROM Extensions found in intel machines -# mapped into memory between 0xC0000 and 0xFFFFF -# From Gürkan Sengün <gurkan@linuks.mine.nu>, www.linuks.mine.nu -0 beshort 0x55AA BIOS (ia32) ROM Ext. ->5 string USB USB ->7 string LDR UNDI image ->30 string IBM IBM comp. Video ->26 string Adaptec Adaptec ->28 string Adaptec Adaptec ->42 string PROMISE Promise ->2 byte x (%d*512) - -#------------------------------------------------------------------------------ -# interleaf: file(1) magic for InterLeaf TPS: -# -0 string =\210OPS Interleaf saved data -0 string =<!OPS Interleaf document text ->5 string ,\ Version\ = \b, version ->>17 string >\0 %.3s - -#------------------------------------------------------------------------------ -# island: file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1 -# "/etc/magic": -# From: guy@netapp.com (Guy Harris) -# -4 string pgscriptver IslandWrite document -13 string DrawFile IslandDraw document - - -#------------------------------------------------------------------------------ -# ispell: file(1) magic for ispell -# -# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602. This magic -# will match 0x9600 through 0x9603 in *both* little endian and big endian. -# (No other current magic entries collide.) -# -# Updated by Daniel Quinlan (quinlan@yggdrasil.com) -# -0 leshort&0xFFFC 0x9600 little endian ispell ->0 byte 0 hash file (?), ->0 byte 1 3.0 hash file, ->0 byte 2 3.1 hash file, ->0 byte 3 hash file (?), ->2 leshort 0x00 8-bit, no capitalization, 26 flags ->2 leshort 0x01 7-bit, no capitalization, 26 flags ->2 leshort 0x02 8-bit, capitalization, 26 flags ->2 leshort 0x03 7-bit, capitalization, 26 flags ->2 leshort 0x04 8-bit, no capitalization, 52 flags ->2 leshort 0x05 7-bit, no capitalization, 52 flags ->2 leshort 0x06 8-bit, capitalization, 52 flags ->2 leshort 0x07 7-bit, capitalization, 52 flags ->2 leshort 0x08 8-bit, no capitalization, 128 flags ->2 leshort 0x09 7-bit, no capitalization, 128 flags ->2 leshort 0x0A 8-bit, capitalization, 128 flags ->2 leshort 0x0B 7-bit, capitalization, 128 flags ->2 leshort 0x0C 8-bit, no capitalization, 256 flags ->2 leshort 0x0D 7-bit, no capitalization, 256 flags ->2 leshort 0x0E 8-bit, capitalization, 256 flags ->2 leshort 0x0F 7-bit, capitalization, 256 flags ->4 leshort >0 and %d string characters -0 beshort&0xFFFC 0x9600 big endian ispell ->1 byte 0 hash file (?), ->1 byte 1 3.0 hash file, ->1 byte 2 3.1 hash file, ->1 byte 3 hash file (?), ->2 beshort 0x00 8-bit, no capitalization, 26 flags ->2 beshort 0x01 7-bit, no capitalization, 26 flags ->2 beshort 0x02 8-bit, capitalization, 26 flags ->2 beshort 0x03 7-bit, capitalization, 26 flags ->2 beshort 0x04 8-bit, no capitalization, 52 flags ->2 beshort 0x05 7-bit, no capitalization, 52 flags ->2 beshort 0x06 8-bit, capitalization, 52 flags ->2 beshort 0x07 7-bit, capitalization, 52 flags ->2 beshort 0x08 8-bit, no capitalization, 128 flags ->2 beshort 0x09 7-bit, no capitalization, 128 flags ->2 beshort 0x0A 8-bit, capitalization, 128 flags ->2 beshort 0x0B 7-bit, capitalization, 128 flags ->2 beshort 0x0C 8-bit, no capitalization, 256 flags ->2 beshort 0x0D 7-bit, no capitalization, 256 flags ->2 beshort 0x0E 8-bit, capitalization, 256 flags ->2 beshort 0x0F 7-bit, capitalization, 256 flags ->4 beshort >0 and %d string characters -# ispell 4.0 hash files kromJx <kromJx@crosswinds.net> -# Ispell 4.0 -0 string ISPL ispell ->4 long x hash file version %d, ->8 long x lexletters %d, ->12 long x lexsize %d, ->16 long x hashsize %d, ->20 long x stblsize %d -#------------------------------------------------------------ -# Java ByteCode and Mach-O binaries (e.g., Mac OS X) use the -# same magic number, 0xcafebabe, so they are both handled -# in the entry called "cafebabe". -#------------------------------------------------------------ -# Java serialization -# From Martin Pool (m.pool@pharos.com.au) -0 beshort 0xaced Java serialization data ->2 beshort >0x0004 \b, version %d - -0 belong 0xfeedfeed Java KeyStore -!:mime application/x-java-keystore -0 belong 0xcececece Java JCE KeyStore -!:mime application/x-java-jce-keystore - -# Dalvik .dex format. http://retrodev.com/android/dexformat.html -# From <mkf@google.com> "Mike Fleming" -0 string dex\n ->0 regex dex\n[0-9][0-9][0-9]\0 Dalvik dex file ->4 string >000 version %s -0 string dey\n ->0 regex dey\n[0-9][0-9][0-9]\0 Dalvik dex file (optimized for host) ->4 string >000 version %s - - -#------------------------------------------------------------------------------ -# JPEG images -# SunOS 5.5.1 had -# -# 0 string \377\330\377\340 JPEG file -# 0 string \377\330\377\356 JPG file -# -# both of which turn into "JPEG image data" here. -# -0 beshort 0xffd8 JPEG image data -!:mime image/jpeg -!:apple 8BIMJPEG -!:strength +1 ->6 string JFIF \b, JFIF standard -# The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06 -# in a vain attempt to add image size reporting for JFIF. Note that these -# tests are not fool-proof since some perfectly valid JPEGs are currently -# impossible to specify in magic(4) format. -# First, a little JFIF version info: ->>11 byte x \b %d. ->>12 byte x \b%02d -# Next, the resolution or aspect ratio of the image: -#>>13 byte 0 \b, aspect ratio -#>>13 byte 1 \b, resolution (DPI) -#>>13 byte 2 \b, resolution (DPCM) -#>>4 beshort x \b, segment length %d -# Next, show thumbnail info, if it exists: ->>18 byte !0 \b, thumbnail %dx ->>>19 byte x \b%d - -# EXIF moved down here to avoid reporting a bogus version number, -# and EXIF version number printing added. -# - Patrik R=E5dman <patrik+file-magic@iki.fi> ->6 string Exif \b, EXIF standard -# Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD. -# All possible combinations of entries have to be enumerated, since no looping -# is possible. And both endians are possible... -# The combinations included below are from real-world JPEGs. -# Little-endian ->>12 string II -# IFD 0 Entry #5: ->>>70 leshort 0x8769 -# EXIF IFD Entry #1: ->>>>(78.l+14) leshort 0x9000 ->>>>>(78.l+23) byte x %c ->>>>>(78.l+24) byte x \b.%c ->>>>>(78.l+25) byte !0x30 \b%c -# IFD 0 Entry #9: ->>>118 leshort 0x8769 -# EXIF IFD Entry #3: ->>>>(126.l+38) leshort 0x9000 ->>>>>(126.l+47) byte x %c ->>>>>(126.l+48) byte x \b.%c ->>>>>(126.l+49) byte !0x30 \b%c -# IFD 0 Entry #10 ->>>130 leshort 0x8769 -# EXIF IFD Entry #3: ->>>>(138.l+38) leshort 0x9000 ->>>>>(138.l+47) byte x %c ->>>>>(138.l+48) byte x \b.%c ->>>>>(138.l+49) byte !0x30 \b%c -# EXIF IFD Entry #4: ->>>>(138.l+50) leshort 0x9000 ->>>>>(138.l+59) byte x %c ->>>>>(138.l+60) byte x \b.%c ->>>>>(138.l+61) byte !0x30 \b%c -# EXIF IFD Entry #5: ->>>>(138.l+62) leshort 0x9000 ->>>>>(138.l+71) byte x %c ->>>>>(138.l+72) byte x \b.%c ->>>>>(138.l+73) byte !0x30 \b%c -# IFD 0 Entry #11 ->>>142 leshort 0x8769 -# EXIF IFD Entry #3: ->>>>(150.l+38) leshort 0x9000 ->>>>>(150.l+47) byte x %c ->>>>>(150.l+48) byte x \b.%c ->>>>>(150.l+49) byte !0x30 \b%c -# EXIF IFD Entry #4: ->>>>(150.l+50) leshort 0x9000 ->>>>>(150.l+59) byte x %c ->>>>>(150.l+60) byte x \b.%c ->>>>>(150.l+61) byte !0x30 \b%c -# EXIF IFD Entry #5: ->>>>(150.l+62) leshort 0x9000 ->>>>>(150.l+71) byte x %c ->>>>>(150.l+72) byte x \b.%c ->>>>>(150.l+73) byte !0x30 \b%c -# Big-endian ->>12 string MM -# IFD 0 Entry #9: ->>>118 beshort 0x8769 -# EXIF IFD Entry #1: ->>>>(126.L+14) beshort 0x9000 ->>>>>(126.L+23) byte x %c ->>>>>(126.L+24) byte x \b.%c ->>>>>(126.L+25) byte !0x30 \b%c -# EXIF IFD Entry #3: ->>>>(126.L+38) beshort 0x9000 ->>>>>(126.L+47) byte x %c ->>>>>(126.L+48) byte x \b.%c ->>>>>(126.L+49) byte !0x30 \b%c -# IFD 0 Entry #10 ->>>130 beshort 0x8769 -# EXIF IFD Entry #3: ->>>>(138.L+38) beshort 0x9000 ->>>>>(138.L+47) byte x %c ->>>>>(138.L+48) byte x \b.%c ->>>>>(138.L+49) byte !0x30 \b%c -# EXIF IFD Entry #5: ->>>>(138.L+62) beshort 0x9000 ->>>>>(138.L+71) byte x %c ->>>>>(138.L+72) byte x \b.%c ->>>>>(138.L+73) byte !0x30 \b%c -# IFD 0 Entry #11 ->>>142 beshort 0x8769 -# EXIF IFD Entry #4: ->>>>(150.L+50) beshort 0x9000 ->>>>>(150.L+59) byte x %c ->>>>>(150.L+60) byte x \b.%c ->>>>>(150.L+61) byte !0x30 \b%c -# Here things get sticky. We can do ONE MORE marker segment with -# indirect addressing, and that's all. It would be great if we could -# do pointer arithemetic like in an assembler language. Christos? -# And if there was some sort of looping construct to do searches, plus a few -# named accumulators, it would be even more effective... -# At least we can show a comment if no other segments got inserted before: ->(4.S+5) byte 0xFE ->>(4.S+8) string >\0 \b, comment: "%s" -# FIXME: When we can do non-byte counted strings, we can use that to get -# the string's count, and fix Debian bug #283760 -#>(4.S+5) byte 0xFE \b, comment -#>>(4.S+6) beshort x \b length=%d -#>>(4.S+8) string >\0 \b, "%s" -# Or, we can show the encoding type (I've included only the three most common) -# and image dimensions if we are lucky and the SOFn (image segment) is here: ->(4.S+5) byte 0xC0 \b, baseline ->>(4.S+6) byte x \b, precision %d ->>(4.S+7) beshort x \b, %dx ->>(4.S+9) beshort x \b%d ->(4.S+5) byte 0xC1 \b, extended sequential ->>(4.S+6) byte x \b, precision %d ->>(4.S+7) beshort x \b, %dx ->>(4.S+9) beshort x \b%d ->(4.S+5) byte 0xC2 \b, progressive ->>(4.S+6) byte x \b, precision %d ->>(4.S+7) beshort x \b, %dx ->>(4.S+9) beshort x \b%d -# I've commented-out quantisation table reporting. I doubt anyone cares yet. -#>(4.S+5) byte 0xDB \b, quantisation table -#>>(4.S+6) beshort x \b length=%d -#>14 beshort x \b, %d x -#>16 beshort x \b %d - -# HSI is Handmade Software's proprietary JPEG encoding scheme -0 string hsi1 JPEG image data, HSI proprietary - -# From: David Santinoli <david@santinoli.com> -0 string \x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A JPEG 2000 image data - -# Type: JPEG 2000 codesream -# From: Mathieu Malaterre <mathieu.malaterre@gmail.com> -0 belong 0xff4fff51 JPEG 2000 codestream -45 beshort 0xff52 - -#------------------------------------------------------------------------------ -# karma: file(1) magic for Karma data files -# -# From <rgooch@atnf.csiro.au> - -0 string KarmaRHD Version Karma Data Structure Version ->16 belong x %lu - -#------------------------------------------------------------------------------ -# kde: file(1) magic for KDE - -0 string [KDE\ Desktop\ Entry] KDE desktop entry -!:mime application/x-kdelnk -0 string #\ KDE\ Config\ File KDE config file -!:mime application/x-kdelnk -0 string #\ xmcd xmcd database file for kscd -!:mime text/x-xmcd -#------------------------------------------------------------------------------ -# Type: Google KML, formerly Keyhole Markup Language -# Future development of this format has been handed -# over to the Open Geospatial Consortium. -# http://www.opengeospatial.org/standards/kml/ -# From: Asbjoern Sloth Toennesen <asbjorn@lila.io> -0 string \<?xml ->20 search/400 \ xmlns= ->>&0 regex ['"]http://earth.google.com/kml Google KML document -!:mime application/vnd.google-earth.kml+xml ->>>&1 string 2.0' \b, version 2.0 ->>>&1 string 2.1' \b, version 2.1 ->>>&1 string 2.2' \b, version 2.2 - -#------------------------------------------------------------------------------ -# Type: OpenGIS KML, formerly Keyhole Markup Language -# This standard is maintained by the -# Open Geospatial Consortium. -# http://www.opengeospatial.org/standards/kml/ -# From: Asbjoern Sloth Toennesen <asbjorn@lila.io> ->>&0 regex ['"]http://www.opengis.net/kml OpenGIS KML document -!:mime application/vnd.google-earth.kml+xml ->>>&1 string 2.2 \b, version 2.2 - -#------------------------------------------------------------------------------ -# Type: Google KML Archive (ZIP based) -# http://code.google.com/apis/kml/documentation/kml_tut.html -# From: Asbjoern Sloth Toennesen <asbjorn@lila.io> -0 string PK\003\004 ->4 byte 0x14 ->>30 string doc.kml Compressed Google KML Document, including resources. -!:mime application/vnd.google-earth.kmz -#------------------------------------------------------------------------------ -# DEC SRC Virtual Paper: Lectern files -# Karl M. Hegbloom <karlheg@inetarena.com> -0 string lect DEC SRC Virtual Paper Lectern file -#------------------------------------------------------------------------------ -# lex: file(1) magic for lex -# -# derived empirically, your offsets may vary! -0 search/100 yyprevious C program text (from lex) ->3 search/1 >\0 for %s -# C program text from GNU flex, from Daniel Quinlan <quinlan@yggdrasil.com> -0 search/100 generated\ by\ flex C program text (from flex) -# lex description file, from Daniel Quinlan <quinlan@yggdrasil.com> -0 search/1 %{ lex description text - -#------------------------------------------------------------------------------ -# lif: file(1) magic for lif -# -# (Daniel Quinlan <quinlan@yggdrasil.com>) -# -0 beshort 0x8000 lif file -#------------------------------------------------------------------------------ -# linux: file(1) magic for Linux files -# -# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com> -# The following basic Linux magic is useful for reference, but using -# "long" magic is a better practice in order to avoid collisions. -# -# 2 leshort 100 Linux/i386 -# >0 leshort 0407 impure executable (OMAGIC) -# >0 leshort 0410 pure executable (NMAGIC) -# >0 leshort 0413 demand-paged executable (ZMAGIC) -# >0 leshort 0314 demand-paged executable (QMAGIC) -# -0 lelong 0x00640107 Linux/i386 impure executable (OMAGIC) ->16 lelong 0 \b, stripped -0 lelong 0x00640108 Linux/i386 pure executable (NMAGIC) ->16 lelong 0 \b, stripped -0 lelong 0x0064010b Linux/i386 demand-paged executable (ZMAGIC) ->16 lelong 0 \b, stripped -0 lelong 0x006400cc Linux/i386 demand-paged executable (QMAGIC) ->16 lelong 0 \b, stripped -# -0 string \007\001\000 Linux/i386 object file ->20 lelong >0x1020 \b, DLL library -# Linux-8086 stuff: -0 string \01\03\020\04 Linux-8086 impure executable ->28 long !0 not stripped -0 string \01\03\040\04 Linux-8086 executable ->28 long !0 not stripped -# -0 string \243\206\001\0 Linux-8086 object file -# -0 string \01\03\020\20 Minix-386 impure executable ->28 long !0 not stripped -0 string \01\03\040\20 Minix-386 executable ->28 long !0 not stripped -# core dump file, from Bill Reynolds <bill@goshawk.lanl.gov> -216 lelong 0421 Linux/i386 core file ->220 string >\0 of '%s' ->200 lelong >0 (signal %d) -# -# LILO boot/chain loaders, from Daniel Quinlan <quinlan@yggdrasil.com> -# this can be overridden by the DOS executable (COM) entry -2 string LILO Linux/i386 LILO boot/chain loader -# -# PSF fonts, from H. Peter Anvin <hpa@yggdrasil.com> -0 leshort 0x0436 Linux/i386 PC Screen Font data, ->2 byte 0 256 characters, no directory, ->2 byte 1 512 characters, no directory, ->2 byte 2 256 characters, Unicode directory, ->2 byte 3 512 characters, Unicode directory, ->3 byte >0 8x%d -# Linux swap file, from Daniel Quinlan <quinlan@yggdrasil.com> -4086 string SWAP-SPACE Linux/i386 swap file -# From: Jeff Bailey <jbailey@ubuntu.com> -# Linux swap file with swsusp1 image, from Jeff Bailey <jbailey@ubuntu.com> -4076 string SWAPSPACE2S1SUSPEND Linux/i386 swap file (new style) with SWSUSP1 image -# according to man page of mkswap (8) March 1999 -# volume label and UUID Russell Coker -# http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/ -4086 string SWAPSPACE2 Linux/i386 swap file (new style), ->0x400 long x version %d (4K pages), ->0x404 long x size %d pages, ->1052 string \0 no label, ->1052 string >\0 LABEL=%s, ->0x40c belong x UUID=%08x ->0x410 beshort x \b-%04x ->0x412 beshort x \b-%04x ->0x414 beshort x \b-%04x ->0x416 belong x \b-%08x ->0x41a beshort x \b%04x -# ECOFF magic for OSF/1 and Linux (only tested under Linux though) -# -# from Erik Troan (ewt@redhat.com) examining od dumps, so this -# could be wrong -# updated by David Mosberger (davidm@azstarnet.com) based on -# GNU BFD and MIPS info found below. -# -0 leshort 0x0183 ECOFF alpha ->24 leshort 0407 executable ->24 leshort 0410 pure ->24 leshort 0413 demand paged ->8 long >0 not stripped ->8 long 0 stripped ->23 leshort >0 - version %ld. -# -# Linux kernel boot images, from Albert Cahalan <acahalan@cs.uml.edu> -# and others such as Axel Kohlmeyer <akohlmey@rincewind.chemie.uni-ulm.de> -# and Nicol�s Lichtmaier <nick@debian.org> -# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29 -# Linux kernel boot images (i386 arch) (Wolfram Kleff) -514 string HdrS Linux kernel ->510 leshort 0xAA55 x86 boot executable ->>518 leshort >0x1ff ->>>529 byte 0 zImage, ->>>529 byte 1 bzImage, ->>>(526.s+0x200) string >\0 version %s, ->>498 leshort 1 RO-rootFS, ->>498 leshort 0 RW-rootFS, ->>508 leshort >0 root_dev 0x%X, ->>502 leshort >0 swap_dev 0x%X, ->>504 leshort >0 RAMdisksize %u KB, ->>506 leshort 0xFFFF Normal VGA ->>506 leshort 0xFFFE Extended VGA ->>506 leshort 0xFFFD Prompt for Videomode ->>506 leshort >0 Video mode %d -# This also matches new kernels, which were caught above by "HdrS". -0 belong 0xb8c0078e Linux kernel ->0x1e3 string Loading version 1.3.79 or older ->0x1e9 string Loading from prehistoric times - -# System.map files - Nicol�s Lichtmaier <nick@debian.org> -8 search/1 \ A\ _text Linux kernel symbol map text - -# LSM entries - Nicol�s Lichtmaier <nick@debian.org> -0 search/1 Begin3 Linux Software Map entry text -0 search/1 Begin4 Linux Software Map entry text (new format) - -# From Matt Zimmerman, enhanced for v3 by Matthew Palmer -0 belong 0x4f4f4f4d User-mode Linux COW file ->4 belong <3 \b, version %d ->>8 string >\0 \b, backing file %s ->4 belong >2 \b, version %d ->>32 string >\0 \b, backing file %s - -############################################################################ -# Linux kernel versions - -0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 Linux ->497 leshort 0 x86 boot sector ->>514 belong 0x8e of a kernel from the dawn of time! ->>514 belong 0x908ed8b4 version 0.99-1.1.42 ->>514 belong 0x908ed8b8 for memtest86 - ->497 leshort !0 x86 kernel ->>504 leshort >0 RAMdisksize=%u KB ->>502 leshort >0 swap=0x%X ->>508 leshort >0 root=0x%X ->>>498 leshort 1 \b-ro ->>>498 leshort 0 \b-rw ->>506 leshort 0xFFFF vga=normal ->>506 leshort 0xFFFE vga=extended ->>506 leshort 0xFFFD vga=ask ->>506 leshort >0 vga=%d ->>514 belong 0x908ed881 version 1.1.43-1.1.45 ->>514 belong 0x15b281cd ->>>0xa8e belong 0x55AA5a5a version 1.1.46-1.2.13,1.3.0 ->>>0xa99 belong 0x55AA5a5a version 1.3.1,2 ->>>0xaa3 belong 0x55AA5a5a version 1.3.3-1.3.30 ->>>0xaa6 belong 0x55AA5a5a version 1.3.31-1.3.41 ->>>0xb2b belong 0x55AA5a5a version 1.3.42-1.3.45 ->>>0xaf7 belong 0x55AA5a5a version 1.3.46-1.3.72 ->>514 string HdrS ->>>518 leshort >0x1FF ->>>>529 byte 0 \b, zImage ->>>>529 byte 1 \b, bzImage ->>>>(526.s+0x200) string >\0 \b, version %s - -# Linux boot sector thefts. -0 belong 0xb8c0078e Linux ->0x1e6 belong 0x454c4b53 ELKS Kernel ->0x1e6 belong !0x454c4b53 style boot sector - -############################################################################ -# Linux 8086 executable -0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless ->5 string . ->>4 string >\0 \b, libc version %s - -0 lelong&0xFF00FFFF 0x4000301 Linux-8086 executable ->2 byte&0x01 !0 \b, unmapped zero page ->2 byte&0x20 0 \b, impure ->2 byte&0x20 !0 ->>2 byte&0x10 !0 \b, A_EXEC ->2 byte&0x02 !0 \b, A_PAL ->2 byte&0x04 !0 \b, A_NSYM ->2 byte&0x08 !0 \b, A_STAND ->2 byte&0x40 !0 \b, A_PURE ->2 byte&0x80 !0 \b, A_TOVLY ->28 long !0 \b, not stripped ->37 string . ->>36 string >\0 \b, libc version %s - -# 0 lelong&0xFF00FFFF 0x10000301 ld86 I80386 executable -# 0 lelong&0xFF00FFFF 0xB000301 ld86 M68K executable -# 0 lelong&0xFF00FFFF 0xC000301 ld86 NS16K executable -# 0 lelong&0xFF00FFFF 0x17000301 ld86 SPARC executable - -# SYSLINUX boot logo files (from 'ppmtolss16' sources) -# http://syslinux.zytor.com/ -# -0 lelong =0x1413f33d SYSLINUX' LSS16 image data ->4 leshort x \b, width %d ->6 leshort x \b, height %d - -0 string OOOM User-Mode-Linux's Copy-On-Write disk image ->4 belong x version %d - -# SE Linux policy database -# From: Mike Frysinger <vapier@gentoo.org> -0 lelong 0xf97cff8c SE Linux policy ->16 lelong x v%d ->20 lelong 1 MLS ->24 lelong x %d symbols ->28 lelong x %d ocons - -# Linux Logical Volume Manager (LVM) -# Emmanuel VARAGNAT <emmanuel.varagnat@guzu.net> -# -# System ID, UUID and volume group name are 128 bytes long -# but they should never be full and initialized with zeros... -# -# LVM1 -# -0x0 string HM\001 LVM1 (Linux Logical Volume Manager), version 1 ->0x12c string >\0 , System ID: %s - -0x0 string HM\002 LVM1 (Linux Logical Volume Manager), version 2 ->0x12c string >\0 , System ID: %s - -# LVM2 -# -# It seems that the label header can be in one the four first sector -# of the disk... (from _find_labeller in lib/label/label.c of LVM2) -# -# 0x200 seems to be the common case - -0x218 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) -# read the offset to add to the start of the header, and the header -# start in 0x200 ->(0x214.l+0x200) string >\0 , UUID: %s - -0x018 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) ->(0x014.l) string >\0 , UUID: %s - -0x418 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) ->(0x414.l+0x400) string >\0 , UUID: %s - -0x618 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) ->(0x614.l+0x600) string >\0 , UUID: %s - -# LVM snapshot -# from Jason Farrel -0 string SnAp LVM Snapshot (CopyOnWrite store) ->4 lelong !0 - valid, ->4 lelong 0 - invalid, ->8 lelong x version %d, ->12 lelong x chunk_size %d - -# SE Linux policy database -0 lelong 0xf97cff8c SE Linux policy ->16 lelong x v%d ->20 lelong 1 MLS ->24 lelong x %d symbols ->28 lelong x %d ocons - -# LUKS: Linux Unified Key Setup, On-Disk Format, http://luks.endorphin.org/spec -# Anthon van der Neut (anthon@mnt.org) -0 string LUKS\xba\xbe LUKS encrypted file, ->6 beshort x ver %d ->8 string x [%s, ->40 string x %s, ->72 string x %s] ->168 string x UUID: %s - - -# Summary: Xen saved domain file -# Created by: Radek Vokal <rvokal@redhat.com> -0 string LinuxGuestRecord Xen saved domain ->20 search/256 (name ->>&1 string x (name %s) - -# Type: Xen, the virtual machine monitor -# From: Radek Vokal <rvokal@redhat.com> -0 string LinuxGuestRecord Xen saved domain -#>2 regex \(name\ [^)]*\) %s ->20 search/256 (name (name ->>&1 string x %s...) -#------------------------------------------------------------------------------ -# lisp: file(1) magic for lisp programs -# -# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com) - -# updated by Joerg Jenderek -# GRR: This lot is too weak -#0 string ;; -# windows INF files often begin with semicolon and use CRLF as line end -# lisp files are mainly created on unix system with LF as line end -#>2 search/4096 !\r Lisp/Scheme program text -#>2 search/4096 \r Windows INF file - -0 search/4096 (if\ Lisp/Scheme program text -!:mime text/x-lisp -0 search/4096 (setq\ Lisp/Scheme program text -!:mime text/x-lisp -0 search/4096 (defvar\ Lisp/Scheme program text -!:mime text/x-lisp -0 search/4096 (defparam\ Lisp/Scheme program text -!:mime text/x-lisp -0 search/4096 (defun\ Lisp/Scheme program text -!:mime text/x-lisp -0 search/4096 (autoload\ Lisp/Scheme program text -!:mime text/x-lisp -0 search/4096 (custom-set-variables\ Lisp/Scheme program text -!:mime text/x-lisp - -# Emacs 18 - this is always correct, but not very magical. -0 string \012( Emacs v18 byte-compiled Lisp data -!:mime application/x-elc -# Emacs 19+ - ver. recognition added by Ian Springer -# Also applies to XEmacs 19+ .elc files; could tell them apart with regexs -# - Chris Chittleborough <cchittleborough@yahoo.com.au> -0 string ;ELC ->4 byte >18 ->4 byte <32 Emacs/XEmacs v%d byte-compiled Lisp data -!:mime application/x-elc - -# Files produced by CLISP Common Lisp From: Bruno Haible <haible@ilog.fr> -0 string (SYSTEM::VERSION\040' CLISP byte-compiled Lisp program (pre 2004-03-27) -0 string (|SYSTEM|::|VERSION|\040' CLISP byte-compiled Lisp program text - -0 long 0x70768BD2 CLISP memory image data -0 long 0xD28B7670 CLISP memory image data, other endian - -#.com and .bin for MIT scheme -0 string \372\372\372\372 MIT scheme (library?) - -# From: David Allouche <david@allouche.net> -0 search/1 \<TeXmacs| TeXmacs document text -!:mime text/texmacs - -#------------------------------------------------------------------------------ -# llvm: file(1) magic for LLVM byte-codes -# URL: http://llvm.org/docs/BitCodeFormat.html -# From: Al Stone <ahs3@fc.hp.com> - -0 string llvm LLVM byte-codes, uncompressed -0 string llvc0 LLVM byte-codes, null compression -0 string llvc1 LLVM byte-codes, gzip compression -0 string llvc2 LLVM byte-codes, bzip2 compression -0 string \xde\xc0\x17\x0b LLVM bitcode, wrapper -0 string BC\xc0\xde LLVM bitcode -#------------------------------------------------------------------------------ -# lua: file(1) magic for Lua scripting language -# URL: http://www.lua.org/ -# From: Reuben Thomas <rrt@sc3d.org>, Seo Sanghyeon <tinuviel@sparcs.kaist.ac.kr> - -# Lua scripts -0 search/1/b #!\ /usr/bin/lua Lua script text executable -!:mime text/x-lua -0 search/1/b #!\ /usr/local/bin/lua Lua script text executable -!:mime text/x-lua -0 search/1 #!/usr/bin/env\ lua Lua script text executable -!:mime text/x-lua -0 search/1 #!\ /usr/bin/env\ lua Lua script text executable -!:mime text/x-lua - -# Lua bytecode -0 string \033Lua Lua bytecode, ->4 byte 0x50 version 5.0 ->4 byte 0x51 version 5.1 - -#------------------------------------------------------------------------------ -# luks: file(1) magic for Linux Unified Key Setup -# URL: http://luks.endorphin.org/spec -# From: Anthon van der Neut <anthon@mnt.org> - -0 string LUKS\xba\xbe LUKS encrypted file, ->6 beshort x ver %d ->8 string x [%s, ->40 string x %s, ->72 string x %s] ->168 string x UUID: %s -#------------------------------------------------------------ -# Mach has two magic numbers, 0xcafebabe and 0xfeedface. -# Unfortunately the first, cafebabe, is shared with -# Java ByteCode, so they are both handled in the file "cafebabe". -# The "feedface" ones are handled herein. -#------------------------------------------------------------ -0 lelong&0xfffffffe 0xfeedface Mach-O ->0 byte 0xcf 64-bit ->12 lelong 1 object ->12 lelong 2 executable ->12 lelong 3 fixed virtual memory shared library ->12 lelong 4 core ->12 lelong 5 preload executable ->12 lelong 6 dynamically linked shared library ->12 lelong 7 dynamic linker ->12 lelong 8 bundle ->12 lelong 9 dynamically linked shared library stub ->12 lelong >9 ->>12 lelong x filetype=%ld ->4 lelong <0 ->>4 lelong x architecture=%ld ->4 lelong 1 vax ->4 lelong 2 romp ->4 lelong 3 architecture=3 ->4 lelong 4 ns32032 ->4 lelong 5 ns32332 ->4 lelong 6 m68k ->4 lelong 7 i386 ->4 lelong 8 mips ->4 lelong 9 ns32532 ->4 lelong 10 architecture=10 ->4 lelong 11 hppa ->4 lelong 12 acorn ->4 lelong 13 m88k ->4 lelong 14 sparc ->4 lelong 15 i860-big ->4 lelong 16 i860 ->4 lelong 17 rs6000 ->4 lelong 18 ppc ->4 lelong 16777234 ppc64 ->4 lelong >16777234 ->>4 lelong x architecture=%ld -# -0 belong&0xfffffffe 0xfeedface Mach-O ->3 byte 0xcf 64-bit ->12 belong 1 object ->12 belong 2 executable ->12 belong 3 fixed virtual memory shared library ->12 belong 4 core ->12 belong 5 preload executable ->12 belong 6 dynamically linked shared library ->12 belong 7 dynamic linker ->12 belong 8 bundle ->12 belong 9 dynamically linked shared library stub ->12 belong >9 ->>12 belong x filetype=%ld ->4 belong <0 ->>4 belong x architecture=%ld ->4 belong 1 vax ->4 belong 2 romp ->4 belong 3 architecture=3 ->4 belong 4 ns32032 ->4 belong 5 ns32332 ->4 belong 6 for m68k architecture -# from NeXTstep 3.0 <mach/machine.h> -# i.e. mc680x0_all, ignore -# >>8 belong 1 (mc68030) ->>8 belong 2 (mc68040) ->>8 belong 3 (mc68030 only) ->4 belong 7 i386 ->4 belong 8 mips ->4 belong 9 ns32532 ->4 belong 10 architecture=10 ->4 belong 11 hppa ->4 belong 12 acorn ->4 belong 13 m88k ->4 belong 14 sparc ->4 belong 15 i860-big ->4 belong 16 i860 ->4 belong 17 rs6000 ->4 belong 18 ppc ->4 belong 16777234 ppc64 ->4 belong >16777234 ->>4 belong x architecture=%ld - -#------------------------------------------------------------------------------ -# macintosh description -# -# BinHex is the Macintosh ASCII-encoded file format (see also "apple") -# Daniel Quinlan, quinlan@yggdrasil.com -11 string must\ be\ converted\ with\ BinHex BinHex binary text -!:mime application/mac-binhex40 ->41 string x \b, version %.3s - -# Stuffit archives are the de facto standard of compression for Macintosh -# files obtained from most archives. (franklsm@tuns.ca) -0 string SIT! StuffIt Archive (data) -!:mime application/x-stuffit -!:apple SIT!SIT! ->2 string x : %s -0 string SITD StuffIt Deluxe (data) ->2 string x : %s -0 string Seg StuffIt Deluxe Segment (data) ->2 string x : %s - -# Newer StuffIt archives (grant@netbsd.org) -0 string StuffIt StuffIt Archive -!:mime application/x-stuffit -!:apple SIT!SIT! -#>162 string >0 : %s - -# Macintosh Applications and Installation binaries (franklsm@tuns.ca) -# GRR: Too weak -#0 string APPL Macintosh Application (data) -#>2 string x \b: %s - -# Macintosh System files (franklsm@tuns.ca) -# GRR: Too weak -#0 string zsys Macintosh System File (data) -#0 string FNDR Macintosh Finder (data) -#0 string libr Macintosh Library (data) -#>2 string x : %s -#0 string shlb Macintosh Shared Library (data) -#>2 string x : %s -#0 string cdev Macintosh Control Panel (data) -#>2 string x : %s -#0 string INIT Macintosh Extension (data) -#>2 string x : %s -#0 string FFIL Macintosh Truetype Font (data) -#>2 string x : %s -#0 string LWFN Macintosh Postscript Font (data) -#>2 string x : %s - -# Additional Macintosh Files (franklsm@tuns.ca) -# GRR: Too weak -#0 string PACT Macintosh Compact Pro Archive (data) -#>2 string x : %s -#0 string ttro Macintosh TeachText File (data) -#>2 string x : %s -#0 string TEXT Macintosh TeachText File (data) -#>2 string x : %s -#0 string PDF Macintosh PDF File (data) -#>2 string x : %s - -# MacBinary format (Eric Fischer, enf@pobox.com) -# -# Unfortunately MacBinary doesn't really have a magic number prior -# to the MacBinary III format. The checksum is really the way to -# do it, but the magic file format isn't up to the challenge. -# -# 0 byte 0 -# 1 byte # filename length -# 2 string # filename -# 65 string # file type -# 69 string # file creator -# 73 byte # Finder flags -# 74 byte 0 -# 75 beshort # vertical posn in window -# 77 beshort # horiz posn in window -# 79 beshort # window or folder ID -# 81 byte # protected? -# 82 byte 0 -# 83 belong # length of data segment -# 87 belong # length of resource segment -# 91 belong # file creation date -# 95 belong # file modification date -# 99 beshort # length of comment after resource -# 101 byte # new Finder flags -# 102 string mBIN # (only in MacBinary III) -# 106 byte # char. code of file name -# 107 byte # still more Finder flags -# 116 belong # total file length -# 120 beshort # length of add'l header -# 122 byte 129 # for MacBinary II -# 122 byte 130 # for MacBinary III -# 123 byte 129 # minimum version that can read fmt -# 124 beshort # checksum -# -# This attempts to use the version numbers as a magic number, requiring -# that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second -# be 0x81. This works for the files I have, but maybe not for everyone's. - -# Unfortunately, this magic is quite weak - MPi -#122 beshort&0xFCFF 0x8081 Macintosh MacBinary data - -# MacBinary I doesn't have the version number field at all, but MacBinary II -# has been in use since 1987 so I hope there aren't many really old files -# floating around that this will miss. The original spec calls for using -# the nulls in 0, 74, and 82 as the magic number. -# -# Another possibility, that would also work for MacBinary I, is to use -# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will -# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset, -# and that 74 will be 0. So something like -# -# 71 belong&0x80804EFF 0x00000000 Macintosh MacBinary data -# -# >73 byte&0x01 0x01 \b, inited -# >73 byte&0x02 0x02 \b, changed -# >73 byte&0x04 0x04 \b, busy -# >73 byte&0x08 0x08 \b, bozo -# >73 byte&0x10 0x10 \b, system -# >73 byte&0x10 0x20 \b, bundle -# >73 byte&0x10 0x40 \b, invisible -# >73 byte&0x10 0x80 \b, locked - -#>65 string x \b, type "%4.4s" - -#>65 string 8BIM (PhotoShop) -#>65 string ALB3 (PageMaker 3) -#>65 string ALB4 (PageMaker 4) -#>65 string ALT3 (PageMaker 3) -#>65 string APPL (application) -#>65 string AWWP (AppleWorks word processor) -#>65 string CIRC (simulated circuit) -#>65 string DRWG (MacDraw) -#>65 string EPSF (Encapsulated PostScript) -#>65 string FFIL (font suitcase) -#>65 string FKEY (function key) -#>65 string FNDR (Macintosh Finder) -#>65 string GIFf (GIF image) -#>65 string Gzip (GNU gzip) -#>65 string INIT (system extension) -#>65 string LIB\ (library) -#>65 string LWFN (PostScript font) -#>65 string MSBC (Microsoft BASIC) -#>65 string PACT (Compact Pro archive) -#>65 string PDF\ (Portable Document Format) -#>65 string PICT (picture) -#>65 string PNTG (MacPaint picture) -#>65 string PREF (preferences) -#>65 string PROJ (Think C project) -#>65 string QPRJ (Think Pascal project) -#>65 string SCFL (Defender scores) -#>65 string SCRN (startup screen) -#>65 string SITD (StuffIt Deluxe) -#>65 string SPn3 (SuperPaint) -#>65 string STAK (HyperCard stack) -#>65 string Seg\ (StuffIt segment) -#>65 string TARF (Unix tar archive) -#>65 string TEXT (ASCII) -#>65 string TIFF (TIFF image) -#>65 string TOVF (Eudora table of contents) -#>65 string WDBN (Microsoft Word word processor) -#>65 string WORD (MacWrite word processor) -#>65 string XLS\ (Microsoft Excel) -#>65 string ZIVM (compress (.Z)) -#>65 string ZSYS (Pre-System 7 system file) -#>65 string acf3 (Aldus FreeHand) -#>65 string cdev (control panel) -#>65 string dfil (Desk Acessory suitcase) -#>65 string libr (library) -#>65 string nX^d (WriteNow word processor) -#>65 string nX^w (WriteNow dictionary) -#>65 string rsrc (resource) -#>65 string scbk (Scrapbook) -#>65 string shlb (shared library) -#>65 string ttro (SimpleText read-only) -#>65 string zsys (system file) - -#>69 string x \b, creator "%4.4s" - -# Somewhere, Apple has a repository of registered Creator IDs. These are -# just the ones that I happened to have files from and was able to identify. - -#>69 string 8BIM (Adobe Photoshop) -#>69 string ALD3 (PageMaker 3) -#>69 string ALD4 (PageMaker 4) -#>69 string ALFA (Alpha editor) -#>69 string APLS (Apple Scanner) -#>69 string APSC (Apple Scanner) -#>69 string BRKL (Brickles) -#>69 string BTFT (BitFont) -#>69 string CCL2 (Common Lisp 2) -#>69 string CCL\ (Common Lisp) -#>69 string CDmo (The Talking Moose) -#>69 string CPCT (Compact Pro) -#>69 string CSOm (Eudora) -#>69 string DMOV (Font/DA Mover) -#>69 string DSIM (DigSim) -#>69 string EDIT (Macintosh Edit) -#>69 string ERIK (Macintosh Finder) -#>69 string EXTR (self-extracting archive) -#>69 string Gzip (GNU gzip) -#>69 string KAHL (Think C) -#>69 string LWFU (LaserWriter Utility) -#>69 string LZIV (compress) -#>69 string MACA (MacWrite) -#>69 string MACS (Macintosh operating system) -#>69 string MAcK (MacKnowledge terminal emulator) -#>69 string MLND (Defender) -#>69 string MPNT (MacPaint) -#>69 string MSBB (Microsoft BASIC (binary)) -#>69 string MSWD (Microsoft Word) -#>69 string NCSA (NCSA Telnet) -#>69 string PJMM (Think Pascal) -#>69 string PSAL (Hunt the Wumpus) -#>69 string PSI2 (Apple File Exchange) -#>69 string R*ch (BBEdit) -#>69 string RMKR (Resource Maker) -#>69 string RSED (Resource Editor) -#>69 string Rich (BBEdit) -#>69 string SIT! (StuffIt) -#>69 string SPNT (SuperPaint) -#>69 string Unix (NeXT Mac filesystem) -#>69 string VIM! (Vim editor) -#>69 string WILD (HyperCard) -#>69 string XCEL (Microsoft Excel) -#>69 string aCa2 (Fontographer) -#>69 string aca3 (Aldus FreeHand) -#>69 string dosa (Macintosh MS-DOS file system) -#>69 string movr (Font/DA Mover) -#>69 string nX^n (WriteNow) -#>69 string pdos (Apple ProDOS file system) -#>69 string scbk (Scrapbook) -#>69 string ttxt (SimpleText) -#>69 string ufox (Foreign File Access) - -# Just in case... - -102 string mBIN MacBinary III data with surprising version number - -# sas magic from Bruce Foster (bef@nwu.edu) -# -#0 string SAS SAS -#>8 string x %s -0 string SAS SAS ->24 string DATA data file ->24 string CATALOG catalog ->24 string INDEX data file index ->24 string VIEW data view -# sas 7+ magic from Reinhold Koch (reinhold.koch@roche.com) -# -0x54 string SAS SAS 7+ ->0x9C string DATA data file ->0x9C string CATALOG catalog ->0x9C string INDEX data file index ->0x9C string VIEW data view - -# spss magic for SPSS system and portable files, -# from Bruce Foster (bef@nwu.edu). - -0 long 0xc1e2c3c9 SPSS Portable File ->40 string x %s - -0 string $FL2 SPSS System File ->24 string x %s - -# Macintosh filesystem data -# From "Tom N Harris" <telliamed@mac.com> -# Fixed HFS+ and Partition map magic: Ethan Benson <erbenson@alaska.net> -# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these -# entries depend on the data arithmetic added after v.35 -# There's also some Pascal strings in here, ditto... - -# The boot block signature, according to IM:Files, is -# "for HFS volumes, this field always contains the value 0x4C4B." -# But if this is true for MFS or HFS+ volumes, I don't know. -# Alternatively, the boot block is supposed to be zeroed if it's -# unused, so a simply >0 should suffice. - -0x400 beshort 0xD2D7 Macintosh MFS data ->0 beshort 0x4C4B (bootable) ->0x40a beshort &0x8000 (locked) ->0x402 beldate-0x7C25B080 x created: %s, ->0x406 beldate-0x7C25B080 >0 last backup: %s, ->0x414 belong x block size: %d, ->0x412 beshort x number of blocks: %d, ->0x424 pstring x volume name: %s - -# "BD" is has many false positives -#0x400 beshort 0x4244 Macintosh HFS data -#>0 beshort 0x4C4B (bootable) -#>0x40a beshort &0x8000 (locked) -#>0x40a beshort ^0x0100 (mounted) -#>0x40a beshort &0x0200 (spared blocks) -#>0x40a beshort &0x0800 (unclean) -#>0x47C beshort 0x482B (Embedded HFS+ Volume) -#>0x402 beldate-0x7C25B080 x created: %s, -#>0x406 beldate-0x7C25B080 x last modified: %s, -#>0x440 beldate-0x7C25B080 >0 last backup: %s, -#>0x414 belong x block size: %d, -#>0x412 beshort x number of blocks: %d, -#>0x424 pstring x volume name: %s - -0x400 beshort 0x482B Macintosh HFS Extended ->&0 beshort x version %d data ->0 beshort 0x4C4B (bootable) ->0x404 belong ^0x00000100 (mounted) ->&2 belong &0x00000200 (spared blocks) ->&2 belong &0x00000800 (unclean) ->&2 belong &0x00008000 (locked) ->&6 string x last mounted by: '%.4s', -# really, that should be treated as a belong and we print a string -# based on the value. TN1150 only mentions '8.10' for "MacOS 8.1" ->&14 beldate-0x7C25B080 x created: %s, -# only the creation date is local time, all other timestamps in HFS+ are UTC. ->&18 bedate-0x7C25B080 x last modified: %s, ->&22 bedate-0x7C25B080 >0 last backup: %s, ->&26 bedate-0x7C25B080 >0 last checked: %s, ->&38 belong x block size: %d, ->&42 belong x number of blocks: %d, ->&46 belong x free blocks: %d - -# I don't think this is really necessary since it doesn't do much and -# anything with a valid driver descriptor will also have a valid -# partition map -#0 beshort 0x4552 Apple Device Driver data -#>&24 beshort =1 \b, MacOS - -# Is that the partition type a cstring or a pstring? Well, IM says "strings -# shorter than 32 bytes must be terminated with NULL" so I'll treat it as a -# cstring. Of course, partitions can contain more than four entries, but -# what're you gonna do? -# GRR: This magic is too weak, it is just "PM" -#0x200 beshort 0x504D Apple Partition data -#>0x2 beshort x (block size: %d): -#>0x230 string x first type: %s, -#>0x210 string x name: %s, -#>0x254 belong x number of blocks: %d, -#>0x400 beshort 0x504D -#>>0x430 string x second type: %s, -#>>0x410 string x name: %s, -#>>0x454 belong x number of blocks: %d, -#>>0x600 beshort 0x504D -#>>>0x630 string x third type: %s, -#>>>0x610 string x name: %s, -#>>>0x654 belong x number of blocks: %d, -#>>0x800 beshort 0x504D -#>>>0x830 string x fourth type: %s, -#>>>0x810 string x name: %s, -#>>>0x854 belong x number of blocks: %d, -#>>>0xa00 beshort 0x504D -#>>>>0xa30 string x fifth type: %s, -#>>>>0xa10 string x name: %s, -#>>>>0xa54 belong x number of blocks: %d -#>>>0xc00 beshort 0x504D -#>>>>0xc30 string x sixth type: %s, -#>>>>0xc10 string x name: %s, -#>>>>0xc54 belong x number of blocks: %d -## AFAIK, only the signature is different -#0x200 beshort 0x5453 Apple Old Partition data -#>0x2 beshort x block size: %d, -#>0x230 string x first type: %s, -#>0x210 string x name: %s, -#>0x254 belong x number of blocks: %d, -#>0x400 beshort 0x504D -#>>0x430 string x second type: %s, -#>>0x410 string x name: %s, -#>>0x454 belong x number of blocks: %d, -#>>0x800 beshort 0x504D -#>>>0x830 string x third type: %s, -#>>>0x810 string x name: %s, -#>>>0x854 belong x number of blocks: %d, -#>>>0xa00 beshort 0x504D -#>>>>0xa30 string x fourth type: %s, -#>>>>0xa10 string x name: %s, -#>>>>0xa54 belong x number of blocks: %d - -# From: Remi Mommsen <mommsen@slac.stanford.edu> -0 string BOMStore Mac OS X bill of materials (BOM) file - -#------------------------------------------------------------------------------ -# magic: file(1) magic for magic files -# -0 string #\ Magic magic text file for file(1) cmd -0 lelong 0xF11E041C magic binary file for file(1) cmd ->4 lelong x (version %d) (little endian) -0 belong 0xF11E041C magic binary file for file(1) cmd ->4 belong x (version %d) (big endian) -#------------------------------------------------------------------------------ -# mail.news: file(1) magic for mail and news -# -# Unfortunately, saved netnews also has From line added in some news software. -#0 string From mail text -# There are tests to ascmagic.c to cope with mail and news. -0 string Relay-Version: old news text -!:mime message/rfc822 -0 string #!\ rnews batched news text -!:mime message/rfc822 -0 string N#!\ rnews mailed, batched news text -!:mime message/rfc822 -0 string Forward\ to mail forwarding text -!:mime message/rfc822 -0 string Pipe\ to mail piping text -!:mime message/rfc822 -0 string Return-Path: smtp mail text -!:mime message/rfc822 -0 string Path: news text -!:mime message/news -0 string Xref: news text -!:mime message/news -0 string From: news or mail text -!:mime message/rfc822 -0 string Article saved news text -!:mime message/news -0 string BABYL Emacs RMAIL text -0 string Received: RFC 822 mail text -!:mime message/rfc822 -0 string MIME-Version: MIME entity text -#0 string Content- MIME entity text - -# TNEF files... -0 lelong 0x223E9F78 Transport Neutral Encapsulation Format - -# From: Kevin Sullivan <ksulliva@psc.edu> -0 string *mbx* MBX mail folder - -# From: Simon Matter <simon.matter@invoca.ch> -0 string \241\002\213\015skiplist\ file\0\0\0 Cyrus skiplist DB - -# JAM(mbp) Fidonet message area databases -# JHR file -0 string JAM\0 JAM message area header file ->12 leshort >0 (%d messages) - -# Squish Fidonet message area databases -# SQD file (requires at least one message in the area) -# XXX: Weak magic -#256 leshort 0xAFAE4453 Squish message area data file -#>4 leshort >0 (%d messages) - -#0 string \<!--\ MHonArc text/html; x-type=mhonarc - -#------------------------------------------------------------------------------ -# maple: file(1) magic for maple files -# "H. Nanosecond" <aldomel@ix.netcom.com> -# Maple V release 4, a multi-purpose math program -# - -# maple library .lib -0 string \000MVR4\nI MapleVr4 library - -# .ind -# no magic for these :-( -# they are compiled indexes for maple files - -# .hdb -0 string \000\004\000\000 Maple help database - -# .mhp -# this has the form <PACKAGE=name> -0 string \<PACKAGE= Maple help file -0 string \<HELP\ NAME= Maple help file -0 string \n\<HELP\ NAME= Maple help file with extra carriage return at start (yuck) -#0 string #\ Newton Maple help file, old style -0 string #\ daub Maple help file, old style -#0 string #=========== Maple help file, old style - -# .mws -0 string \000\000\001\044\000\221 Maple worksheet -#this is anomalous -0 string WriteNow\000\002\000\001\000\000\000\000\100\000\000\000\000\000 Maple worksheet, but weird -# this has the form {VERSION 2 3 "IBM INTEL NT" "2.3" }\n -# that is {VERSION major_version miunor_version computer_type version_string} -0 string {VERSION\ Maple worksheet ->9 string >\0 version %.1s. ->>>11 string >\0 %.1s - -# .mps -0 string \0\0\001$ Maple something -# from byte 4 it is either 'nul E' or 'soh R' -# I think 'nul E' means a file that was saved as a different name -# a sort of revision marking -# 'soh R' means new ->4 string \000\105 An old revision ->4 string \001\122 The latest save - -# .mpl -# some of these are the same as .mps above -#0000000 000 000 001 044 000 105 same as .mps -#0000000 000 000 001 044 001 122 same as .mps - -0 string #\n##\ <SHAREFILE= Maple something -0 string \n#\n##\ <SHAREFILE= Maple something -0 string ##\ <SHAREFILE= Maple something -0 string #\r##\ <SHAREFILE= Maple something -0 string \r#\r##\ <SHAREFILE= Maple something -0 string #\ \r##\ <DESCRIBE> Maple something anomalous. - -#------------------------------------------------------------------------------ -# mathcad: file(1) magic for Mathcad documents -# URL: http://www.mathsoft.com/ -# From: Josh Triplett <josh@freedesktop.org> - -0 string .MCAD\t Mathcad document -#------------------------------------------------------------------------------ -# mathematica: file(1) magic for mathematica files -# "H. Nanosecond" <aldomel@ix.netcom.com> -# Mathematica a multi-purpose math program -# versions 2.2 and 3.0 - -#mathematica .mb -0 string \064\024\012\000\035\000\000\000 Mathematica version 2 notebook -0 string \064\024\011\000\035\000\000\000 Mathematica version 2 notebook - -# .ma -# multiple possibilites: - -0 string (*^\n\n::[\011frontEndVersion\ =\ Mathematica notebook -#>41 string >\0 %s - -#0 string (*^\n\n::[\011palette Mathematica notebook version 2.x - -#0 string (*^\n\n::[\011Information Mathematica notebook version 2.x -#>675 string >\0 %s #doesn't work well - -# there may be 'cr' instread of 'nl' in some does this matter? - -# generic: -0 string (*^\r\r::[\011 Mathematica notebook version 2.x -0 string (*^\r\n\r\n::[\011 Mathematica notebook version 2.x -0 string (*^\015 Mathematica notebook version 2.x -0 string (*^\n\r\n\r::[\011 Mathematica notebook version 2.x -0 string (*^\r::[\011 Mathematica notebook version 2.x -0 string (*^\r\n::[\011 Mathematica notebook version 2.x -0 string (*^\n\n::[\011 Mathematica notebook version 2.x -0 string (*^\n::[\011 Mathematica notebook version 2.x - - -# Mathematica .mx files - -#0 string (*This\ is\ a\ Mathematica\ binary\ dump\ file.\ It\ can\ be\ loaded\ with\ Get.*) Mathematica binary file -0 string (*This\ is\ a\ Mathematica\ binary\ Mathematica binary file -#>71 string \000\010\010\010\010\000\000\000\000\000\000\010\100\010\000\000\000 -# >71... is optional ->88 string >\0 from %s - - -# Mathematica files PBF: -# 115 115 101 120 102 106 000 001 000 000 000 203 000 001 000 -0 string MMAPBF\000\001\000\000\000\203\000\001\000 Mathematica PBF (fonts I think) - -# .ml files These are menu resources I think -# these start with "[0-9][0-9][0-9]\ A~[0-9][0-9][0-9]\ -# how to put that into a magic rule? -4 string \ A~ MAthematica .ml file - -# .nb files -#too long 0 string (***********************************************************************\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Mathematica-Compatible Notebook Mathematica 3.0 notebook -0 string (*********************** Mathematica 3.0 notebook - -# other (* matches it is a comment start in these langs -# GRR: Too weak; also matches other languages e.g. ML -#0 string (* Mathematica, or Pascal, Modula-2 or 3 code text - -######################### -# MatLab v5 -0 string MATLAB Matlab v5 mat-file ->126 short 0x494d (big endian) ->>124 beshort x version 0x%04x ->126 short 0x4d49 (little endian) ->>124 leshort x version 0x%04x - - -#------------------------------------------------------------------------------ -# matroska: file(1) magic for Matroska files -# -# See http://www.matroska.org/ -# - -# EBML id: -0 belong 0x1a45dfa3 -# DocType id: ->5 beshort 0x4282 -# DocType contents: ->>8 string matroska Matroska data - -#------------------------------------------------------------------------------ -# Mavroyanopoulos Nikos <nmav@hellug.gr> -# mcrypt: file(1) magic for mcrypt 2.2.x; -0 string \0m\3 mcrypt 2.5 encrypted data, ->4 string >\0 algorithm: %s, ->>&1 leshort >0 keysize: %d bytes, ->>>&0 string >\0 mode: %s, - -0 string \0m\2 mcrypt 2.2 encrypted data, ->3 byte 0 algorithm: blowfish-448, ->3 byte 1 algorithm: DES, ->3 byte 2 algorithm: 3DES, ->3 byte 3 algorithm: 3-WAY, ->3 byte 4 algorithm: GOST, ->3 byte 6 algorithm: SAFER-SK64, ->3 byte 7 algorithm: SAFER-SK128, ->3 byte 8 algorithm: CAST-128, ->3 byte 9 algorithm: xTEA, ->3 byte 10 algorithm: TWOFISH-128, ->3 byte 11 algorithm: RC2, ->3 byte 12 algorithm: TWOFISH-192, ->3 byte 13 algorithm: TWOFISH-256, ->3 byte 14 algorithm: blowfish-128, ->3 byte 15 algorithm: blowfish-192, ->3 byte 16 algorithm: blowfish-256, ->3 byte 100 algorithm: RC6, ->3 byte 101 algorithm: IDEA, ->4 byte 0 mode: CBC, ->4 byte 1 mode: ECB, ->4 byte 2 mode: CFB, ->4 byte 3 mode: OFB, ->4 byte 4 mode: nOFB, ->5 byte 0 keymode: 8bit ->5 byte 1 keymode: 4bit ->5 byte 2 keymode: SHA-1 hash ->5 byte 3 keymode: MD5 hash - -#------------------------------------------------------------------------------ -# mercurial: file(1) magic for Mercurial changeset bundles -# http://www.selenic.com/mercurial/wiki/ -# -# Jesse Glick (jesse.glick@sun.com) -# - -0 string HG10 Mercurial changeset bundle ->4 string UN (uncompressed) ->4 string GZ (gzip compressed) ->4 string BZ (bzip2 compressed) -#------------------------------------------------------------------------------ -# mime: file(1) magic for MIME encoded files -# -0 string Content-Type:\ ->14 string >\0 %s -0 string Content-Type: ->13 string >\0 %s - -#------------------------------------------------------------------------------ -# mips: file(1) magic for Silicon Graphics (MIPS, IRIS, IRIX, etc.) -# Dec Ultrix (MIPS) -# all of SGI's *current* machines and OSes run in big-endian mode on the -# MIPS machines, as far as I know. -# -# XXX - what is the blank "-" line? -# -# kbd file definitions -0 string kbd!map kbd map file ->8 byte >0 Ver %d: ->10 short >0 with %d table(s) -0 belong 0407 old SGI 68020 executable -0 belong 0410 old SGI 68020 pure executable -0 beshort 0x8765 disk quotas file -0 beshort 0x0506 IRIS Showcase file ->2 byte 0x49 - ->3 byte x - version %ld -0 beshort 0x0226 IRIS Showcase template ->2 byte 0x63 - ->3 byte x - version %ld -0 belong 0x5343464d IRIS Showcase file ->4 byte x - version %ld -0 belong 0x5443464d IRIS Showcase template ->4 byte x - version %ld -0 belong 0xdeadbabe IRIX Parallel Arena ->8 belong >0 - version %ld -# -0 beshort 0x0160 MIPSEB ECOFF executable ->20 beshort 0407 (impure) ->20 beshort 0410 (swapped) ->20 beshort 0413 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->22 byte x - version %ld ->23 byte x .%ld -# -0 beshort 0x0162 MIPSEL-BE ECOFF executable ->20 beshort 0407 (impure) ->20 beshort 0410 (swapped) ->20 beshort 0413 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %d ->22 byte x .%ld -# -0 beshort 0x6001 MIPSEB-LE ECOFF executable ->20 beshort 03401 (impure) ->20 beshort 04001 (swapped) ->20 beshort 05401 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %d ->22 byte x .%ld -# -0 beshort 0x6201 MIPSEL ECOFF executable ->20 beshort 03401 (impure) ->20 beshort 04001 (swapped) ->20 beshort 05401 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %ld ->22 byte x .%ld -# -# MIPS 2 additions -# -0 beshort 0x0163 MIPSEB MIPS-II ECOFF executable ->20 beshort 0407 (impure) ->20 beshort 0410 (swapped) ->20 beshort 0413 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->22 byte x - version %ld ->23 byte x .%ld -# -0 beshort 0x0166 MIPSEL-BE MIPS-II ECOFF executable ->20 beshort 0407 (impure) ->20 beshort 0410 (swapped) ->20 beshort 0413 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->22 byte x - version %ld ->23 byte x .%ld -# -0 beshort 0x6301 MIPSEB-LE MIPS-II ECOFF executable ->20 beshort 03401 (impure) ->20 beshort 04001 (swapped) ->20 beshort 05401 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %ld ->22 byte x .%ld -# -0 beshort 0x6601 MIPSEL MIPS-II ECOFF executable ->20 beshort 03401 (impure) ->20 beshort 04001 (swapped) ->20 beshort 05401 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %ld ->22 byte x .%ld -# -# MIPS 3 additions -# -0 beshort 0x0140 MIPSEB MIPS-III ECOFF executable ->20 beshort 0407 (impure) ->20 beshort 0410 (swapped) ->20 beshort 0413 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->22 byte x - version %ld ->23 byte x .%ld -# -0 beshort 0x0142 MIPSEL-BE MIPS-III ECOFF executable ->20 beshort 0407 (impure) ->20 beshort 0410 (swapped) ->20 beshort 0413 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->22 byte x - version %ld ->23 byte x .%ld -# -0 beshort 0x4001 MIPSEB-LE MIPS-III ECOFF executable ->20 beshort 03401 (impure) ->20 beshort 04001 (swapped) ->20 beshort 05401 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %ld ->22 byte x .%ld -# -0 beshort 0x4201 MIPSEL MIPS-III ECOFF executable ->20 beshort 03401 (impure) ->20 beshort 04001 (swapped) ->20 beshort 05401 (paged) ->8 belong >0 not stripped ->8 belong 0 stripped ->23 byte x - version %ld ->22 byte x .%ld -# -0 beshort 0x180 MIPSEB Ucode -0 beshort 0x182 MIPSEL-BE Ucode -# 32bit core file -0 belong 0xdeadadb0 IRIX core dump ->4 belong 1 of ->16 string >\0 '%s' -# 64bit core file -0 belong 0xdeadad40 IRIX 64-bit core dump ->4 belong 1 of ->16 string >\0 '%s' -# N32bit core file -0 belong 0xbabec0bb IRIX N32 core dump ->4 belong 1 of ->16 string >\0 '%s' -# New style crash dump file -0 string \x43\x72\x73\x68\x44\x75\x6d\x70 IRIX vmcore dump of ->36 string >\0 '%s' -# Trusted IRIX info -0 string SGIAUDIT SGI Audit file ->8 byte x - version %d ->9 byte x .%ld -# -0 string WNGZWZSC Wingz compiled script -0 string WNGZWZSS Wingz spreadsheet -0 string WNGZWZHP Wingz help file -# -0 string #Inventor V IRIS Inventor 1.0 file -0 string #Inventor V2 Open Inventor 2.0 file -# GLF is OpenGL stream encoding -0 string glfHeadMagic(); GLF_TEXT -4 belong 0x7d000000 GLF_BINARY_LSB_FIRST -4 belong 0x0000007d GLF_BINARY_MSB_FIRST -# GLS is OpenGL stream encoding; GLS is the successor of GLF -0 string glsBeginGLS( GLS_TEXT -4 belong 0x10000000 GLS_BINARY_LSB_FIRST -4 belong 0x00000010 GLS_BINARY_MSB_FIRST - -#------------------------------------------------------------------------------ -# mirage: file(1) magic for Mirage executables -# -# XXX - byte order? -# -0 long 31415 Mirage Assembler m.out executable -#----------------------------------------------------------------------------- -# misctools: file(1) magic for miscellaneous UNIX tools. -# -0 search/1 %%!! X-Post-It-Note text -0 string/c BEGIN:VCALENDAR vCalendar calendar file -0 string/c BEGIN:VCARD vCard visiting card -!:mime text/x-vcard - -# From: Alex Beregszaszi <alex@fsn.hu> -4 string gtktalog GNOME Catalogue (gtktalog) ->13 string >\0 version %s - -# Summary: Libtool library file -# Extension: .la -# Submitted by: Tomasz Trojanowski <tomek@uninet.com.pl> -0 search/80 .la\ -\ a\ libtool\ library\ file libtool library file - -# Summary: Libtool object file -# Extension: .lo -# Submitted by: Abel Cheung <abelcheung@gmail.com> -0 search/80 .lo\ -\ a\ libtool\ object\ file libtool object file - -#------------------------------------------------------------------------------ -# mkid: file(1) magic for mkid(1) databases -# -# ID is the binary tags database produced by mkid(1). -# -# XXX - byte order? -# -0 string \311\304 ID tags data ->2 short >0 version %d - -#------------------------------------------------------------------------------ -# mlssa: file(1) magic for MLSSA datafiles -# -0 lelong 0xffffabcd MLSSA datafile, ->4 leshort x algorithm %d, ->10 lelong x %d samples - -#------------------------------------------------------------------------------ -# mmdf: file(1) magic for MMDF mail files -# -0 string \001\001\001\001 MMDF mailbox -#------------------------------------------------------------------------------ -# modem: file(1) magic for modem programs -# -# From: Florian La Roche <florian@knorke.saar.de> -1 string PC\ Research,\ Inc Digifax-G3-File ->29 byte 1 \b, fine resolution ->29 byte 0 \b, normal resolution - -0 short 0x0100 raw G3 data, byte-padded -0 short 0x1400 raw G3 data -# -# Magic data for vgetty voice formats -# (Martin Seine & Marc Eberhard) - -# -# raw modem data version 1 -# -0 string RMD1 raw modem data ->4 string >\0 (%s / ->20 short >0 compression type 0x%04x) - -# -# portable voice format 1 -# -0 string PVF1\n portable voice format ->5 string >\0 (binary %s) - -# -# portable voice format 2 -# -0 string PVF2\n portable voice format ->5 string >\0 (ascii %s) - - -#------------------------------------------------------------------------------ -# motorola: file(1) magic for Motorola 68K and 88K binaries -# -# 68K -# -0 beshort 0520 mc68k COFF ->18 beshort ^00000020 object ->18 beshort &00000020 executable ->12 belong >0 not stripped ->168 string .lowmem Apple toolbox ->20 beshort 0407 (impure) ->20 beshort 0410 (pure) ->20 beshort 0413 (demand paged) ->20 beshort 0421 (standalone) -0 beshort 0521 mc68k executable (shared) ->12 belong >0 not stripped -0 beshort 0522 mc68k executable (shared demand paged) ->12 belong >0 not stripped -# -# Motorola/UniSoft 68K Binary Compatibility Standard (BCS) -# -0 beshort 0554 68K BCS executable -# -# 88K -# -# Motorola/88Open BCS -# -0 beshort 0555 88K BCS executable -# -# Motorola S-Records, from Gerd Truschinski <gt@freebsd.first.gmd.de> -0 string S0 Motorola S-Record; binary data in text format - -# ATARI ST relocatable PRG -# -# from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001 -# (according to Roland Waldi, Oct 21, 1987) -# besides the magic 0x601a, the text segment size is checked to be -# not larger than 1 MB (which is a lot on ST). -# The additional 0x601b distinction I took from Doug Lee's magic. -0 belong&0xFFFFFFF0 0x601A0000 Atari ST M68K contiguous executable ->2 belong x (txt=%ld, ->6 belong x dat=%ld, ->10 belong x bss=%ld, ->14 belong x sym=%ld) -0 belong&0xFFFFFFF0 0x601B0000 Atari ST M68K non-contig executable ->2 belong x (txt=%ld, ->6 belong x dat=%ld, ->10 belong x bss=%ld, ->14 belong x sym=%ld) - -# Atari ST/TT... program format (sent by Wolfram Kleff <kleff@cs.uni-bonn.de>) -0 beshort 0x601A Atari 68xxx executable, ->2 belong x text len %lu, ->6 belong x data len %lu, ->10 belong x BSS len %lu, ->14 belong x symboltab len %lu, ->18 belong 0 ->22 belong &0x01 fastload flag, ->22 belong &0x02 may be loaded to alternate RAM, ->22 belong &0x04 malloc may be from alternate RAM, ->22 belong x flags: 0x%lX, ->26 beshort 0 no relocation tab ->26 beshort !0 + relocation tab ->30 string SFX [Self-Extracting LZH SFX archive] ->38 string SFX [Self-Extracting LZH SFX archive] ->44 string ZIP! [Self-Extracting ZIP SFX archive] - -0 beshort 0x0064 Atari 68xxx CPX file ->8 beshort x (version %04lx) - -#------------------------------------------------------------------------------ -# mozilla: file(1) magic for Mozilla XUL fastload files -# (XUL.mfasl and XPC.mfasl) -# URL: http://www.mozilla.org/ -# From: Josh Triplett <josh@freedesktop.org> - -0 string XPCOM\nMozFASL\r\n\x1A Mozilla XUL fastload data - -#------------------------------------------------------------------------------ -# msdos: file(1) magic for MS-DOS files -# - -# .BAT files (Daniel Quinlan, quinlan@yggdrasil.com) -# updated by Joerg Jenderek at Oct 2008 -0 string @ ->1 string/cB \ echo\ off DOS batch file text -!:mime text/x-msdos-batch ->1 string/cB echo\ off DOS batch file text -!:mime text/x-msdos-batch ->1 string/cB rem\ DOS batch file text -!:mime text/x-msdos-batch ->1 string/cB set\ DOS batch file text -!:mime text/x-msdos-batch - - -# OS/2 batch files are REXX. the second regex is a bit generic, oh well -# the matched commands seem to be common in REXX and uncommon elsewhere -100 search/0xffff rxfuncadd ->100 regex/c =^[\ \t]{0,10}call[\ \t]{1,10}rxfunc OS/2 REXX batch file text -100 search/0xffff say ->100 regex/c =^[\ \t]{0,10}say\ ['"] OS/2 REXX batch file text - -0 leshort 0x14c MS Windows COFF Intel 80386 object file -#>4 ledate x stamp %s -0 leshort 0x166 MS Windows COFF MIPS R4000 object file -#>4 ledate x stamp %s -0 leshort 0x184 MS Windows COFF Alpha object file -#>4 ledate x stamp %s -0 leshort 0x268 MS Windows COFF Motorola 68000 object file -#>4 ledate x stamp %s -0 leshort 0x1f0 MS Windows COFF PowerPC object file -#>4 ledate x stamp %s -0 leshort 0x290 MS Windows COFF PA-RISC object file -#>4 ledate x stamp %s - -# XXX - according to Microsoft's spec, at an offset of 0x3c in a -# PE-format executable is the offset in the file of the PE header; -# unfortunately, that's a little-endian offset, and there's no way -# to specify an indirect offset with a specified byte order. -# So, for now, we assume the standard MS-DOS stub, which puts the -# PE header at 0x80 = 128. -# -# Required OS version and subsystem version were 4.0 on some NT 3.51 -# executables built with Visual C++ 4.0, so it's not clear that -# they're interesting. The user version was 0.0, but there's -# probably some linker directive to set it. The linker version was -# 3.0, except for one ".exe" which had it as 4.20 (same damn linker!). -# -# many of the compressed formats were extraced from IDARC 1.23 source code -# -0 string MZ -!:mime application/x-dosexec ->0x18 leshort <0x40 MS-DOS executable ->0 string MZ\0\0\0\0\0\0\0\0\0\0PE\0\0 \b, PE for MS Windows ->>&18 leshort&0x2000 >0 (DLL) ->>&88 leshort 0 (unknown subsystem) ->>&88 leshort 1 (native) ->>&88 leshort 2 (GUI) ->>&88 leshort 3 (console) ->>&88 leshort 7 (POSIX) ->>&0 leshort 0x0 unknown processor ->>&0 leshort 0x14c Intel 80386 ->>&0 leshort 0x166 MIPS R4000 ->>&0 leshort 0x184 Alpha ->>&0 leshort 0x268 Motorola 68000 ->>&0 leshort 0x1f0 PowerPC ->>&0 leshort 0x290 PA-RISC ->>&18 leshort&0x0100 >0 32-bit ->>&18 leshort&0x1000 >0 system file ->>&228 lelong >0 \b, Mono/.Net assembly ->>&0xf4 search/0x140 \x0\x40\x1\x0 ->>>(&0.l+(4)) string MSCF \b, WinHKI CAB self-extracting archive ->30 string Copyright\ 1989-1990\ PKWARE\ Inc. Self-extracting PKZIP archive -!:mime application/zip -# Is next line correct? One might expect "Corp." not "Copr." If it is right, add a note to that effect. ->30 string PKLITE\ Copr. Self-extracting PKZIP archive -!:mime application/zip - ->0x18 leshort >0x3f ->>(0x3c.l) string PE\0\0 PE ->>>(0x3c.l+25) byte 1 \b32 executable ->>>(0x3c.l+25) byte 2 \b32+ executable -# hooray, there's a DOS extender using the PE format, with a valid PE -# executable inside (which just prints a message and exits if run in win) ->>>(0x3c.l+92) leshort <10 ->>>>(8.s*16) string 32STUB for MS-DOS, 32rtm DOS extender ->>>>(8.s*16) string !32STUB for MS Windows ->>>>>(0x3c.l+22) leshort&0x2000 >0 (DLL) ->>>>>(0x3c.l+92) leshort 0 (unknown subsystem) ->>>>>(0x3c.l+92) leshort 1 (native) ->>>>>(0x3c.l+92) leshort 2 (GUI) ->>>>>(0x3c.l+92) leshort 3 (console) ->>>>>(0x3c.l+92) leshort 7 (POSIX) ->>>(0x3c.l+92) leshort 10 (EFI application) ->>>(0x3c.l+92) leshort 11 (EFI boot service driver) ->>>(0x3c.l+92) leshort 12 (EFI runtime driver) ->>>(0x3c.l+92) leshort 13 (XBOX) ->>>(0x3c.l+4) leshort 0x0 unknown processor ->>>(0x3c.l+4) leshort 0x14c Intel 80386 ->>>(0x3c.l+4) leshort 0x166 MIPS R4000 ->>>(0x3c.l+4) leshort 0x184 Alpha ->>>(0x3c.l+4) leshort 0x268 Motorola 68000 ->>>(0x3c.l+4) leshort 0x1f0 PowerPC ->>>(0x3c.l+4) leshort 0x290 PA-RISC ->>>(0x3c.l+4) leshort 0x200 Intel Itanium ->>>(0x3c.l+22) leshort&0x0100 >0 32-bit ->>>(0x3c.l+22) leshort&0x1000 >0 system file ->>>(0x3c.l+232) lelong >0 Mono/.Net assembly - ->>>>(0x3c.l+0xf8) string UPX0 \b, UPX compressed ->>>>(0x3c.l+0xf8) search/0x140 PEC2 \b, PECompact2 compressed ->>>>(0x3c.l+0xf8) search/0x140 UPX2 ->>>>>(&0x10.l+(-4)) string PK\3\4 \b, ZIP self-extracting archive (Info-Zip) ->>>>(0x3c.l+0xf8) search/0x140 .idata ->>>>>(&0xe.l+(-4)) string PK\3\4 \b, ZIP self-extracting archive (Info-Zip) ->>>>>(&0xe.l+(-4)) string ZZ0 \b, ZZip self-extracting archive ->>>>>(&0xe.l+(-4)) string ZZ1 \b, ZZip self-extracting archive ->>>>(0x3c.l+0xf8) search/0x140 .rsrc ->>>>>(&0x0f.l+(-4)) string a\\\4\5 \b, WinHKI self-extracting archive ->>>>>(&0x0f.l+(-4)) string Rar! \b, RAR self-extracting archive ->>>>>(&0x0f.l+(-4)) search/0x3000 MSCF \b, InstallShield self-extracting archive ->>>>>(&0x0f.l+(-4)) search/32 Nullsoft \b, Nullsoft Installer self-extracting archive ->>>>(0x3c.l+0xf8) search/0x140 .data ->>>>>(&0x0f.l) string WEXTRACT \b, MS CAB-Installer self-extracting archive ->>>>(0x3c.l+0xf8) search/0x140 .petite\0 \b, Petite compressed ->>>>>(0x3c.l+0xf7) byte x ->>>>>>(&0x104.l+(-4)) string =!sfx! \b, ACE self-extracting archive ->>>>(0x3c.l+0xf8) search/0x140 .WISE \b, WISE installer self-extracting archive ->>>>(0x3c.l+0xf8) search/0x140 .dz\0\0\0 \b, Dzip self-extracting archive ->>>>(0x3c.l+0xf8) search/0x140 .reloc ->>>>>(&0xe.l+(-4)) search/0x180 PK\3\4 \b, ZIP self-extracting archive (WinZip) - ->>>>&(0x3c.l+0xf8) search/0x100 _winzip_ \b, ZIP self-extracting archive (WinZip) ->>>>&(0x3c.l+0xf8) search/0x100 SharedD \b, Microsoft Installer self-extracting archive ->>>>0x30 string Inno \b, InnoSetup self-extracting archive - ->>(0x3c.l) string !PE\0\0 MS-DOS executable - ->>(0x3c.l) string NE \b, NE ->>>(0x3c.l+0x36) byte 0 (unknown OS) ->>>(0x3c.l+0x36) byte 1 for OS/2 1.x ->>>(0x3c.l+0x36) byte 2 for MS Windows 3.x ->>>(0x3c.l+0x36) byte 3 for MS-DOS ->>>(0x3c.l+0x36) byte >3 (unknown OS) ->>>(0x3c.l+0x36) byte 0x81 for MS-DOS, Phar Lap DOS extender ->>>(0x3c.l+0x0c) leshort&0x8003 0x8002 (DLL) ->>>(0x3c.l+0x0c) leshort&0x8003 0x8001 (driver) ->>>&(&0x24.s-1) string ARJSFX \b, ARJ self-extracting archive ->>>(0x3c.l+0x70) search/0x80 WinZip(R)\ Self-Extractor \b, ZIP self-extracting archive (WinZip) - ->>(0x3c.l) string LX\0\0 \b, LX ->>>(0x3c.l+0x0a) leshort <1 (unknown OS) ->>>(0x3c.l+0x0a) leshort 1 for OS/2 ->>>(0x3c.l+0x0a) leshort 2 for MS Windows ->>>(0x3c.l+0x0a) leshort 3 for DOS ->>>(0x3c.l+0x0a) leshort >3 (unknown OS) ->>>(0x3c.l+0x10) lelong&0x28000 =0x8000 (DLL) ->>>(0x3c.l+0x10) lelong&0x20000 >0 (device driver) ->>>(0x3c.l+0x10) lelong&0x300 0x300 (GUI) ->>>(0x3c.l+0x10) lelong&0x28300 <0x300 (console) ->>>(0x3c.l+0x08) leshort 1 i80286 ->>>(0x3c.l+0x08) leshort 2 i80386 ->>>(0x3c.l+0x08) leshort 3 i80486 ->>>(8.s*16) string emx \b, emx ->>>>&1 string x %s ->>>&(&0x54.l-3) string arjsfx \b, ARJ self-extracting archive - -# MS Windows system file, supposedly a collection of LE executables ->>(0x3c.l) string W3 \b, W3 for MS Windows - ->>(0x3c.l) string LE\0\0 \b, LE executable ->>>(0x3c.l+0x0a) leshort 1 -# some DOS extenders use LE files with OS/2 header ->>>>0x240 search/0x100 DOS/4G for MS-DOS, DOS4GW DOS extender ->>>>0x240 search/0x200 WATCOM\ C/C++ for MS-DOS, DOS4GW DOS extender ->>>>0x440 search/0x100 CauseWay\ DOS\ Extender for MS-DOS, CauseWay DOS extender ->>>>0x40 search/0x40 PMODE/W for MS-DOS, PMODE/W DOS extender ->>>>0x40 search/0x40 STUB/32A for MS-DOS, DOS/32A DOS extender (stub) ->>>>0x40 search/0x80 STUB/32C for MS-DOS, DOS/32A DOS extender (configurable stub) ->>>>0x40 search/0x80 DOS/32A for MS-DOS, DOS/32A DOS extender (embedded) -# this is a wild guess; hopefully it is a specific signature ->>>>&0x24 lelong <0x50 ->>>>>(&0x4c.l) string \xfc\xb8WATCOM ->>>>>>&0 search/8 3\xdbf\xb9 \b, 32Lite compressed -# another wild guess: if real OS/2 LE executables exist, they probably have higher start EIP -#>>>>(0x3c.l+0x1c) lelong >0x10000 for OS/2 -# fails with DOS-Extenders. ->>>(0x3c.l+0x0a) leshort 2 for MS Windows ->>>(0x3c.l+0x0a) leshort 3 for DOS ->>>(0x3c.l+0x0a) leshort 4 for MS Windows (VxD) ->>>(&0x7c.l+0x26) string UPX \b, UPX compressed ->>>&(&0x54.l-3) string UNACE \b, ACE self-extracting archive - -# looks like ASCII, probably some embedded copyright message. -# and definitely not NE/LE/LX/PE ->>0x3c lelong >0x20000000 ->>>(4.s*512) leshort !0x014c \b, MZ for MS-DOS -# header data too small for extended executable ->2 long !0 ->>0x18 leshort <0x40 ->>>(4.s*512) leshort !0x014c - ->>>>&(2.s-514) string !LE ->>>>>&-2 string !BW \b, MZ for MS-DOS ->>>>&(2.s-514) string LE \b, LE ->>>>>0x240 search/0x100 DOS/4G for MS-DOS, DOS4GW DOS extender -# educated guess since indirection is still not capable enough for complex offset -# calculations (next embedded executable would be at &(&2*512+&0-2) -# I suspect there are only LE executables in these multi-exe files ->>>>&(2.s-514) string BW ->>>>>0x240 search/0x100 DOS/4G ,\b LE for MS-DOS, DOS4GW DOS extender (embedded) ->>>>>0x240 search/0x100 !DOS/4G ,\b BW collection for MS-DOS - -# This sequence skips to the first COFF segment, usually .text ->(4.s*512) leshort 0x014c \b, COFF ->>(8.s*16) string go32stub for MS-DOS, DJGPP go32 DOS extender ->>(8.s*16) string emx ->>>&1 string x for DOS, Win or OS/2, emx %s ->>&(&0x42.l-3) byte x ->>>&0x26 string UPX \b, UPX compressed -# and yet another guess: small .text, and after large .data is unusal, could be 32lite ->>&0x2c search/0xa0 .text ->>>&0x0b lelong <0x2000 ->>>>&0 lelong >0x6000 \b, 32lite compressed - ->(8.s*16) string $WdX \b, WDos/X DOS extender - -# .EXE formats (Greg Roelofs, newt@uchicago.edu) -# ->0x35 string \x8e\xc0\xb9\x08\x00\xf3\xa5\x4a\x75\xeb\x8e\xc3\x8e\xd8\x33\xff\xbe\x30\x00\x05 \b, aPack compressed ->0xe7 string LH/2\ Self-Extract \b, %s ->0x1c string diet \b, diet compressed ->0x1c string LZ09 \b, LZEXE v0.90 compressed ->0x1c string LZ91 \b, LZEXE v0.91 compressed ->0x1c string tz \b, TinyProg compressed ->0x1e string PKLITE \b, %s compressed ->0x64 string W\ Collis\0\0 \b, Compack compressed ->0x24 string LHa's\ SFX \b, LHa self-extracting archive -!:mime application/x-lha ->0x24 string LHA's\ SFX \b, LHa self-extracting archive -!:mime application/x-lha ->0x24 string \ $ARX \b, ARX self-extracting archive ->0x24 string \ $LHarc \b, LHarc self-extracting archive ->0x20 string SFX\ by\ LARC \b, LARC self-extracting archive ->1638 string -lh5- \b, LHa self-extracting archive v2.13S ->0x17888 string Rar! \b, RAR self-extracting archive ->0x40 string aPKG \b, aPackage self-extracting archive - ->32 string AIN ->>35 string 2 \b, AIN 2.x compressed ->>35 string <2 \b, AIN 1.x compressed ->>35 string >2 \b, AIN 1.x compressed ->28 string UC2X \b, UCEXE compressed ->28 string WWP\ \b, WWPACK compressed - -# skip to the end of the exe ->(4.s*512) long x ->>&(2.s-517) byte x ->>>&0 string PK\3\4 \b, ZIP self-extracting archive ->>>&0 string Rar! \b, RAR self-extracting archive ->>>&0 string =!\x11 \b, AIN 2.x self-extracting archive ->>>&0 string =!\x12 \b, AIN 2.x self-extracting archive ->>>&0 string =!\x17 \b, AIN 1.x self-extracting archive ->>>&0 string =!\x18 \b, AIN 1.x self-extracting archive ->>>&7 search/400 **ACE** \b, ACE self-extracting archive ->>>&0 search/0x480 UC2SFX\ Header \b, UC2 self-extracting archive - ->0x1c string RJSX \b, ARJ self-extracting archive -# winarj stores a message in the stub instead of the sig in the MZ header ->0x20 search/0xe0 aRJsfX \b, ARJ self-extracting archive - -# a few unknown ZIP sfxes, no idea if they are needed or if they are -# already captured by the generic patterns above ->0x7a string Windows\ self-extracting\ ZIP \b, ZIP self-extracting archive ->(8.s*16) search/0x20 PKSFX \b, ZIP self-extracting archive (PKZIP) -# TODO: how to add this? >FileSize-34 string Windows\ Self-Installing\ Executable \b, ZIP self-extracting archive -# - -# TELVOX Teleinformatica CODEC self-extractor for OS/2: ->49801 string \x79\xff\x80\xff\x76\xff \b, CODEC archive v3.21 ->>49824 leshort =1 \b, 1 file ->>49824 leshort >1 \b, %u files - -# .COM formats (Daniel Quinlan, quinlan@yggdrasil.com) -# Uncommenting only the first two lines will cover about 2/3 of COM files, -# but it isn't feasible to match all COM files since there must be at least -# two dozen different one-byte "magics". -# test too generic ? -0 byte 0xe9 DOS executable (COM) ->0x1FE leshort 0xAA55 \b, boot code ->6 string SFX\ of\ LHarc (%s) -0 belong 0xffffffff DOS executable (device driver) -#CMD640X2.SYS ->10 string >\x23 ->>10 string !\x2e ->>>17 string <\x5B ->>>>10 string x \b, name: %.8s -#UDMA.SYS KEYB.SYS CMD640X2.SYS ->10 string <\x41 ->>12 string >\x40 ->>>10 string !$ ->>>>12 string x \b, name: %.8s -#BTCDROM.SYS ASPICD.SYS ->22 string >\x40 ->>22 string <\x5B ->>>23 string <\x5B ->>>>22 string x \b, name: %.8s -#ATAPICD.SYS ->76 string \0 ->>77 string >\x40 ->>>77 string <\x5B ->>>>77 string x \b, name: %.8s -# test too generic ? -0 byte 0x8c DOS executable (COM) -# updated by Joerg Jenderek at Oct 2008 -0 ulelong 0xffff10eb DR-DOS executable (COM) -# byte 0xeb conflicts with "sequent" magic leshort 0xn2eb -0 ubeshort&0xeb8d >0xeb00 -# DR-DOS STACKER.COM SCREATE.SYS missed ->0 byte 0xeb DOS executable (COM) ->>0x1FE leshort 0xAA55 \b, boot code ->>85 string UPX \b, UPX compressed ->>4 string \ $ARX \b, ARX self-extracting archive ->>4 string \ $LHarc \b, LHarc self-extracting archive ->>0x20e string SFX\ by\ LARC \b, LARC self-extracting archive -# updated by Joerg Jenderek at Oct 2008 -#0 byte 0xb8 COM executable -0 uleshort&0x80ff 0x00b8 -# modified by Joerg Jenderek ->1 lelong !0x21cd4cff COM executable for DOS -# http://syslinux.zytor.com/comboot.php -# (32-bit COMBOOT) programs *.C32 contain 32-bit code and run in flat-memory 32-bit protected mode -# start with assembler instructions mov eax,21cd4cffh -0 uleshort&0xc0ff 0xc0b8 ->1 lelong 0x21cd4cff COM executable (32-bit COMBOOT) -0 string \x81\xfc ->4 string \x77\x02\xcd\x20\xb9 ->>36 string UPX! FREE-DOS executable (COM), UPX compressed -252 string Must\ have\ DOS\ version DR-DOS executable (COM) -# added by Joerg Jenderek at Oct 2008 -# GRR search is not working -#34 search/2 UPX! FREE-DOS executable (COM), UPX compressed -34 string UPX! FREE-DOS executable (COM), UPX compressed -35 string UPX! FREE-DOS executable (COM), UPX compressed -# GRR search is not working -#2 search/28 \xcd\x21 COM executable for MS-DOS -#WHICHFAT.cOM -2 string \xcd\x21 COM executable for DOS -#DELTREE.cOM DELTREE2.cOM -4 string \xcd\x21 COM executable for DOS -#IFMEMDSK.cOM ASSIGN.cOM COMP.cOM -5 string \xcd\x21 COM executable for DOS -#DELTMP.COm HASFAT32.cOM -7 string \xcd\x21 ->0 byte !0xb8 COM executable for DOS -#COMP.cOM MORE.COm -10 string \xcd\x21 ->5 string !\xcd\x21 COM executable for DOS -#comecho.com -13 string \xcd\x21 COM executable for DOS -#HELP.COm EDIT.coM -18 string \xcd\x21 COM executable for MS-DOS -#NWRPLTRM.COm -23 string \xcd\x21 COM executable for MS-DOS -#LOADFIX.cOm LOADFIX.cOm -30 string \xcd\x21 COM executable for MS-DOS -#syslinux.com 3.11 -70 string \xcd\x21 COM executable for DOS -# many compressed/converted COMs start with a copy loop instead of a jump -0x6 search/0xa \xfc\x57\xf3\xa5\xc3 COM executable for MS-DOS -0x6 search/0xa \xfc\x57\xf3\xa4\xc3 COM executable for DOS ->0x18 search/0x10 \x50\xa4\xff\xd5\x73 \b, aPack compressed -0x3c string W\ Collis\0\0 COM executable for MS-DOS, Compack compressed -# FIXME: missing diet .com compression - -# miscellaneous formats -0 string LZ MS-DOS executable (built-in) -#0 byte 0xf0 MS-DOS program library data -# - -# AAF files: -# <stuartc@rd.bbc.co.uk> Stuart Cunningham -0 string \320\317\021\340\241\261\032\341AAFB\015\000OM\006\016\053\064\001\001\001\377 AAF legacy file using MS Structured Storage ->30 byte 9 (512B sectors) ->30 byte 12 (4kB sectors) -0 string \320\317\021\340\241\261\032\341\001\002\001\015\000\002\000\000\006\016\053\064\003\002\001\001 AAF file using MS Structured Storage ->30 byte 9 (512B sectors) ->30 byte 12 (4kB sectors) - -# Popular applications -2080 string Microsoft\ Word\ 6.0\ Document %s -!:mime application/msword -2080 string Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data -!:mime application/msword -# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Word) -2112 string MSWordDoc Microsoft Word document data -!:mime application/msword -# -0 belong 0x31be0000 Microsoft Word Document -!:mime application/msword -# -0 string PO^Q` Microsoft Word 6.0 Document -!:mime application/msword -# -0 string \376\067\0\043 Microsoft Office Document -!:mime application/msword -0 string \333\245-\0\0\0 Microsoft Office Document -!:mime application/msword -512 string \354\245\301 Microsoft Word Document -!:mime application/msword -# -2080 string Microsoft\ Excel\ 5.0\ Worksheet %s -!:mime application/vnd.ms-excel - -2080 string Foglio\ di\ lavoro\ Microsoft\ Exce %s -!:mime application/vnd.ms-excel -# -# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Excel) -2114 string Biff5 Microsoft Excel 5.0 Worksheet -!:mime application/vnd.ms-excel -# Italian MS-Excel -2121 string Biff5 Microsoft Excel 5.0 Worksheet -!:mime application/vnd.ms-excel -0 string \x09\x04\x06\x00\x00\x00\x10\x00 Microsoft Excel Worksheet -!:mime application/vnd.ms-excel -# -0 belong 0x00001a00 Lotus 1-2-3 -!:mime application/x-123 ->4 belong 0x00100400 wk3 document data ->4 belong 0x02100400 wk4 document data ->4 belong 0x07800100 fm3 or fmb document data ->4 belong 0x07800000 fm3 or fmb document data -# -0 belong 0x00000200 Lotus 1-2-3 -!:mime application/x-123 ->4 belong 0x06040600 wk1 document data ->4 belong 0x06800200 fmt document data -0 string WordPro\0 Lotus WordPro -!:mime application/vnd.lotus-wordpro -0 string WordPro\r\373 Lotus WordPro -!:mime application/vnd.lotus-wordpro - - -# Summary: Script used by InstallScield to uninstall applications -# Extension: .isu -# Submitted by: unknown -# Modified by (1): Abel Cheung <abelcheung@gmail.com> (replace useless entry) -0 string \x71\xa8\x00\x00\x01\x02 ->12 string Stirling\ Technologies, InstallShield Uninstall Script - -# Winamp .avs -#0 string Nullsoft\ AVS\ Preset\ \060\056\061\032 A plug in for Winamp ms-windows Freeware media player -0 string Nullsoft\ AVS\ Preset\ Winamp plug in - -# Windows Metafont .WMF -0 string \327\315\306\232 ms-windows metafont .wmf -0 string \002\000\011\000 ms-windows metafont .wmf -0 string \001\000\011\000 ms-windows metafont .wmf - -#tz3 files whatever that is (MS Works files) -0 string \003\001\001\004\070\001\000\000 tz3 ms-works file -0 string \003\002\001\004\070\001\000\000 tz3 ms-works file -0 string \003\003\001\004\070\001\000\000 tz3 ms-works file - -# PGP sig files .sig -#0 string \211\000\077\003\005\000\063\237\127 065 to \027\266\151\064\005\045\101\233\021\002 PGP sig -0 string \211\000\077\003\005\000\063\237\127\065\027\266\151\064\005\045\101\233\021\002 PGP sig -0 string \211\000\077\003\005\000\063\237\127\066\027\266\151\064\005\045\101\233\021\002 PGP sig -0 string \211\000\077\003\005\000\063\237\127\067\027\266\151\064\005\045\101\233\021\002 PGP sig -0 string \211\000\077\003\005\000\063\237\127\070\027\266\151\064\005\045\101\233\021\002 PGP sig -0 string \211\000\077\003\005\000\063\237\127\071\027\266\151\064\005\045\101\233\021\002 PGP sig -0 string \211\000\225\003\005\000\062\122\207\304\100\345\042 PGP sig - -# windows zips files .dmf -0 string MDIF\032\000\010\000\000\000\372\046\100\175\001\000\001\036\001\000 MS Windows special zipped file - - -#ico files -0 string \102\101\050\000\000\000\056\000\000\000\000\000\000\000 Icon for MS Windows - -# Windows icons (Ian Springer <ips@fpk.hp.com>) -0 string \000\000\001\000 MS Windows icon resource -!:mime image/x-ico ->4 byte 1 - 1 icon ->4 byte >1 - %d icons ->>6 byte >0 \b, %dx ->>>7 byte >0 \b%d ->>8 byte 0 \b, 256-colors ->>8 byte >0 \b, %d-colors - - -# .chr files -0 string PK\010\010BGI Borland font ->4 string >\0 %s -# then there is a copyright notice - - -# .bgi files -0 string pk\010\010BGI Borland device ->4 string >\0 %s -# then there is a copyright notice - - -# Windows Recycle Bin record file (named INFO2) -# By Abel Cheung (abelcheung AT gmail dot com) -# Version 4 always has 280 bytes (0x118) per record, version 5 has 800 bytes -# Since Vista uses another structure, INFO2 structure probably won't change -# anymore. Detailed analysis in: -# http://www.cybersecurityinstitute.biz/downloads/INFO2.pdf -0 lelong 0x00000004 ->12 lelong 0x00000118 Windows Recycle Bin INFO2 file (Win98 or below) - -0 lelong 0x00000005 ->12 lelong 0x00000320 Windows Recycle Bin INFO2 file (Win2k - WinXP) - - -##### put in Either Magic/font or Magic/news -# Acroread or something files wrongly identified as G3 .pfm -# these have the form \000 \001 any? \002 \000 \000 -# or \000 \001 any? \022 \000 \000 -0 belong&0xffff00ff 0x00010012 PFM data ->4 string \000\000 ->6 string >\060 - %s - -0 belong&0xffff00ff 0x00010002 PFM data ->4 string \000\000 ->6 string >\060 - %s -#0 string \000\001 pfm? -#>3 string \022\000\000Copyright\ yes -#>3 string \002\000\000Copyright\ yes -#>3 string >\0 oops, not a font file. Cancel that. -#it clashes with ttf files so put it lower down. - -# From Doug Lee via a FreeBSD pr -9 string GERBILDOC First Choice document -9 string GERBILDB First Choice database -9 string GERBILCLIP First Choice database -0 string GERBIL First Choice device file -9 string RABBITGRAPH RabbitGraph file -0 string DCU1 Borland Delphi .DCU file -0 string =!<spell> MKS Spell hash list (old format) -0 string =!<spell2> MKS Spell hash list -# Too simple - MPi -#0 string AH Halo(TM) bitmapped font file -0 lelong 0x08086b70 TurboC BGI file -0 lelong 0x08084b50 TurboC Font file - -# WARNING: below line conflicts with Infocom game data Z-machine 3 -0 byte 0x03 DBase 3 data file ->0x04 lelong 0 (no records) ->0x04 lelong >0 (%ld records) -0 byte 0x83 DBase 3 data file with memo(s) ->0x04 lelong 0 (no records) ->0x04 lelong >0 (%ld records) -0 leshort 0x0006 DBase 3 index file -0 string PMCC Windows 3.x .GRP file -1 string RDC-meg MegaDots ->8 byte >0x2F version %c ->9 byte >0x2F \b.%c file -0 lelong 0x4C ->4 lelong 0x00021401 Windows shortcut file - -# DOS EPS Binary File Header -# From: Ed Sznyter <ews@Black.Market.NET> -0 belong 0xC5D0D3C6 DOS EPS Binary File ->4 long >0 Postscript starts at byte %d ->>8 long >0 length %d ->>>12 long >0 Metafile starts at byte %d ->>>>16 long >0 length %d ->>>20 long >0 TIFF starts at byte %d ->>>>24 long >0 length %d - -# TNEF magic From "Joomy" <joomy@se-ed.net> -# Microsoft Outlook's Transport Neutral Encapsulation Format (TNEF) -0 leshort 0x223e9f78 TNEF -!:mime application/vnd.ms-tnef - -# HtmlHelp files (.chm) -0 string ITSF\003\000\000\000\x60\000\000\000\001\000\000\000 MS Windows HtmlHelp Data - -# GFA-BASIC (Wolfram Kleff) -2 string GFA-BASIC3 GFA-BASIC 3 data - -#------------------------------------------------------------------------------ -# From Stuart Caie <kyzer@4u.net> (developer of cabextract) -# Microsoft Cabinet files -0 string MSCF\0\0\0\0 Microsoft Cabinet archive data -!:mime application/vnd.ms-cab-compressed ->8 lelong x \b, %u bytes ->28 leshort 1 \b, 1 file ->28 leshort >1 \b, %u files - -# InstallShield Cabinet files -0 string ISc( InstallShield Cabinet archive data ->5 byte&0xf0 =0x60 version 6, ->5 byte&0xf0 !0x60 version 4/5, ->(12.l+40) lelong x %u files - -# Windows CE package files -0 string MSCE\0\0\0\0 Microsoft WinCE install header ->20 lelong 0 \b, architecture-independent ->20 lelong 103 \b, Hitachi SH3 ->20 lelong 104 \b, Hitachi SH4 ->20 lelong 0xA11 \b, StrongARM ->20 lelong 4000 \b, MIPS R4000 ->20 lelong 10003 \b, Hitachi SH3 ->20 lelong 10004 \b, Hitachi SH3E ->20 lelong 10005 \b, Hitachi SH4 ->20 lelong 70001 \b, ARM 7TDMI ->52 leshort 1 \b, 1 file ->52 leshort >1 \b, %u files ->56 leshort 1 \b, 1 registry entry ->56 leshort >1 \b, %u registry entries - - -# Windows Enhanced Metafile (EMF) -# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp -# for further information. -0 ulelong 1 ->40 string \ EMF Windows Enhanced Metafile (EMF) image data ->>44 ulelong x version 0x%x - -# From: Alex Beregszaszi <alex@fsn.hu> -0 string COWD VMWare3 ->4 byte 3 disk image ->>32 lelong x (%d/ ->>36 lelong x \b%d/ ->>40 lelong x \b%d) ->4 byte 2 undoable disk image ->>32 string >\0 (%s) - -0 string VMDK VMware4 disk image -0 string KDMV VMware4 disk image - -#-------------------------------------------------------------------- -# Qemu Emulator Images -# Lines written by Friedrich Schwittay (f.schwittay@yousable.de) -# Made by reading sources and doing trial and error on existing -# qcow files -0 string QFI Qemu Image, Format: Qcow - -# Uncomment the following line to display Magic (only used for debugging -# this magic number) -#>0 string x , Magic: %s - -# There are currently 2 Versions: "1" and "2" -# I do not use Version 2 and therefor branch here -# but can assure: it works (tested on both versions) -# Also my Qemu 0.9.0 which uses this Version 2 refuses -# to start in its bios ->0x04 belong 2 , Version: 2 ->0x04 belong 1 , Version: 1 - -# Using the existence of the Backing File Offset to Branch or not -# to read Backing File Information ->>0xc belong >0 , Backing File( Offset: %lu ->>>(0xc.L) string >\0 , Path: %s - -# Didn't get the trick here how qemu stores the "Size" at this Position -# There is actually something stored but nothing makes sense -# The header in the sources talks about it -#>>>16 lelong x , Size: %lu - -# Modification time of the Backing File -# Really useful if you want to know if your backing -# file is still usable together with this image ->>>20 bedate x , Mtime: %s ) - -# Don't know how to calculate in Magicfiles -# Also: this Information is not reliably -# stored in image-files ->>24 lelong x , Disk Size could be: %d * 256 bytes - -0 string QEVM QEMU's suspend to disk image - -0 string Bochs\ Virtual\ HD\ Image Bochs disk image, ->32 string x type %s, ->48 string x subtype %s - -0 lelong 0x02468ace Bochs Sparse disk image - -# from http://filext.com by Derek M Jones <derek@knosof.co.uk> -# False positive with PPT (also currently this string is too long) -#0 string \xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3E\x00\x03\x00\xFE\xFF\x09\x00\x06 Microsoft Installer -0 string \320\317\021\340\241\261\032\341 Microsoft Office Document -#>48 byte 0x1B Excel Document -#!:mime application/vnd.ms-excel ->546 string bjbj Microsoft Word Document -!:mime application/msword ->546 string jbjb Microsoft Word Document -!:mime application/msword - -0 string \224\246\056 Microsoft Word Document -!:mime application/msword - -512 string R\0o\0o\0t\0\ \0E\0n\0t\0r\0y Microsoft Word Document -!:mime application/msword - -# From: "Nelson A. de Oliveira" <naoliv@gmail.com> -# Magic type for Dell's BIOS .hdr files -# Dell's .hdr -0 string $RBU ->23 string Dell %s system BIOS ->48 string x version %.3s - -# Type: Microsoft DirectDraw Surface -# URL: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp -# From: Morten Hustveit <morten@debian.org> -0 string DDS\040\174\000\000\000 Microsoft DirectDraw Surface (DDS), ->16 lelong >0 %hd x ->12 lelong >0 %hd, ->84 string x %.4s - -# Type: Microsoft Document Imaging Format (.mdi) -# URL: http://en.wikipedia.org/wiki/Microsoft_Document_Imaging_Format -# From: Daniele Sempione <scrows@oziosi.org> -0 short 0x5045 Microsoft Document Imaging Format - -# MS eBook format (.lit) -0 string ITOLITLS Microsoft Reader eBook Data ->8 lelong x \b, version %u -!:mime application/x-ms-reader - -#------------------------------------------------------------------------------ -# msvc: file(1) magic for msvc -# "H. Nanosecond" <aldomel@ix.netcom.com> -# Microsoft visual C -# -# I have version 1.0 - -# .aps -0 string HWB\000\377\001\000\000\000 Microsoft Visual C .APS file - -# .ide -#too long 0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157\152\145\143\164\040\106\151\154\145\012\000\032\000\002\000\262\000\272\276\372\316 MSVC .ide -0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157 MSVC .ide - -# .res -0 string \000\000\000\000\040\000\000\000\377 MSVC .res -0 string \377\003\000\377\001\000\020\020\350 MSVC .res -0 string \377\003\000\377\001\000\060\020\350 MSVC .res - -#.lib -0 string \360\015\000\000 Microsoft Visual C library -0 string \360\075\000\000 Microsoft Visual C library -0 string \360\175\000\000 Microsoft Visual C library - -#.pch -0 string DTJPCH0\000\022\103\006\200 Microsoft Visual C .pch - -# .pdb -# too long 0 string Microsoft\ C/C++\ program\ database\ -0 string Microsoft\ C/C++\ MSVC program database ->18 string program\ database\ ->33 string >\0 ver %s - -#.sbr -0 string \000\002\000\007\000 MSVC .sbr ->5 string >\0 %s - -#.bsc -0 string \002\000\002\001 MSVC .bsc - -#.wsp -0 string 1.00\ .0000.0000\000\003 MSVC .wsp version 1.0000.0000 -# these seem to start with the version and contain menus -# ------------------------------------------------------------------------ -# mup: file(1) magic for Mup (Music Publisher) input file. -# -# From: Abel Cheung <abel (@) oaka.org> -# -# NOTE: This header is mainly proposed in the Arkkra mailing list, -# and is not a mandatory header because of old mup input file -# compatibility. Noteedit also use mup format, but is not forcing -# user to use any header as well. -# -0 search/1 //!Mup Mup music publication program input text ->6 string -Arkkra (Arkkra) ->>13 string - ->>>16 string . ->>>>14 string x \b, need V%.4s ->>>15 string . ->>>>14 string x \b, need V%.3s ->6 string - ->>9 string . ->>>7 string x \b, need V%.4s ->>8 string . ->>>7 string x \b, need V%.3s - -#----------------------------------------------------------------------------- -# natinst: file(1) magic for National Instruments Code Files - -# -# From <egamez@fcfm.buap.mx> Enrique G�mez-Flores -# version 1 -# Many formats still missing, we use, for the moment LabVIEW -# We guess VXI format file. VISA, LabWindowsCVI, BridgeVIEW, etc, are missing -# -0 string RSRC National Instruments, -# Check if it's a LabVIEW File ->8 string LV LabVIEW File, -# Check wich kind of file is ->>10 string SB Code Resource File, data ->>10 string IN Virtual Instrument Program, data ->>10 string AR VI Library, data -# This is for Menu Libraries ->8 string LMNULBVW Portable File Names, data -# This is for General Resources ->8 string rsc Resources File, data -# This is for VXI Package -0 string VMAP National Instruments, VXI File, data - -#------------------------------------------------------------------------------ -# ncr: file(1) magic for NCR Tower objects -# -# contributed by -# Michael R. Wayne *** TMC & Associates *** INTERNET: wayne@ford-vax.arpa -# uucp: {philabs | pyramid} !fmsrl7!wayne OR wayne@fmsrl7.UUCP -# -0 beshort 000610 Tower/XP rel 2 object ->12 belong >0 not stripped ->20 beshort 0407 executable ->20 beshort 0410 pure executable ->22 beshort >0 - version %ld -0 beshort 000615 Tower/XP rel 2 object ->12 belong >0 not stripped ->20 beshort 0407 executable ->20 beshort 0410 pure executable ->22 beshort >0 - version %ld -0 beshort 000620 Tower/XP rel 3 object ->12 belong >0 not stripped ->20 beshort 0407 executable ->20 beshort 0410 pure executable ->22 beshort >0 - version %ld -0 beshort 000625 Tower/XP rel 3 object ->12 belong >0 not stripped ->20 beshort 0407 executable ->20 beshort 0410 pure executable ->22 beshort >0 - version %ld -0 beshort 000630 Tower32/600/400 68020 object ->12 belong >0 not stripped ->20 beshort 0407 executable ->20 beshort 0410 pure executable ->22 beshort >0 - version %ld -0 beshort 000640 Tower32/800 68020 ->18 beshort &020000 w/68881 object ->18 beshort &040000 compatible object ->18 beshort &060000 object ->20 beshort 0407 executable ->20 beshort 0413 pure executable ->12 belong >0 not stripped ->22 beshort >0 - version %ld -0 beshort 000645 Tower32/800 68010 ->18 beshort &040000 compatible object ->18 beshort &060000 object ->20 beshort 0407 executable ->20 beshort 0413 pure executable ->12 belong >0 not stripped ->22 beshort >0 - version %ld - -#------------------------------------------------------------------------------ -# netbsd: file(1) magic for NetBSD objects -# -# All new-style magic numbers are in network byte order. -# - -0 lelong 000000407 a.out NetBSD little-endian object file ->16 lelong >0 not stripped -0 belong 000000407 a.out NetBSD big-endian object file ->16 belong >0 not stripped - -0 belong&0377777777 041400413 a.out NetBSD/i386 demand paged ->0 byte &0x80 ->>20 lelong <4096 shared library ->>20 lelong =4096 dynamically linked executable ->>20 lelong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 lelong >0 not stripped -0 belong&0377777777 041400410 a.out NetBSD/i386 pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 lelong >0 not stripped -0 belong&0377777777 041400407 a.out NetBSD/i386 ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 ->>0 byte &0x40 position independent ->>20 lelong !0 executable ->>20 lelong =0 object file ->16 lelong >0 not stripped -0 belong&0377777777 041400507 a.out NetBSD/i386 core ->12 string >\0 from '%s' ->32 lelong !0 (signal %d) - -0 belong&0377777777 041600413 a.out NetBSD/m68k demand paged ->0 byte &0x80 ->>20 belong <8192 shared library ->>20 belong =8192 dynamically linked executable ->>20 belong >8192 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped -0 belong&0377777777 041600410 a.out NetBSD/m68k pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped -0 belong&0377777777 041600407 a.out NetBSD/m68k ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 ->>0 byte &0x40 position independent ->>20 belong !0 executable ->>20 belong =0 object file ->16 belong >0 not stripped -0 belong&0377777777 041600507 a.out NetBSD/m68k core ->12 string >\0 from '%s' ->32 belong !0 (signal %d) - -0 belong&0377777777 042000413 a.out NetBSD/m68k4k demand paged ->0 byte &0x80 ->>20 belong <4096 shared library ->>20 belong =4096 dynamically linked executable ->>20 belong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped -0 belong&0377777777 042000410 a.out NetBSD/m68k4k pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped -0 belong&0377777777 042000407 a.out NetBSD/m68k4k ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 ->>0 byte &0x40 position independent ->>20 belong !0 executable ->>20 belong =0 object file ->16 belong >0 not stripped -0 belong&0377777777 042000507 a.out NetBSD/m68k4k core ->12 string >\0 from '%s' ->32 belong !0 (signal %d) - -0 belong&0377777777 042200413 a.out NetBSD/ns32532 demand paged ->0 byte &0x80 ->>20 lelong <4096 shared library ->>20 lelong =4096 dynamically linked executable ->>20 lelong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 lelong >0 not stripped -0 belong&0377777777 042200410 a.out NetBSD/ns32532 pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 lelong >0 not stripped -0 belong&0377777777 042200407 a.out NetBSD/ns32532 ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 ->>0 byte &0x40 position independent ->>20 lelong !0 executable ->>20 lelong =0 object file ->16 lelong >0 not stripped -0 belong&0377777777 042200507 a.out NetBSD/ns32532 core ->12 string >\0 from '%s' ->32 lelong !0 (signal %d) - -0 belong&0377777777 045200507 a.out NetBSD/powerpc core ->12 string >\0 from '%s' - -0 belong&0377777777 042400413 a.out NetBSD/sparc demand paged ->0 byte &0x80 ->>20 belong <8192 shared library ->>20 belong =8192 dynamically linked executable ->>20 belong >8192 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped -0 belong&0377777777 042400410 a.out NetBSD/sparc pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped -0 belong&0377777777 042400407 a.out NetBSD/sparc ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 ->>0 byte &0x40 position independent ->>20 belong !0 executable ->>20 belong =0 object file ->16 belong >0 not stripped -0 belong&0377777777 042400507 a.out NetBSD/sparc core ->12 string >\0 from '%s' ->32 belong !0 (signal %d) - -0 belong&0377777777 042600413 a.out NetBSD/pmax demand paged ->0 byte &0x80 ->>20 lelong <4096 shared library ->>20 lelong =4096 dynamically linked executable ->>20 lelong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 lelong >0 not stripped -0 belong&0377777777 042600410 a.out NetBSD/pmax pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 lelong >0 not stripped -0 belong&0377777777 042600407 a.out NetBSD/pmax ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 ->>0 byte &0x40 position independent ->>20 lelong !0 executable ->>20 lelong =0 object file ->16 lelong >0 not stripped -0 belong&0377777777 042600507 a.out NetBSD/pmax core ->12 string >\0 from '%s' ->32 lelong !0 (signal %d) - -0 belong&0377777777 043000413 a.out NetBSD/vax 1k demand paged ->0 byte &0x80 ->>20 lelong <4096 shared library ->>20 lelong =4096 dynamically linked executable ->>20 lelong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 lelong >0 not stripped -0 belong&0377777777 043000410 a.out NetBSD/vax 1k pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 lelong >0 not stripped -0 belong&0377777777 043000407 a.out NetBSD/vax 1k ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 ->>0 byte &0x40 position independent ->>20 lelong !0 executable ->>20 lelong =0 object file ->16 lelong >0 not stripped -0 belong&0377777777 043000507 a.out NetBSD/vax 1k core ->12 string >\0 from '%s' ->32 lelong !0 (signal %d) - -0 belong&0377777777 045400413 a.out NetBSD/vax 4k demand paged ->0 byte &0x80 ->>20 lelong <4096 shared library ->>20 lelong =4096 dynamically linked executable ->>20 lelong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 lelong >0 not stripped -0 belong&0377777777 045400410 a.out NetBSD/vax 4k pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 lelong >0 not stripped -0 belong&0377777777 045400407 a.out NetBSD/vax 4k ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 ->>0 byte &0x40 position independent ->>20 lelong !0 executable ->>20 lelong =0 object file ->16 lelong >0 not stripped -0 belong&0377777777 045400507 a.out NetBSD/vax 4k core ->12 string >\0 from '%s' ->32 lelong !0 (signal %d) - -# NetBSD/alpha does not support (and has never supported) a.out objects, -# so no rules are provided for them. NetBSD/alpha ELF objects are -# dealt with in "elf". -0 lelong 0x00070185 ECOFF NetBSD/alpha binary ->10 leshort 0x0001 not stripped ->10 leshort 0x0000 stripped -0 belong&0377777777 043200507 a.out NetBSD/alpha core ->12 string >\0 from '%s' ->32 lelong !0 (signal %d) - -0 belong&0377777777 043400413 a.out NetBSD/mips demand paged ->0 byte &0x80 ->>20 belong <8192 shared library ->>20 belong =8192 dynamically linked executable ->>20 belong >8192 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped -0 belong&0377777777 043400410 a.out NetBSD/mips pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped -0 belong&0377777777 043400407 a.out NetBSD/mips ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 ->>0 byte &0x40 position independent ->>20 belong !0 executable ->>20 belong =0 object file ->16 belong >0 not stripped -0 belong&0377777777 043400507 a.out NetBSD/mips core ->12 string >\0 from '%s' ->32 belong !0 (signal %d) - -0 belong&0377777777 043600413 a.out NetBSD/arm32 demand paged ->0 byte &0x80 ->>20 lelong <4096 shared library ->>20 lelong =4096 dynamically linked executable ->>20 lelong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 lelong >0 not stripped -0 belong&0377777777 043600410 a.out NetBSD/arm32 pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 lelong >0 not stripped -0 belong&0377777777 043600407 a.out NetBSD/arm32 ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 ->>0 byte &0x40 position independent ->>20 lelong !0 executable ->>20 lelong =0 object file ->16 lelong >0 not stripped -# NetBSD/arm26 has always used ELF objects, but it shares a core file -# format with NetBSD/arm32. -0 belong&0377777777 043600507 a.out NetBSD/arm core ->12 string >\0 from '%s' ->32 lelong !0 (signal %d) - -#------------------------------------------------------------------------------ -# netscape: file(1) magic for Netscape files -# "H. Nanosecond" <aldomel@ix.netcom.com> -# version 3 and 4 I think -# - -# Netscape Address book .nab -0 string \000\017\102\104\000\000\000\000\000\000\001\000\000\000\000\002\000\000\000\002\000\000\004\000 Netscape Address book - -# Netscape Communicator address book -0 string \000\017\102\111 Netscape Communicator address book - -# .snm Caches -0 string #\ Netscape\ folder\ cache Netscape folder cache -0 string \000\036\204\220\000 Netscape folder cache -# .n2p -# Net 2 Phone -#0 string 123\130\071\066\061\071\071\071\060\070\061\060\061\063\060 -0 string SX961999 Net2phone - -# -#This is files ending in .art, FIXME add more rules -0 string JG\004\016\0\0\0\0 ART - -#------------------------------------------------------------------------------ -# netware: file(1) magic for NetWare Loadable Modules (NLMs) -# From: Mads Martin Joergensen <mmj@suse.de> - -0 string NetWare\ Loadable\ Module NetWare Loadable Module - -#------------------------------------------------------------------------------ -# news: file(1) magic for SunOS NeWS fonts (not "news" as in "netnews") -# -0 string StartFontMetrics ASCII font metrics -0 string StartFont ASCII font bits -0 belong 0x137A2944 NeWS bitmap font -0 belong 0x137A2947 NeWS font family -0 belong 0x137A2950 scalable OpenFont binary -0 belong 0x137A2951 encrypted scalable OpenFont binary -8 belong 0x137A2B45 X11/NeWS bitmap font -8 belong 0x137A2B48 X11/NeWS font family -#------------------------------------------------------------------------------ -# nitpicker: file(1) magic for Flowfiles. -# From: Christian Jachmann <C.Jachmann@gmx.net> http://www.nitpicker.de -0 string NPFF NItpicker Flow File ->4 byte x V%d. ->5 byte x %d ->6 bedate x started: %s ->10 bedate x stopped: %s ->14 belong x Bytes: %u ->18 belong x Bytes1: %u ->22 belong x Flows: %u ->26 belong x Pkts: %u - -#------------------------------------------------------------------------------ -# ocaml: file(1) magic for Objective Caml files. -0 string Caml1999 OCaml ->8 string X exec file ->8 string I interface file (.cmi) ->8 string O object file (.cmo) ->8 string A library file (.cma) ->8 string Y native object file (.cmx) ->8 string Z native library file (.cmxa) ->8 string M abstract syntax tree implementation file ->8 string N abstract syntax tree interface file ->9 string >\0 (Version %3.3s) -#------------------------------------------------------------------------------ -# octave binary data file(1) magic, from Dirk Eddelbuettel <edd@debian.org> -0 string Octave-1-L Octave binary data (little endian) -0 string Octave-1-B Octave binary data (big endian) - -#------------------------------------------------------------------------------ -# Microsoft OLE 2 Compound Documents : file(1) magic for Microsoft Structured -# storage (http://en.wikipedia.org/wiki/Structured_Storage) -# Additional tests for OLE 2 Compound Documents should be under this recipe. - -0 string \320\317\021\340\241\261\032\341 OLE 2 Compound Document -# - Microstation V8 DGN files (www.bentley.com) -# Last update on 10/23/2006 by Lester Hightower -> 0x480 string D\000g\000n\000~\000H : Microstation V8 DGN -# - Visio documents -# Last update on 10/23/2006 by Lester Hightower -> 0x480 string V\000i\000s\000i\000o\000D\000o\000c : Visio Document - -#------------------------------------------------------------------------------ -# olf: file(1) magic for OLF executables -# -# We have to check the byte order flag to see what byte order all the -# other stuff in the header is in. -# -# MIPS R3000 may also be for MIPS R2000. -# What're the correct byte orders for the nCUBE and the Fujitsu VPP500? -# -# Created by Erik Theisen <etheisen@openbsd.org> -# Based on elf from Daniel Quinlan <quinlan@yggdrasil.com> -0 string \177OLF OLF ->4 byte 0 invalid class ->4 byte 1 32-bit ->4 byte 2 64-bit ->7 byte 0 invalid os ->7 byte 1 OpenBSD ->7 byte 2 NetBSD ->7 byte 3 FreeBSD ->7 byte 4 4.4BSD ->7 byte 5 Linux ->7 byte 6 SVR4 ->7 byte 7 esix ->7 byte 8 Solaris ->7 byte 9 Irix ->7 byte 10 SCO ->7 byte 11 Dell ->7 byte 12 NCR ->5 byte 0 invalid byte order ->5 byte 1 LSB ->>16 leshort 0 no file type, ->>16 leshort 1 relocatable, ->>16 leshort 2 executable, ->>16 leshort 3 shared object, -# Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de> -# corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de> ->>16 leshort 4 core file ->>>(0x38+0xcc) string >\0 of '%s' ->>>(0x38+0x10) lelong >0 (signal %d), ->>16 leshort &0xff00 processor-specific, ->>18 leshort 0 no machine, ->>18 leshort 1 AT&T WE32100 - invalid byte order, ->>18 leshort 2 SPARC - invalid byte order, ->>18 leshort 3 Intel 80386, ->>18 leshort 4 Motorola 68000 - invalid byte order, ->>18 leshort 5 Motorola 88000 - invalid byte order, ->>18 leshort 6 Intel 80486, ->>18 leshort 7 Intel 80860, ->>18 leshort 8 MIPS R3000_BE - invalid byte order, ->>18 leshort 9 Amdahl - invalid byte order, ->>18 leshort 10 MIPS R3000_LE, ->>18 leshort 11 RS6000 - invalid byte order, ->>18 leshort 15 PA-RISC - invalid byte order, ->>18 leshort 16 nCUBE, ->>18 leshort 17 VPP500, ->>18 leshort 18 SPARC32PLUS, ->>18 leshort 20 PowerPC, ->>18 leshort 0x9026 Alpha, ->>20 lelong 0 invalid version ->>20 lelong 1 version 1 ->>36 lelong 1 MathCoPro/FPU/MAU Required ->8 string >\0 (%s) ->5 byte 2 MSB ->>16 beshort 0 no file type, ->>16 beshort 1 relocatable, ->>16 beshort 2 executable, ->>16 beshort 3 shared object, ->>16 beshort 4 core file, ->>>(0x38+0xcc) string >\0 of '%s' ->>>(0x38+0x10) belong >0 (signal %d), ->>16 beshort &0xff00 processor-specific, ->>18 beshort 0 no machine, ->>18 beshort 1 AT&T WE32100, ->>18 beshort 2 SPARC, ->>18 beshort 3 Intel 80386 - invalid byte order, ->>18 beshort 4 Motorola 68000, ->>18 beshort 5 Motorola 88000, ->>18 beshort 6 Intel 80486 - invalid byte order, ->>18 beshort 7 Intel 80860, ->>18 beshort 8 MIPS R3000_BE, ->>18 beshort 9 Amdahl, ->>18 beshort 10 MIPS R3000_LE - invalid byte order, ->>18 beshort 11 RS6000, ->>18 beshort 15 PA-RISC, ->>18 beshort 16 nCUBE, ->>18 beshort 17 VPP500, ->>18 beshort 18 SPARC32PLUS, ->>18 beshort 20 PowerPC or cisco 4500, ->>18 beshort 21 cisco 7500, ->>18 beshort 24 cisco SVIP, ->>18 beshort 25 cisco 7200, ->>18 beshort 36 cisco 12000, ->>18 beshort 0x9026 Alpha, ->>20 belong 0 invalid version ->>20 belong 1 version 1 ->>36 belong 1 MathCoPro/FPU/MAU Required -#------------------------------------------------------------------------------ -# os2: file(1) magic for OS/2 files -# - -# Provided 1998/08/22 by -# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net> -1 search/1 InternetShortcut MS Windows 95 Internet shortcut text ->24 search/1 >\ (URL=<%s>) - -# OS/2 URL objects -# Provided 1998/08/22 by -# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net> -#0 string http: OS/2 URL object text -#>5 string >\ (WWW) <http:%s> -#0 string mailto: OS/2 URL object text -#>7 string >\ (email) <%s> -#0 string news: OS/2 URL object text -#>5 string >\ (Usenet) <%s> -#0 string ftp: OS/2 URL object text -#>4 string >\ (FTP) <ftp:%s> -#0 string file: OS/2 URL object text -#>5 string >\ (Local file) <%s> - -# >>>>> OS/2 INF/HLP <<<<< (source: Daniel Dissett ddissett@netcom.com) -# Carl Hauser (chauser.parc@xerox.com) and -# Marcus Groeber (marcusg@ph-cip.uni-koeln.de) -# list the following header format in inf02a.doc: -# -# int16 ID; // ID magic word (5348h = "HS") -# int8 unknown1; // unknown purpose, could be third letter of ID -# int8 flags; // probably a flag word... -# // bit 0: set if INF style file -# // bit 4: set if HLP style file -# // patching this byte allows reading HLP files -# // using the VIEW command, while help files -# // seem to work with INF settings here as well. -# int16 hdrsize; // total size of header -# int16 unknown2; // unknown purpose -# -0 string HSP\x01\x9b\x00 OS/2 INF ->107 string >0 (%s) -0 string HSP\x10\x9b\x00 OS/2 HLP ->107 string >0 (%s) - -# OS/2 INI (this is a guess) -0 string \xff\xff\xff\xff\x14\0\0\0 OS/2 INI -#------------------------------------------------------------------------------ -# os400: file(1) magic for IBM OS/400 files -# -# IBM OS/400 (i5/OS) Save file (SAVF) - gerardo.cacciari@gmail.com -# In spite of its quite variable format (due to internal memory page -# length differences between CISC and RISC versions of the OS) the -# SAVF structure hasn't suitable offsets to identify the catalog -# header in the first descriptor where there are some useful infos, -# so we must search in a somewhat large area for a particular string -# that represents the EBCDIC encoding of 'QSRDSSPC' (save/restore -# descriptor space) preceded by a two byte constant. -# -1090 search/7393 \x19\xDB\xD8\xE2\xD9\xC4\xE2\xE2\xD7\xC3 IBM OS/400 save file data ->&212 byte 0x01 \b, created with SAVOBJ ->&212 byte 0x02 \b, created with SAVLIB ->&212 byte 0x07 \b, created with SAVCFG ->&212 byte 0x08 \b, created with SAVSECDTA ->&212 byte 0x0A \b, created with SAVSECDTA ->&212 byte 0x0B \b, created with SAVDLO ->&212 byte 0x0D \b, created with SAVLICPGM ->&212 byte 0x11 \b, created with SAVCHGOBJ ->&213 byte 0x44 \b, at least V5R4 to open ->&213 byte 0x43 \b, at least V5R3 to open ->&213 byte 0x42 \b, at least V5R2 to open ->&213 byte 0x41 \b, at least V5R1 to open ->&213 byte 0x40 \b, at least V4R5 to open ->&213 byte 0x3F \b, at least V4R4 to open ->&213 byte 0x3E \b, at least V4R3 to open ->&213 byte 0x3C \b, at least V4R2 to open ->&213 byte 0x3D \b, at least V4R1M4 to open ->&213 byte 0x3B \b, at least V4R1 to open ->&213 byte 0x3A \b, at least V3R7 to open ->&213 byte 0x35 \b, at least V3R6 to open ->&213 byte 0x36 \b, at least V3R2 to open ->&213 byte 0x34 \b, at least V3R1 to open ->&213 byte 0x31 \b, at least V3R0M5 to open ->&213 byte 0x30 \b, at least V2R3 to open -# -# Copyright (c) 1996 Ignatios Souvatzis. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. All advertising materials mentioning features or use of this software -# must display the following acknowledgement: -# This product includes software developed by Ignatios Souvatzis for -# the NetBSD project. -# 4. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# -# -# OS9/6809 module descriptions: -# -0 beshort 0x87CD OS9/6809 module: -# ->6 byte&0x0f 0x00 non-executable ->6 byte&0x0f 0x01 machine language ->6 byte&0x0f 0x02 BASIC I-code ->6 byte&0x0f 0x03 Pascal P-code ->6 byte&0x0f 0x04 C I-code ->6 byte&0x0f 0x05 COBOL I-code ->6 byte&0x0f 0x06 Fortran I-code -# ->6 byte&0xf0 0x10 program executable ->6 byte&0xf0 0x20 subroutine ->6 byte&0xf0 0x30 multi-module ->6 byte&0xf0 0x40 data module -# ->6 byte&0xf0 0xC0 system module ->6 byte&0xf0 0xD0 file manager ->6 byte&0xf0 0xE0 device driver ->6 byte&0xf0 0xF0 device descriptor -# -# OS9/m68k stuff (to be continued) -# -0 beshort 0x4AFC OS9/68K module: -# -# attr ->0x14 byte&0x80 0x80 re-entrant ->0x14 byte&0x40 0x40 ghost ->0x14 byte&0x20 0x20 system-state -# -# lang: -# ->0x13 byte 1 machine language ->0x13 byte 2 BASIC I-code ->0x13 byte 3 Pascal P-code ->0x13 byte 4 C I-code ->0x13 byte 5 COBOL I-code ->0x13 byte 6 Fortran I-code -# -# -# type: -# ->0x12 byte 1 program executable ->0x12 byte 2 subroutine ->0x12 byte 3 multi-module ->0x12 byte 4 data module ->0x12 byte 11 trap library ->0x12 byte 12 system module ->0x12 byte 13 file manager ->0x12 byte 14 device driver ->0x12 byte 15 device descriptor -# -# Mach magic number info -# -0 long 0xefbe OSF/Rose object -# I386 magic number info -# -0 short 0565 i386 COFF object - -#------------------------------------------------------------------------------ -# palm: file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks -# -# Brian Lalor <blalor@hcirisc.cs.binghamton.edu> - -# appl -60 belong 0x6170706c PalmOS application ->0 string >\0 "%s" -# TEXt -60 belong 0x54455874 AportisDoc file ->0 string >\0 "%s" -# HACK -60 belong 0x4841434b HackMaster hack ->0 string >\0 "%s" - -# Variety of PalmOS document types -# Michael-John Turner <mj@debian.org> -# Thanks to Hasan Umit Ezerce <humit@tr-net.net.tr> for his DocType -60 string BVokBDIC BDicty PalmOS document ->0 string >\0 "%s" -60 string DB99DBOS DB PalmOS document ->0 string >\0 "%s" -60 string vIMGView FireViewer/ImageViewer PalmOS document ->0 string >\0 "%s" -60 string PmDBPmDB HanDBase PalmOS document ->0 string >\0 "%s" -60 string InfoINDB InfoView PalmOS document ->0 string >\0 "%s" -60 string ToGoToGo iSilo PalmOS document ->0 string >\0 "%s" -60 string JfDbJBas JFile PalmOS document ->0 string >\0 "%s" -60 string JfDbJFil JFile Pro PalmOS document ->0 string >\0 "%s" -60 string DATALSdb List PalmOS document ->0 string >\0 "%s" -60 string Mdb1Mdb1 MobileDB PalmOS document ->0 string >\0 "%s" -60 string PNRdPPrs PeanutPress PalmOS document ->0 string >\0 "%s" -60 string DataPlkr Plucker PalmOS document ->0 string >\0 "%s" -60 string DataSprd QuickSheet PalmOS document ->0 string >\0 "%s" -60 string SM01SMem SuperMemo PalmOS document ->0 string >\0 "%s" -60 string TEXtTlDc TealDoc PalmOS document ->0 string >\0 "%s" -60 string InfoTlIf TealInfo PalmOS document ->0 string >\0 "%s" -60 string DataTlMl TealMeal PalmOS document ->0 string >\0 "%s" -60 string DataTlPt TealPaint PalmOS document ->0 string >\0 "%s" -60 string dataTDBP ThinkDB PalmOS document ->0 string >\0 "%s" -60 string TdatTide Tides PalmOS document ->0 string >\0 "%s" -60 string ToRaTRPW TomeRaider PalmOS document ->0 string >\0 "%s" - -# A GutenPalm zTXT etext for use on Palm Pilots (http://gutenpalm.sf.net) -# For version 1.xx zTXTs, outputs version and numbers of bookmarks and -# annotations. -# For other versions, just outputs version. -# -60 string zTXT A GutenPalm zTXT e-book ->0 string >\0 "%s" ->(0x4E.L) byte 0 ->>(0x4E.L+1) byte x (v0.%02d) ->(0x4E.L) byte 1 ->>(0x4E.L+1) byte x (v1.%02d) ->>>(0x4E.L+10) beshort >0 ->>>>(0x4E.L+10) beshort <2 - 1 bookmark ->>>>(0x4E.L+10) beshort >1 - %d bookmarks ->>>(0x4E.L+14) beshort >0 ->>>>(0x4E.L+14) beshort <2 - 1 annotation ->>>>(0x4E.L+14) beshort >1 - %d annotations ->(0x4E.L) byte >1 (v%d. ->>(0x4E.L+1) byte x %02d) - -# Palm OS .prc file types -60 string libr Palm OS dynamic library data ->0 string >\0 "%s" -60 string ptch Palm OS operating system patch data ->0 string >\0 "%s" - -# Mobipocket (www.mobipocket.com), donated by Carl Witty -60 string BOOKMOBI Mobipocket E-book ->0 string >\0 "%s" - -#------------------------------------------------------------------------------ -# -# Parix COFF executables -# From: Ignatios Souvatzis <ignatios@cs.uni-bonn.de> -# -0 beshort&0xfff 0xACE PARIX ->0 byte&0xf0 0x80 T800 ->0 byte&0xf0 0x90 T9000 ->19 byte&0x02 0x02 executable ->19 byte&0x02 0x00 object ->19 byte&0x0c 0x00 not stripped - -#------------------------------------------------------------------------------ -# pbm: file(1) magic for Portable Bitmap files -# -# XXX - byte order? -# -0 short 0x2a17 "compact bitmap" format (Poskanzer) -#------------------------------------------------------------------------------ -# pdf: file(1) magic for Portable Document Format -# - -0 string %PDF- PDF document -!:mime application/pdf ->5 byte x \b, version %c ->7 byte x \b.%c - -# From: Nick Schmalenberger <nick@schmalenberger.us> -# Forms Data Format -0 string %FDF- FDF document ->5 byte x \b, version %c ->7 byte x \b.%c - -#------------------------------------------------------------------------------ -# pdp: file(1) magic for PDP-11 executable/object and APL workspace -# -0 lelong 0101555 PDP-11 single precision APL workspace -0 lelong 0101554 PDP-11 double precision APL workspace -# -# PDP-11 a.out -# -0 leshort 0407 PDP-11 executable ->8 leshort >0 not stripped ->15 byte >0 - version %ld - -0 leshort 0401 PDP-11 UNIX/RT ldp -0 leshort 0405 PDP-11 old overlay - -0 leshort 0410 PDP-11 pure executable ->8 leshort >0 not stripped ->15 byte >0 - version %ld - -0 leshort 0411 PDP-11 separate I&D executable ->8 leshort >0 not stripped ->15 byte >0 - version %ld - -0 leshort 0437 PDP-11 kernel overlay - -# These last three are derived from 2.11BSD file(1) -0 leshort 0413 PDP-11 demand-paged pure executable ->8 leshort >0 not stripped - -0 leshort 0430 PDP-11 overlaid pure executable ->8 leshort >0 not stripped - -0 leshort 0431 PDP-11 overlaid separate executable ->8 leshort >0 not stripped -#------------------------------------------------------------------------------ -# perl: file(1) magic for Larry Wall's perl language. -# -# The `eval' lines recognizes an outrageously clever hack. -# Keith Waclena <keith@cerberus.uchicago.edu> -# Send additions to <perl5-porters@perl.org> -0 search/1/b #!\ /bin/perl Perl script text executable -!:mime text/x-perl -0 search/1 eval\ "exec\ /bin/perl Perl script text -!:mime text/x-perl -0 search/1/b #!\ /usr/bin/perl Perl script text executable -!:mime text/x-perl -0 search/1 eval\ "exec\ /usr/bin/perl Perl script text -!:mime text/x-perl -0 search/1/b #!\ /usr/local/bin/perl Perl script text executable -!:mime text/x-perl -0 search/1 eval\ "exec\ /usr/local/bin/perl Perl script text -!:mime text/x-perl -0 search/1 eval\ '(exit\ $?0)'\ &&\ eval\ 'exec Perl script text -!:mime text/x-perl - - -# by Dmitry V. Levin and Alexey Tourbin -# check the first line -0 search/1 package ->0 regex \^package[\ \t]+[0-9A-Za-z_:]+\ *; Perl5 module source text -# not 'p', check other lines -0 search/1 !p ->0 regex \^package[\ \t]+[0-9A-Za-z_:]+\ *; ->>0 regex \^1\ *;|\^(use|sub|my)\ .*[(;{=] Perl5 module source text - - - -# Perl POD documents -# From: Tom Hukins <tom@eborcom.com> -0 search/1/B \=pod\n Perl POD document text -0 search/1/B \n\=pod\n Perl POD document text -0 search/1/B \=head1\ Perl POD document text -0 search/1/B \n\=head1\ Perl POD document text -0 search/1/B \=head2\ Perl POD document text -0 search/1/B \n\=head2\ Perl POD document text - -# Perl Storable data files. -0 string perl-store perl Storable (v0.6) data ->4 byte >0 (net-order %d) ->>4 byte &01 (network-ordered) ->>4 byte =3 (major 1) ->>4 byte =2 (major 1) - -0 string pst0 perl Storable (v0.7) data ->4 byte >0 ->>4 byte &01 (network-ordered) ->>4 byte =5 (major 2) ->>4 byte =4 (major 2) ->>5 byte >0 (minor %d) - -#------------------------------------------------------------------------------ -# pgp: file(1) magic for Pretty Good Privacy -# see http://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html -# -0 beshort 0x9900 PGP key public ring -!:mime application/x-pgp-keyring -0 beshort 0x9501 PGP key security ring -!:mime application/x-pgp-keyring -0 beshort 0x9500 PGP key security ring -!:mime application/x-pgp-keyring -0 beshort 0xa600 PGP encrypted data -#!:mime application/pgp-encrypted -#0 string -----BEGIN\040PGP text/PGP armored data -!:mime text/PGP # encoding: armored data -#>15 string PUBLIC\040KEY\040BLOCK- public key block -#>15 string MESSAGE- message -#>15 string SIGNED\040MESSAGE- signed message -#>15 string PGP\040SIGNATURE- signature - -2 string ---BEGIN\ PGP\ PUBLIC\ KEY\ BLOCK- PGP public key block -!:mime application/pgp-keys -0 string -----BEGIN\040PGP\40MESSAGE- PGP message -!:mime application/pgp -0 string -----BEGIN\040PGP\40SIGNATURE- PGP signature -!:mime application/pgp-signature - -#------------------------------------------------------------------------------ -# pkgadd: file(1) magic for SysV R4 PKG Datastreams -# -0 string #\ PaCkAgE\ DaTaStReAm pkg Datastream (SVR4) -!:mime application/x-svr4-package - -#------------------------------------------------------------------------------ -# plan9: file(1) magic for AT&T Bell Labs' Plan 9 executables -# From: "Stefan A. Haubenthal" <polluks@web.de> -# -0 belong 0x00000107 Plan 9 executable, Motorola 68k -0 belong 0x000001EB Plan 9 executable, Intel 386 -0 belong 0x00000247 Plan 9 executable, Intel 960 -0 belong 0x000002AB Plan 9 executable, SPARC -0 belong 0x00000407 Plan 9 executable, MIPS R3000 -0 belong 0x0000048B Plan 9 executable, AT&T DSP 3210 -0 belong 0x00000517 Plan 9 executable, MIPS R4000 BE -0 belong 0x000005AB Plan 9 executable, AMD 29000 -0 belong 0x00000647 Plan 9 executable, ARM 7-something -0 belong 0x000006EB Plan 9 executable, PowerPC -0 belong 0x00000797 Plan 9 executable, MIPS R4000 LE -0 belong 0x0000084B Plan 9 executable, DEC Alpha - -#------------------------------------------------------------------------------ -# plus5: file(1) magic for Plus Five's UNIX MUMPS -# -# XXX - byte order? Paging Hokey.... -# -0 short 0x259 mumps avl global ->2 byte >0 (V%d) ->6 byte >0 with %d byte name ->7 byte >0 and %d byte data cells -0 short 0x25a mumps blt global ->2 byte >0 (V%d) ->8 short >0 - %d byte blocks ->15 byte 0x00 - P/D format ->15 byte 0x01 - P/K/D format ->15 byte 0x02 - K/D format ->15 byte >0x02 - Bad Flags - -#------------------------------------------------------------------------------ -# printer: file(1) magic for printer-formatted files -# - -# PostScript, updated by Daniel Quinlan (quinlan@yggdrasil.com) -0 string %! PostScript document text -!:mime application/postscript -!:apple ASPSTEXT ->2 string PS-Adobe- conforming ->>11 string >\0 DSC level %.3s ->>>15 string EPS \b, type %s ->>>15 string Query \b, type %s ->>>15 string ExitServer \b, type %s ->>>15 search/1000 %%LanguageLevel:\ ->>>>&0 string >\0 \b, Level %s -# Some PCs have the annoying habit of adding a ^D as a document separator -0 string \004%! PostScript document text -!:mime application/postscript -!:apple ASPSTEXT ->3 string PS-Adobe- conforming ->>12 string >\0 DSC level %.3s ->>>16 string EPS \b, type %s ->>>16 string Query \b, type %s ->>>16 string ExitServer \b, type %s ->>>16 search/1000 %%LanguageLevel:\ ->>>>&0 string >\0 \b, Level %s -0 string \033%-12345X%!PS PostScript document - -# DOS EPS Binary File Header -# From: Ed Sznyter <ews@Black.Market.NET> -0 belong 0xC5D0D3C6 DOS EPS Binary File ->4 long >0 Postscript starts at byte %d ->>8 long >0 length %d ->>>12 long >0 Metafile starts at byte %d ->>>>16 long >0 length %d ->>>20 long >0 TIFF starts at byte %d ->>>>24 long >0 length %d - -# Summary: Adobe's PostScript Printer Description File -# Extension: .ppd -# Reference: http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf, Section 3.8 -# Submitted by: Yves Arrouye <arrouye@marin.fdn.fr> -# -0 string *PPD-Adobe:\x20 PPD file ->&0 string x \b, version %s - -# HP Printer Job Language -0 string \033%-12345X@PJL HP Printer Job Language data -# HP Printer Job Language -# The header found on Win95 HP plot files is the "Silliest Thing possible" -# (TM) -# Every driver puts the language at some random position, with random case -# (LANGUAGE and Language) -# For example the LaserJet 5L driver puts the "PJL ENTER LANGUAGE" in line 10 -# From: Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de> -# -0 string \033%-12345X@PJL HP Printer Job Language data ->&0 string >\0 %s ->>&0 string >\0 %s ->>>&0 string >\0 %s ->>>>&0 string >\0 %s -#>15 string \ ENTER\ LANGUAGE\ = -#>31 string PostScript PostScript - -# HP Printer Control Language, Daniel Quinlan (quinlan@yggdrasil.com) -0 string \033E\033 HP PCL printer data ->3 string \&l0A - default page size ->3 string \&l1A - US executive page size ->3 string \&l2A - US letter page size ->3 string \&l3A - US legal page size ->3 string \&l26A - A4 page size ->3 string \&l80A - Monarch envelope size ->3 string \&l81A - No. 10 envelope size ->3 string \&l90A - Intl. DL envelope size ->3 string \&l91A - Intl. C5 envelope size ->3 string \&l100A - Intl. B5 envelope size ->3 string \&l-81A - No. 10 envelope size (landscape) ->3 string \&l-90A - Intl. DL envelope size (landscape) - -# IMAGEN printer-ready files: -0 string @document( Imagen printer -# this only works if "language xxx" is first item in Imagen header. ->10 string language\ impress (imPRESS data) ->10 string language\ daisy (daisywheel text) ->10 string language\ diablo (daisywheel text) ->10 string language\ printer (line printer emulation) ->10 string language\ tektronix (Tektronix 4014 emulation) -# Add any other languages that your Imagen uses - remember -# to keep the word `text' if the file is human-readable. -# [GRR 950115: missing "postscript" or "ultrascript" (whatever it was called)] -# -# Now magic for IMAGEN font files... -0 string Rast RST-format raster font data ->45 string >0 face %s -# From Jukka Ukkonen -0 string \033[K\002\0\0\017\033(a\001\0\001\033(g Canon Bubble Jet BJC formatted data - -# From <mike@flyn.org> -# These are the /etc/magic entries to decode data sent to an Epson printer. -0 string \x1B\x40\x1B\x28\x52\x08\x00\x00REMOTE1P Epson Stylus Color 460 data - - -#------------------------------------------------------------------------------ -# zenographics: file(1) magic for Zenographics ZjStream printer data -# Rick Richardson rickr@mn.rr.com -0 string JZJZ ->0x12 string ZZ Zenographics ZjStream printer data (big-endian) -0 string ZJZJ ->0x12 string ZZ Zenographics ZjStream printer data (little-endian) - - -#------------------------------------------------------------------------------ -# Oak Technologies printer stream -# Rick Richardson <rickr@mn.rr.com> -0 string OAK ->0x07 byte 0 ->0x0b byte 0 Oak Technologies printer stream - -# This would otherwise be recognized as PostScript - nick@debian.org -0 string %!VMF SunClock's Vector Map Format data - -#------------------------------------------------------------------------------ -# HP LaserJet 1000 series downloadable firmware file -0 string \xbe\xefABCDEFGH HP LaserJet 1000 series downloadable firmware - -# From: Paolo <oopla@users.sf.net> -# Epson ESC/Page, ESC/PageColor -0 string \x1b\x01@EJL Epson ESC/Page language printer data - -#------------------------------------------------------------------------------ -# project: file(1) magic for Project management -# -# Magic strings for ftnchek project files. Alexander Mai -0 string FTNCHEK_\ P project file for ftnchek ->10 string 1 version 2.7 ->10 string 2 version 2.8 to 2.10 ->10 string 3 version 2.11 or later - -#------------------------------------------------------------------------------ -# psdbms: file(1) magic for psdatabase -# -0 belong&0xff00ffff 0x56000000 ps database ->1 string >\0 version %s ->4 string >\0 from kernel %s -#------------------------------------------------------------------------------ -# psion: file(1) magic for Psion handhelds data -# from: Peter Breitenlohner <peb@mppmu.mpg.de> -# -0 lelong 0x10000037 Psion Series 5 ->4 lelong 0x10000039 font file ->4 lelong 0x1000003A printer driver ->4 lelong 0x1000003B clipboard ->4 lelong 0x10000042 multi-bitmap image ->4 lelong 0x1000006A application information file ->4 lelong 0x1000006D ->>8 lelong 0x1000007D sketch image -!:mime image/x-psion-sketch ->>8 lelong 0x1000007E voice note ->>8 lelong 0x1000007F word file ->>8 lelong 0x10000085 OPL program ->>8 lelong 0x10000088 sheet file ->>8 lelong 0x100001C4 EasyFax initialisation file ->4 lelong 0x10000073 OPO module ->4 lelong 0x10000074 OPL application ->4 lelong 0x1000008A exported multi-bitmap image - -0 lelong 0x10000041 Psion Series 5 ROM multi-bitmap image - -0 lelong 0x10000050 Psion Series 5 ->4 lelong 0x1000006D database ->4 lelong 0x100000E4 ini file - -0 lelong 0x10000079 Psion Series 5 binary: ->4 lelong 0x00000000 DLL ->4 lelong 0x10000049 comms hardware library ->4 lelong 0x1000004A comms protocol library ->4 lelong 0x1000005D OPX ->4 lelong 0x1000006C application ->4 lelong 0x1000008D DLL ->4 lelong 0x100000AC logical device driver ->4 lelong 0x100000AD physical device driver ->4 lelong 0x100000E5 file transfer protocol ->4 lelong 0x100000E5 file transfer protocol ->4 lelong 0x10000140 printer definition ->4 lelong 0x10000141 printer definition - -0 lelong 0x1000007A Psion Series 5 executable - -#------------------------------------------------------------------------------ -# pulsar: file(1) magic for Pulsar POP3 daemon binary files -# -# http://pulsar.sourceforge.net -# mailto:rok.papez@lugos.si -# - -0 belong 0x1ee7f11e Pulsar POP3 daemon mailbox cache file. ->4 ubelong x Version: %d. ->8 ubelong x \b%d - - -#------------------------------------------------------------------------------ -# pyramid: file(1) magic for Pyramids -# -# XXX - byte order? -# -0 long 0x50900107 Pyramid 90x family executable -0 long 0x50900108 Pyramid 90x family pure executable ->16 long >0 not stripped -0 long 0x5090010b Pyramid 90x family demand paged pure executable ->16 long >0 not stripped - -#------------------------------------------------------------------------------ -# python: file(1) magic for python -# -# From: David Necas <yeti@physics.muni.cz> -# often the module starts with a multiline string -0 string """ a python script text executable -# MAGIC as specified in Python/import.c (1.5 to 2.3.0a) -# 20121 ( YEAR - 1995 ) + MONTH + DAY (little endian followed by "\r\n" -0 belong 0x994e0d0a python 1.5/1.6 byte-compiled -0 belong 0x87c60d0a python 2.0 byte-compiled -0 belong 0x2aeb0d0a python 2.1 byte-compiled -0 belong 0x2ded0d0a python 2.2 byte-compiled -0 belong 0x3bf20d0a python 2.3 byte-compiled -0 belong 0x6df20d0a python 2.4 byte-compiled -0 belong 0xb3f20d0a python 2.5 byte-compiled -0 belong 0xd1f20d0a python 2.6 byte-compiled - - -0 string/b #!\ /usr/bin/python python script text executable - - -#------------------------------------------------------------------------------ -# file(1) magic for revision control files -# From Hendrik Scholz <hendrik@scholz.net> -0 string /1\ :pserver: cvs password text file - -# Conary changesets -# From: Jonathan Smith <smithj@rpath.com> -0 belong 0xea3f81bb Conary changeset data - -# Type: Git bundles (git-bundle) -# From: Josh Triplett <josh@freedesktop.org> -0 string #\ v2\ git\ bundle\n Git bundle - -# Type: Git pack -# From: Adam Buchbinder <adam.buchbinder@gmail.com> -# The actual magic is 'PACK', but that clashes with Doom/Quake packs. However, -# those have a little-endian offset immediately following the magic 'PACK', -# the first byte of which is never 0, while the first byte of the Git pack -# version, since it's a tiny number stored in big-endian format, is always 0. -0 string PACK\0 Git pack ->4 belong >0 \b, version %d ->>8 belong >0 \b, %d objects - -# Type: Git pack index -# From: Adam Buchbinder <adam.buchbinder@gmail.com> -0 string \377tOc Git pack index ->4 belong =2 \b, version 2 - -# Type: Mercurial bundles -# From: Seo Sanghyeon <tinuviel@sparcs.kaist.ac.kr> -0 string HG10 Mercurial bundle, ->4 string UN uncompressed ->4 string BZ bzip2 compressed - -# Type: Subversion (SVN) dumps -# From: Uwe Zeisberger <zeisberg@informatik.uni-freiburg.de> -0 string SVN-fs-dump-format-version: Subversion dumpfile ->28 string >\0 (version: %s) - -# Type: Bazaar revision bundles and merge requests -# URL: http://www.bazaar-vcs.org/ -# From: Jelmer Vernooij <jelmer@samba.org> -0 string #\ Bazaar\ revision\ bundle\ v Bazaar Bundle -0 string #\ Bazaar\ merge\ directive\ format Bazaar merge directive - -#------------------------------------------------------------------------------ -# riff: file(1) magic for RIFF format -# See -# -# http://www.seanet.com/users/matts/riffmci/riffmci.htm -# -# AVI section extended by Patrik R�dman <patrik+file-magic@iki.fi> -# -0 string RIFF RIFF (little-endian) data -# RIFF Palette format ->8 string PAL \b, palette ->>16 leshort x \b, version %d ->>18 leshort x \b, %d entries -# RIFF Device Independent Bitmap format ->8 string RDIB \b, device-independent bitmap ->>16 string BM ->>>30 leshort 12 \b, OS/2 1.x format ->>>>34 leshort x \b, %d x ->>>>36 leshort x %d ->>>30 leshort 64 \b, OS/2 2.x format ->>>>34 leshort x \b, %d x ->>>>36 leshort x %d ->>>30 leshort 40 \b, Windows 3.x format ->>>>34 lelong x \b, %d x ->>>>38 lelong x %d x ->>>>44 leshort x %d -# RIFF MIDI format ->8 string RMID \b, MIDI -# RIFF Multimedia Movie File format ->8 string RMMP \b, multimedia movie -# RIFF wrapper for MP3 ->8 string RMP3 \b, MPEG Layer 3 audio -# Microsoft WAVE format (*.wav) ->8 string WAVE \b, WAVE audio -!:mime audio/x-wav ->>20 leshort 1 \b, Microsoft PCM ->>>34 leshort >0 \b, %d bit ->>20 leshort 2 \b, Microsoft ADPCM ->>20 leshort 6 \b, ITU G.711 A-law ->>20 leshort 7 \b, ITU G.711 mu-law ->>20 leshort 8 \b, Microsoft DTS ->>20 leshort 17 \b, IMA ADPCM ->>20 leshort 20 \b, ITU G.723 ADPCM (Yamaha) ->>20 leshort 49 \b, GSM 6.10 ->>20 leshort 64 \b, ITU G.721 ADPCM ->>20 leshort 80 \b, MPEG ->>20 leshort 85 \b, MPEG Layer 3 ->>20 leshort 0x2001 \b, DTS ->>22 leshort =1 \b, mono ->>22 leshort =2 \b, stereo ->>22 leshort >2 \b, %d channels ->>24 lelong >0 %d Hz -# Corel Draw Picture ->8 string CDRA \b, Corel Draw Picture -!:mime image/x-coreldraw -# AVI == Audio Video Interleave ->8 string AVI\040 \b, AVI -!:mime video/x-msvideo ->>12 string LIST ->>>20 string hdrlavih ->>>>&36 lelong x \b, %lu x ->>>>&40 lelong x %lu, ->>>>&4 lelong >1000000 <1 fps, ->>>>&4 lelong 1000000 1.00 fps, ->>>>&4 lelong 500000 2.00 fps, ->>>>&4 lelong 333333 3.00 fps, ->>>>&4 lelong 250000 4.00 fps, ->>>>&4 lelong 200000 5.00 fps, ->>>>&4 lelong 166667 6.00 fps, ->>>>&4 lelong 142857 7.00 fps, ->>>>&4 lelong 125000 8.00 fps, ->>>>&4 lelong 111111 9.00 fps, ->>>>&4 lelong 100000 10.00 fps, -# ]9.9,10.1[ ->>>>&4 lelong <101010 ->>>>>&-4 lelong >99010 ->>>>>>&-4 lelong !100000 ~10 fps, ->>>>&4 lelong 83333 12.00 fps, -# ]11.9,12.1[ ->>>>&4 lelong <84034 ->>>>>&-4 lelong >82645 ->>>>>>&-4 lelong !83333 ~12 fps, ->>>>&4 lelong 66667 15.00 fps, -# ]14.9,15.1[ ->>>>&4 lelong <67114 ->>>>>&-4 lelong >66225 ->>>>>>&-4 lelong !66667 ~15 fps, ->>>>&4 lelong 50000 20.00 fps, ->>>>&4 lelong 41708 23.98 fps, ->>>>&4 lelong 41667 24.00 fps, -# ]23.9,24.1[ ->>>>&4 lelong <41841 ->>>>>&-4 lelong >41494 ->>>>>>&-4 lelong !41708 ->>>>>>>&-4 lelong !41667 ~24 fps, ->>>>&4 lelong 40000 25.00 fps, -# ]24.9,25.1[ ->>>>&4 lelong <40161 ->>>>>&-4 lelong >39841 ->>>>>>&-4 lelong !40000 ~25 fps, ->>>>&4 lelong 33367 29.97 fps, ->>>>&4 lelong 33333 30.00 fps, -# ]29.9,30.1[ ->>>>&4 lelong <33445 ->>>>>&-4 lelong >33223 ->>>>>>&-4 lelong !33367 ->>>>>>>&-4 lelong !33333 ~30 fps, ->>>>&4 lelong <32224 >30 fps, -##>>>>&4 lelong x (%lu) -##>>>>&20 lelong x %lu frames, -# Note: The tests below assume that the AVI has 1 or 2 streams, -# "vids" optionally followed by "auds". -# (Should cover 99.9% of all AVIs.) -# assuming avih length = 56 ->>>88 string LIST ->>>>96 string strlstrh ->>>>>108 string vids video: ->>>>>>&0 lelong 0 uncompressed -# skip past vids strh ->>>>>>(104.l+108) string strf ->>>>>>>(104.l+132) lelong 1 RLE 8bpp ->>>>>>>(104.l+132) string/c cvid Cinepak ->>>>>>>(104.l+132) string/c i263 Intel I.263 ->>>>>>>(104.l+132) string/c iv32 Indeo 3.2 ->>>>>>>(104.l+132) string/c iv41 Indeo 4.1 ->>>>>>>(104.l+132) string/c iv50 Indeo 5.0 ->>>>>>>(104.l+132) string/c mp42 Microsoft MPEG-4 v2 ->>>>>>>(104.l+132) string/c mp43 Microsoft MPEG-4 v3 ->>>>>>>(104.l+132) string/c fmp4 FFMpeg MPEG-4 ->>>>>>>(104.l+132) string/c mjpg Motion JPEG ->>>>>>>(104.l+132) string/c div3 DivX 3 ->>>>>>>>112 string/c div3 Low-Motion ->>>>>>>>112 string/c div4 Fast-Motion ->>>>>>>(104.l+132) string/c divx DivX 4 ->>>>>>>(104.l+132) string/c dx50 DivX 5 ->>>>>>>(104.l+132) string/c xvid XviD ->>>>>>>(104.l+132) string/c h264 H.264 ->>>>>>>(104.l+132) string/c wmv3 Windows Media Video 9 ->>>>>>>(104.l+132) string/c h264 X.264 or H.264 ->>>>>>>(104.l+132) lelong 0 -##>>>>>>>(104.l+132) string x (%.4s) -# skip past first (video) LIST ->>>>(92.l+96) string LIST ->>>>>(92.l+104) string strlstrh ->>>>>>(92.l+116) string auds \b, audio: -# auds strh length = 56: ->>>>>>>(92.l+172) string strf ->>>>>>>>(92.l+180) leshort 0x0001 uncompressed PCM ->>>>>>>>(92.l+180) leshort 0x0002 ADPCM ->>>>>>>>(92.l+180) leshort 0x0006 aLaw ->>>>>>>>(92.l+180) leshort 0x0007 uLaw ->>>>>>>>(92.l+180) leshort 0x0050 MPEG-1 Layer 1 or 2 ->>>>>>>>(92.l+180) leshort 0x0055 MPEG-1 Layer 3 ->>>>>>>>(92.l+180) leshort 0x2000 Dolby AC3 ->>>>>>>>(92.l+180) leshort 0x0161 DivX -##>>>>>>>>(92.l+180) leshort x (0x%.4x) ->>>>>>>>(92.l+182) leshort 1 (mono, ->>>>>>>>(92.l+182) leshort 2 (stereo, ->>>>>>>>(92.l+182) leshort >2 (%d channels, ->>>>>>>>(92.l+184) lelong x %d Hz) -# auds strh length = 64: ->>>>>>>(92.l+180) string strf ->>>>>>>>(92.l+188) leshort 0x0001 uncompressed PCM ->>>>>>>>(92.l+188) leshort 0x0002 ADPCM ->>>>>>>>(92.l+188) leshort 0x0055 MPEG-1 Layer 3 ->>>>>>>>(92.l+188) leshort 0x2000 Dolby AC3 ->>>>>>>>(92.l+188) leshort 0x0161 DivX -##>>>>>>>>(92.l+188) leshort x (0x%.4x) ->>>>>>>>(92.l+190) leshort 1 (mono, ->>>>>>>>(92.l+190) leshort 2 (stereo, ->>>>>>>>(92.l+190) leshort >2 (%d channels, ->>>>>>>>(92.l+192) lelong x %d Hz) -# Animated Cursor format ->8 string ACON \b, animated cursor -# SoundFont 2 <mpruett@sgi.com> ->8 string sfbk SoundFont/Bank -# MPEG-1 wrapped in a RIFF, apparently ->8 string CDXA \b, wrapped MPEG-1 (CDXA) ->8 string 4XMV \b, 4X Movie file - -# -# XXX - some of the below may only appear in little-endian form. -# -# Also "MV93" appears to be for one form of Macromedia Director -# files, and "GDMF" appears to be another multimedia format. -# -0 string RIFX RIFF (big-endian) data -# RIFF Palette format ->8 string PAL \b, palette ->>16 beshort x \b, version %d ->>18 beshort x \b, %d entries -# RIFF Device Independent Bitmap format ->8 string RDIB \b, device-independent bitmap ->>16 string BM ->>>30 beshort 12 \b, OS/2 1.x format ->>>>34 beshort x \b, %d x ->>>>36 beshort x %d ->>>30 beshort 64 \b, OS/2 2.x format ->>>>34 beshort x \b, %d x ->>>>36 beshort x %d ->>>30 beshort 40 \b, Windows 3.x format ->>>>34 belong x \b, %d x ->>>>38 belong x %d x ->>>>44 beshort x %d -# RIFF MIDI format ->8 string RMID \b, MIDI -# RIFF Multimedia Movie File format ->8 string RMMP \b, multimedia movie -# Microsoft WAVE format (*.wav) ->8 string WAVE \b, WAVE audio ->>20 leshort 1 \b, Microsoft PCM ->>>34 leshort >0 \b, %d bit ->>22 beshort =1 \b, mono ->>22 beshort =2 \b, stereo ->>22 beshort >2 \b, %d channels ->>24 belong >0 %d Hz -# Corel Draw Picture ->8 string CDRA \b, Corel Draw Picture -# AVI == Audio Video Interleave ->8 string AVI\040 \b, AVI -# Animated Cursor format ->8 string ACON \b, animated cursor -# Notation Interchange File Format (big-endian only) ->8 string NIFF \b, Notation Interchange File Format -# SoundFont 2 <mpruett@sgi.com> ->8 string sfbk SoundFont/Bank -#------------------------------------------------------------------------------ -# -# RPM: file(1) magic for Red Hat Packages Erik Troan (ewt@redhat.com) -# -0 beshort 0xedab ->2 beshort 0xeedb RPM -!:mime application/x-rpm ->>4 byte x v%d ->>6 beshort 0 bin ->>6 beshort 1 src ->>8 beshort 1 i386 ->>8 beshort 2 Alpha ->>8 beshort 3 Sparc ->>8 beshort 4 MIPS ->>8 beshort 5 PowerPC ->>8 beshort 6 68000 ->>8 beshort 7 SGI ->>8 beshort 8 RS6000 ->>8 beshort 9 IA64 ->>8 beshort 10 Sparc64 ->>8 beshort 11 MIPSel ->>8 beshort 12 ARM ->>10 string x %s - -#------------------------------------------------------------------------------ -# rtf: file(1) magic for Rich Text Format (RTF) -# -# Duncan P. Simpson, D.P.Simpson@dcs.warwick.ac.uk -# -0 string {\\rtf Rich Text Format data, -!:mime text/rtf ->5 string 1 version 1, ->>6 string \\ansi ANSI ->>6 string \\mac Apple Macintosh ->>6 string \\pc IBM PC, code page 437 ->>6 string \\pca IBM PS/2, code page 850 ->>6 default x unknown character set ->5 default x unknown version -#------------------------------------------------------------------------------ -# ruby: file(1) magic for Lua scripting language -# URL: http://www.ruby-lang.org/ -# From: Reuben Thomas <rrt@sc3d.org> - -# Ruby scripts -0 search/1/b #!\ /usr/bin/ruby Ruby script text executable -!:mime application/x-ruby -0 search/1/b #!\ /usr/local/bin/ruby Ruby script text executable -!:mime application/x-ruby -0 search/1 #!/usr/bin/env\ ruby Ruby script text executable -!:mime application/x-ruby -0 search/1 #!\ /usr/bin/env\ ruby Ruby script text executable -!:mime application/x-ruby - -#------------------------------------------------------------------------------ -# sc: file(1) magic for "sc" spreadsheet -# -38 string Spreadsheet sc spreadsheet file -!:mime application/x-sc - -#------------------------------------------------------------------------------ -# sccs: file(1) magic for SCCS archives -# -# SCCS archive structure: -# \001h01207 -# \001s 00276/00000/00000 -# \001d D 1.1 87/09/23 08:09:20 ian 1 0 -# \001c date and time created 87/09/23 08:09:20 by ian -# \001e -# \001u -# \001U -# ... etc. -# Now '\001h' happens to be the same as the 3B20's a.out magic number (0550). -# *Sigh*. And these both came from various parts of the USG. -# Maybe we should just switch everybody from SCCS to RCS! -# Further, you can't just say '\001h0', because the five-digit number -# is a checksum that could (presumably) have any leading digit, -# and we don't have regular expression matching yet. -# Hence the following official kludge: -8 string \001s\ SCCS archive data -#------------------------------------------------------------------------------ -# scientific: file(1) magic for scientific formats -# -# From: Joe Krahn <krahn@niehs.nih.gov> - -######################################################## -# CCP4 data and plot files: -0 string MTZ\040 MTZ reflection file - -92 string PLOT%%84 Plot84 plotting file ->52 byte 1 , Little-endian ->55 byte 1 , Big-endian - -######################################################## -# Electron density MAP/MASK formats - -0 string EZD_MAP NEWEZD Electron Density Map -109 string MAP\040( Old EZD Electron Density Map - -0 string/c :-)\040Origin BRIX Electron Density Map ->170 string >0 , Sigma:%.12s -#>4 string >0 %.178s -#>4 addr x %.178s - -7 string 18\040!NTITLE XPLOR ASCII Electron Density Map -9 string \040!NTITLE\012\040REMARK CNS ASCII electron density map - -208 string MAP\040 CCP4 Electron Density Map -# Assumes same stamp for float and double (normal case) ->212 byte 17 \b, Big-endian ->212 byte 34 \b, VAX format ->212 byte 68 \b, Little-endian ->212 byte 85 \b, Convex native - -############################################################ -# X-Ray Area Detector images -0 string R-AXIS4\ \ \ R-Axis Area Detector Image: ->796 lelong <20 Little-endian, IP #%d, ->>768 lelong >0 Size=%dx ->>772 lelong >0 \b%d ->796 belong <20 Big-endian, IP #%d, ->>768 belong >0 Size=%dx ->>772 belong >0 \b%d - -0 string RAXIS\ \ \ \ \ R-Axis Area Detector Image, Win32: ->796 lelong <20 Little-endian, IP #%d, ->>768 lelong >0 Size=%dx ->>772 lelong >0 \b%d ->796 belong <20 Big-endian, IP #%d, ->>768 belong >0 Size=%dx ->>772 belong >0 \b%d - - -1028 string MMX\000\000\000\000\000\000\000\000\000\000\000\000\000 MAR Area Detector Image, ->1072 ulong >1 Compressed(%d), ->1100 ulong >1 %d headers, ->1104 ulong >0 %d x ->1108 ulong >0 %d, ->1120 ulong >0 %d bits/pixel - -# Type: GEDCOM genealogical (family history) data -# From: Giuseppe Bilotta -0 search/1/c 0\ HEAD GEDCOM genealogy text ->&0 search 1\ GEDC ->>&0 search 2\ VERS version ->>>&1 search/1 >\0 %s -# From: Phil Endecott <phil05@chezphil.org> -0 string \000\060\000\040\000\110\000\105\000\101\000\104 GEDCOM data -0 string \060\000\040\000\110\000\105\000\101\000\104\000 GEDCOM data -0 string \376\377\000\060\000\040\000\110\000\105\000\101\000\104 GEDCOM data -0 string \377\376\060\000\040\000\110\000\105\000\101\000\104\000 GEDCOM data -0 search/1 -----BEGIN\ CERTIFICATE------ RFC1421 Security Certificate text -0 search/1 -----BEGIN\ NEW\ CERTIFICATE RFC1421 Security Certificate Signing Request text -0 belong 0xedfeedfe Sun 'jks' Java Keystore File data -# Type: SE Linux policy modules *.pp reference policy -# for Fedora 5 to 9, RHEL5, and Debian Etch and Lenny. -# URL: http://doc.coker.com.au/computers/selinux-magic -# From: Russell Coker <russell@coker.com.au> - -0 lelong 0xf97cff8f SE Linux modular policy ->4 lelong x version %d, ->8 lelong x %d sections, ->>(12.l) lelong 0xf97cff8d ->>>(12.l+27) lelong x mod version %d, ->>>(12.l+31) lelong 0 Not MLS, ->>>(12.l+31) lelong 1 MLS, ->>>(12.l+23) lelong 2 ->>>>(12.l+47) string >\0 module name %s ->>>(12.l+23) lelong 1 base - -1 string policy_module( SE Linux policy module source -2 string policy_module( SE Linux policy module source - -0 string ##\ <summary> SE Linux policy interface source - -#0 search gen_context( SE Linux policy file contexts - -#0 search gen_sens( SE Linux policy MLS constraints source - -#------------------------------------------------------------------------------ -# sendmail: file(1) magic for sendmail config files -# -# XXX - byte order? -# -0 byte 046 Sendmail frozen configuration ->16 string >\0 - version %s -0 short 0x271c Sendmail frozen configuration ->16 string >\0 - version %s - -#------------------------------------------------------------------------------ -# sendmail: file(1) magic for sendmail m4(1) files -# -# From Hendrik Scholz <hendrik@scholz.net> -# i.e. files in /usr/share/sendmail/cf/ -# -0 string divert(-1)\n sendmail m4 text file - - -#------------------------------------------------------------------------------ -# sequent: file(1) magic for Sequent machines -# -# Sequent information updated by Don Dwiggins <atsun!dwiggins>. -# For Sequent's multiprocessor systems (incomplete). -0 lelong 0x00ea BALANCE NS32000 .o ->16 lelong >0 not stripped ->124 lelong >0 version %ld -0 lelong 0x10ea BALANCE NS32000 executable (0 @ 0) ->16 lelong >0 not stripped ->124 lelong >0 version %ld -0 lelong 0x20ea BALANCE NS32000 executable (invalid @ 0) ->16 lelong >0 not stripped ->124 lelong >0 version %ld -0 lelong 0x30ea BALANCE NS32000 standalone executable ->16 lelong >0 not stripped ->124 lelong >0 version %ld -# -# Symmetry information added by Jason Merrill <jason@jarthur.claremont.edu>. -# Symmetry magic nums will not be reached if DOS COM comes before them; -# byte 0xeb is matched before these get a chance. -0 leshort 0x12eb SYMMETRY i386 .o ->16 lelong >0 not stripped ->124 lelong >0 version %ld -0 leshort 0x22eb SYMMETRY i386 executable (0 @ 0) ->16 lelong >0 not stripped ->124 lelong >0 version %ld -0 leshort 0x32eb SYMMETRY i386 executable (invalid @ 0) ->16 lelong >0 not stripped ->124 lelong >0 version %ld -0 leshort 0x42eb SYMMETRY i386 standalone executable ->16 lelong >0 not stripped ->124 lelong >0 version %ld - -#------------------------------------------------------------------------------ -# sgi: file(1) magic for Silicon Graphics applications - -# -# -# Performance Co-Pilot file types -0 string PmNs PCP compiled namespace (V.0) -0 string PmN PCP compiled namespace ->3 string >\0 (V.%1.1s) -#3 lelong 0x84500526 PCP archive -3 belong 0x84500526 PCP archive ->7 byte x (V.%d) -#>20 lelong -2 temporal index -#>20 lelong -1 metadata -#>20 lelong 0 log volume #0 -#>20 lelong >0 log volume #%ld ->20 belong -2 temporal index ->20 belong -1 metadata ->20 belong 0 log volume #0 ->20 belong >0 log volume #%ld ->24 string >\0 host: %s -0 string PCPFolio PCP ->9 string Version: Archive Folio ->18 string >\0 (V.%s) -0 string #pmchart PCP pmchart view ->9 string Version ->17 string >\0 (V%-3.3s) -0 string #kmchart PCP kmchart view ->9 string Version ->17 string >\0 (V.%s) -0 string pmview PCP pmview config ->7 string Version ->15 string >\0 (V%-3.3s) -0 string #pmlogger PCP pmlogger config ->10 string Version ->18 string >\0 (V%1.1s) -0 string #pmdahotproc PCP pmdahotproc config ->13 string Version ->21 string >\0 (V%-3.3s) -0 string PcPh PCP Help ->4 string 1 Index ->4 string 2 Text ->5 string >\0 (V.%1.1s) -0 string #pmieconf-rules PCP pmieconf rules ->16 string >\0 (V.%1.1s) -3 string pmieconf-pmie PCP pmie config ->17 string >\0 (V.%1.1s) - -# SpeedShop data files -0 lelong 0x13130303 SpeedShop data file - -# mdbm files -0 lelong 0x01023962 mdbm file, version 0 (obsolete) -0 string mdbm mdbm file, ->5 byte x version %d, ->6 byte x 2^%d pages, ->7 byte x pagesize 2^%d, ->17 byte x hash %d, ->11 byte x dataformat %d - -# Alias Maya files -0 string //Maya ASCII Alias Maya Ascii File, ->13 string >\0 version %s -8 string MAYAFOR4 Alias Maya Binary File, ->32 string >\0 version %s scene -8 string MayaFOR4 Alias Maya Binary File, ->32 string >\0 version %s scene -8 string CIMG Alias Maya Image File -8 string DEEP Alias Maya Image File -#------------------------------------------------------------------------------ -# Type: SVG Vectorial Graphics -# From: Noel Torres <tecnico@ejerciciosresueltos.com> -0 string \<?xml\ version=" ->15 string >\0 ->>23 search/400 \<svg SVG Scalable Vector Graphics image -!:mime image/svg+xml ->>23 search/400 \<gnc-v2 GnuCash file -!:mime application/x-gnucash - -# Sitemap file -0 string \<?xml\ version=" ->15 string >\0 ->>23 search/400 \<urlset XML Sitemap document text -!:mime application/xml-sitemap - -#------------------------------------------------------------------------------ -# sgml: file(1) magic for Standard Generalized Markup Language -# HyperText Markup Language (HTML) is an SGML document type, -# from Daniel Quinlan (quinlan@yggdrasil.com) -# adapted to string extenstions by Anthon van der Neut <anthon@mnt.org) -0 search/1/cB \<!doctype\ html HTML document text -!:mime text/html -0 search/1/cb \<head HTML document text -!:mime text/html -0 search/1/cb \<title HTML document text -!:mime text/html -0 search/1/cb \<html HTML document text -!:mime text/html - -# Extensible markup language (XML), a subset of SGML -# from Marc Prud'hommeaux (marc@apocalypse.org) -0 search/1/cb \<?xml XML document text -!:mime application/xml -0 string \<?xml\ version\ " XML -!:mime application/xml -0 string \<?xml\ version=" XML -!:mime application/xml ->15 search/1 >\0 %.3s document text ->>23 search/1 \<xsl:stylesheet (XSL stylesheet) ->>24 search/1 \<xsl:stylesheet (XSL stylesheet) -0 string \<?xml\ version=' XML -!:mime application/xml ->15 search/1 >\0 %.3s document text ->>23 search/1 \<xsl:stylesheet (XSL stylesheet) ->>24 search/1 \<xsl:stylesheet (XSL stylesheet) -0 search/1/b \<?xml XML document text -!:mime application/xml -0 search/1/b \<?XML broken XML document text -!:mime application/xml - - -# SGML, mostly from rph@sq -0 search/1/cb \<!doctype exported SGML document text -0 search/1/cb \<!subdoc exported SGML subdocument text -0 search/1/cb \<!-- exported SGML document text - -# Web browser cookie files -# (Mozilla, Galeon, Netscape 4, Konqueror..) -# Ulf Harnhammar <ulfh@update.uu.se> -0 search/1 #\ HTTP\ Cookie\ File Web browser cookie text -0 search/1 #\ Netscape\ HTTP\ Cookie\ File Netscape cookie text -0 search/1 #\ KDE\ Cookie\ File Konqueror cookie text - -#------------------------------------------------------------------------ -# file(1) magic for sharc files -# -# SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by -# FutureGroove Music (dsp@futuregroove.de) - -#------------------------------------------------------------------------ -#0 string Draw RiscOS Drawfile -#0 string PACK RiscOS PackdDir archive - -#------------------------------------------------------------------------ -# SHARC DSP stuff (based on the FGM SHARC DSP SDK) - -#0 string =! Assembler source -#0 string Analog ADi asm listing file -0 string .SYSTEM SHARC architecture file -0 string .system SHARC architecture file - -0 leshort 0x521C SHARC COFF binary ->2 leshort >1 , %hd sections ->>12 lelong >0 , not stripped - -#------------------------------------------------------------------------------ -# sinclair: file(1) sinclair QL - -# additions to /etc/magic by Thomas M. Ott (ThMO) - -# Sinclair QL floppy disk formats (ThMO) -0 string =QL5 QL disk dump data, ->3 string =A 720 KB, ->3 string =B 1.44 MB, ->3 string =C 3.2 MB, ->4 string >\0 label:%.10s - -# Sinclair QL OS dump (ThMO) -# (NOTE: if `file' would be able to use indirect references in a endian format -# differing from the natural host format, this could be written more -# reliably and faster...) -# -# we *can't* lookup QL OS code dumps, because `file' is UNABLE to read more -# than the first 8K of a file... #-( -# -#0 belong =0x30000 -#>49124 belong <47104 -#>>49128 belong <47104 -#>>>49132 belong <47104 -#>>>>49136 belong <47104 QL OS dump data, -#>>>>>49148 string >\0 type %.3s, -#>>>>>49142 string >\0 version %.4s - -# Sinclair QL firmware executables (ThMO) -0 string NqNqNq`\004 QL firmware executable (BCPL) - -# Sinclair QL libraries (was ThMO) -0 beshort 0xFB01 QDOS object ->2 pstring x '%s' - -# Sinclair QL executables (was ThMO) -4 belong 0x4AFB QDOS executable ->9 pstring x '%s' - -# Sinclair QL ROM (ThMO) -0 belong =0x4AFB0001 QL plugin-ROM data, ->9 pstring =\0 un-named ->9 pstring >\0 named: %s -# Type: SiSU Markup Language -# URL: http://www.sisudoc.org/ -# From: Ralph Amissah <ralph.amissah@gmail.com> - -0 regex \^%?[\ \t]*SiSU[\ \t]+insert SiSU text insert ->5 regex [0-9.]+ %s - -0 regex \^%[\ \t]+SiSU[\ \t]+master SiSU text master ->5 regex [0-9.]+ %s - -0 regex \^%?[\ \t]*SiSU[\ \t]+text SiSU text ->5 regex [0-9.]+ %s - -0 regex \^%?[\ \t]*SiSU[\ \t][0-9.]+ SiSU text ->5 regex [0-9.]+ %s - -0 regex \^%*[\ \t]*sisu-[0-9.]+ SiSU text ->5 regex [0-9.]+ %s -#------------------------------------------------------------------------------ -# Sketch Drawings: http://sketch.sourceforge.net/ -# From: Edwin Mons <e@ik.nu> -0 search/1 ##Sketch Sketch document text - -#----------------------------------------------- -# GNU Smalltalk image, starting at version 1.6.2 -# From: catull_us@yahoo.com -# -0 string GSTIm\0\0 GNU SmallTalk -# little-endian ->7 byte&1 =0 LE image version ->>10 byte x %d. ->>9 byte x \b%d. ->>8 byte x \b%d -#>>12 lelong x , data: %ld -#>>16 lelong x , table: %ld -#>>20 lelong x , memory: %ld -# big-endian ->7 byte&1 =1 BE image version ->>8 byte x %d. ->>9 byte x \b%d. ->>10 byte x \b%d -#>>12 belong x , data: %ld -#>>16 belong x , table: %ld -#>>20 belong x , memory: %ld - - - -#------------------------------------------------------------------------------ -# sniffer: file(1) magic for packet capture files -# -# From: guy@alum.mit.edu (Guy Harris) -# - -# -# Microsoft Network Monitor 1.x capture files. -# -0 string RTSS NetMon capture file ->5 byte x - version %d ->4 byte x \b.%d ->6 leshort 0 (Unknown) ->6 leshort 1 (Ethernet) ->6 leshort 2 (Token Ring) ->6 leshort 3 (FDDI) ->6 leshort 4 (ATM) - -# -# Microsoft Network Monitor 2.x capture files. -# -0 string GMBU NetMon capture file ->5 byte x - version %d ->4 byte x \b.%d ->6 leshort 0 (Unknown) ->6 leshort 1 (Ethernet) ->6 leshort 2 (Token Ring) ->6 leshort 3 (FDDI) ->6 leshort 4 (ATM) - -# -# Network General Sniffer capture files. -# Sorry, make that "Network Associates Sniffer capture files." -# Sorry, make that "Network General old DOS Sniffer capture files." -# -0 string TRSNIFF\ data\ \ \ \ \032 Sniffer capture file ->33 byte 2 (compressed) ->23 leshort x - version %d ->25 leshort x \b.%d ->32 byte 0 (Token Ring) ->32 byte 1 (Ethernet) ->32 byte 2 (ARCNET) ->32 byte 3 (StarLAN) ->32 byte 4 (PC Network broadband) ->32 byte 5 (LocalTalk) ->32 byte 6 (Znet) ->32 byte 7 (Internetwork Analyzer) ->32 byte 9 (FDDI) ->32 byte 10 (ATM) - -# -# Cinco Networks NetXRay capture files. -# Sorry, make that "Network General Sniffer Basic capture files." -# Sorry, make that "Network Associates Sniffer Basic capture files." -# Sorry, make that "Network Associates Sniffer Basic, and Windows -# Sniffer Pro", capture files." -# Sorry, make that "Network General Sniffer capture files." -# -0 string XCP\0 NetXRay capture file ->4 string >\0 - version %s ->44 leshort 0 (Ethernet) ->44 leshort 1 (Token Ring) ->44 leshort 2 (FDDI) ->44 leshort 3 (WAN) ->44 leshort 8 (ATM) ->44 leshort 9 (802.11) - -# -# "libpcap" capture files. -# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is -# the main program that uses that format, but there are other programs -# that use "libpcap", or that use the same capture file format.) -# -0 ubelong 0xa1b2c3d4 tcpdump capture file (big-endian) ->4 beshort x - version %d ->6 beshort x \b.%d ->20 belong 0 (No link-layer encapsulation ->20 belong 1 (Ethernet ->20 belong 2 (3Mb Ethernet ->20 belong 3 (AX.25 ->20 belong 4 (ProNET ->20 belong 5 (CHAOS ->20 belong 6 (Token Ring ->20 belong 7 (BSD ARCNET ->20 belong 8 (SLIP ->20 belong 9 (PPP ->20 belong 10 (FDDI ->20 belong 11 (RFC 1483 ATM ->20 belong 12 (raw IP ->20 belong 13 (BSD/OS SLIP ->20 belong 14 (BSD/OS PPP ->20 belong 19 (Linux ATM Classical IP ->20 belong 50 (PPP or Cisco HDLC ->20 belong 51 (PPP-over-Ethernet ->20 belong 99 (Symantec Enterprise Firewall ->20 belong 100 (RFC 1483 ATM ->20 belong 101 (raw IP ->20 belong 102 (BSD/OS SLIP ->20 belong 103 (BSD/OS PPP ->20 belong 104 (BSD/OS Cisco HDLC ->20 belong 105 (802.11 ->20 belong 106 (Linux Classical IP over ATM ->20 belong 107 (Frame Relay ->20 belong 108 (OpenBSD loopback ->20 belong 109 (OpenBSD IPsec encrypted ->20 belong 112 (Cisco HDLC ->20 belong 113 (Linux "cooked" ->20 belong 114 (LocalTalk ->20 belong 117 (OpenBSD PFLOG ->20 belong 119 (802.11 with Prism header ->20 belong 122 (RFC 2625 IP over Fibre Channel ->20 belong 123 (SunATM ->20 belong 127 (802.11 with radiotap header ->20 belong 129 (Linux ARCNET ->20 belong 138 (Apple IP over IEEE 1394 ->20 belong 140 (MTP2 ->20 belong 141 (MTP3 ->20 belong 143 (DOCSIS ->20 belong 144 (IrDA ->20 belong 147 (Private use 0 ->20 belong 148 (Private use 1 ->20 belong 149 (Private use 2 ->20 belong 150 (Private use 3 ->20 belong 151 (Private use 4 ->20 belong 152 (Private use 5 ->20 belong 153 (Private use 6 ->20 belong 154 (Private use 7 ->20 belong 155 (Private use 8 ->20 belong 156 (Private use 9 ->20 belong 157 (Private use 10 ->20 belong 158 (Private use 11 ->20 belong 159 (Private use 12 ->20 belong 160 (Private use 13 ->20 belong 161 (Private use 14 ->20 belong 162 (Private use 15 ->20 belong 163 (802.11 with AVS header ->16 belong x \b, capture length %d) -0 ulelong 0xa1b2c3d4 tcpdump capture file (little-endian) ->4 leshort x - version %d ->6 leshort x \b.%d ->20 lelong 0 (No link-layer encapsulation ->20 lelong 1 (Ethernet ->20 lelong 2 (3Mb Ethernet ->20 lelong 3 (AX.25 ->20 lelong 4 (ProNET ->20 lelong 5 (CHAOS ->20 lelong 6 (Token Ring ->20 lelong 7 (ARCNET ->20 lelong 8 (SLIP ->20 lelong 9 (PPP ->20 lelong 10 (FDDI ->20 lelong 11 (RFC 1483 ATM ->20 lelong 12 (raw IP ->20 lelong 13 (BSD/OS SLIP ->20 lelong 14 (BSD/OS PPP ->20 lelong 19 (Linux ATM Classical IP ->20 lelong 50 (PPP or Cisco HDLC ->20 lelong 51 (PPP-over-Ethernet ->20 lelong 99 (Symantec Enterprise Firewall ->20 lelong 100 (RFC 1483 ATM ->20 lelong 101 (raw IP ->20 lelong 102 (BSD/OS SLIP ->20 lelong 103 (BSD/OS PPP ->20 lelong 104 (BSD/OS Cisco HDLC ->20 lelong 105 (802.11 ->20 lelong 106 (Linux Classical IP over ATM ->20 lelong 107 (Frame Relay ->20 lelong 108 (OpenBSD loopback ->20 lelong 109 (OpenBSD IPsec encrypted ->20 lelong 112 (Cisco HDLC ->20 lelong 113 (Linux "cooked" ->20 lelong 114 (LocalTalk ->20 lelong 117 (OpenBSD PFLOG ->20 lelong 119 (802.11 with Prism header ->20 lelong 122 (RFC 2625 IP over Fibre Channel ->20 lelong 123 (SunATM ->20 lelong 127 (802.11 with radiotap header ->20 lelong 129 (Linux ARCNET ->20 lelong 138 (Apple IP over IEEE 1394 ->20 lelong 140 (MTP2 ->20 lelong 141 (MTP3 ->20 lelong 143 (DOCSIS ->20 lelong 144 (IrDA ->20 lelong 147 (Private use 0 ->20 lelong 148 (Private use 1 ->20 lelong 149 (Private use 2 ->20 lelong 150 (Private use 3 ->20 lelong 151 (Private use 4 ->20 lelong 152 (Private use 5 ->20 lelong 153 (Private use 6 ->20 lelong 154 (Private use 7 ->20 lelong 155 (Private use 8 ->20 lelong 156 (Private use 9 ->20 lelong 157 (Private use 10 ->20 lelong 158 (Private use 11 ->20 lelong 159 (Private use 12 ->20 lelong 160 (Private use 13 ->20 lelong 161 (Private use 14 ->20 lelong 162 (Private use 15 ->20 lelong 163 (802.11 with AVS header ->16 lelong x \b, capture length %d) - -# -# "libpcap"-with-Alexey-Kuznetsov's-patches capture files. -# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is -# the main program that uses that format, but there are other programs -# that use "libpcap", or that use the same capture file format.) -# -0 ubelong 0xa1b2cd34 extended tcpdump capture file (big-endian) ->4 beshort x - version %d ->6 beshort x \b.%d ->20 belong 0 (No link-layer encapsulation ->20 belong 1 (Ethernet ->20 belong 2 (3Mb Ethernet ->20 belong 3 (AX.25 ->20 belong 4 (ProNET ->20 belong 5 (CHAOS ->20 belong 6 (Token Ring ->20 belong 7 (ARCNET ->20 belong 8 (SLIP ->20 belong 9 (PPP ->20 belong 10 (FDDI ->20 belong 11 (RFC 1483 ATM ->20 belong 12 (raw IP ->20 belong 13 (BSD/OS SLIP ->20 belong 14 (BSD/OS PPP ->16 belong x \b, capture length %d) -0 ulelong 0xa1b2cd34 extended tcpdump capture file (little-endian) ->4 leshort x - version %d ->6 leshort x \b.%d ->20 lelong 0 (No link-layer encapsulation ->20 lelong 1 (Ethernet ->20 lelong 2 (3Mb Ethernet ->20 lelong 3 (AX.25 ->20 lelong 4 (ProNET ->20 lelong 5 (CHAOS ->20 lelong 6 (Token Ring ->20 lelong 7 (ARCNET ->20 lelong 8 (SLIP ->20 lelong 9 (PPP ->20 lelong 10 (FDDI ->20 lelong 11 (RFC 1483 ATM ->20 lelong 12 (raw IP ->20 lelong 13 (BSD/OS SLIP ->20 lelong 14 (BSD/OS PPP ->16 lelong x \b, capture length %d) - -# -# AIX "iptrace" capture files. -# -0 string iptrace\ 1.0 "iptrace" capture file -0 string iptrace\ 2.0 "iptrace" capture file - -# -# Novell LANalyzer capture files. -# -0 leshort 0x1001 LANalyzer capture file -0 leshort 0x1007 LANalyzer capture file - -# -# HP-UX "nettl" capture files. -# -0 string \x54\x52\x00\x64\x00 "nettl" capture file - -# -# RADCOM WAN/LAN Analyzer capture files. -# -0 string \x42\xd2\x00\x34\x12\x66\x22\x88 RADCOM WAN/LAN Analyzer capture file - -# -# NetStumbler log files. Not really packets, per se, but about as -# close as you can get. These are log files from NetStumbler, a -# Windows program, that scans for 802.11b networks. -# -0 string NetS NetStumbler log file ->8 lelong x \b, %d stations found - -# -# EtherPeek/AiroPeek "version 9" capture files. -# -0 string \177ver EtherPeek/AiroPeek capture file - -# -# Visual Networks traffic capture files. -# -0 string \x05VNF Visual Networks traffic capture file - -# -# Network Instruments Observer capture files. -# -0 string ObserverPktBuffe Network Instruments Observer capture file - -# -# Files from Accellent Group's 5View products. -# -0 string \xaa\xaa\xaa\xaa 5View capture file -#------------------------------------------------------------------------------ -# softquad: file(1) magic for SoftQuad Publishing Software -# -# Author/Editor and RulesBuilder -# -# XXX - byte order? -# -0 string \<!SQ\ DTD> Compiled SGML rules file ->9 string >\0 Type %s -0 string \<!SQ\ A/E> A/E SGML Document binary ->9 string >\0 Type %s -0 string \<!SQ\ STS> A/E SGML binary styles file ->9 string >\0 Type %s -0 short 0xc0de Compiled PSI (v1) data -0 short 0xc0da Compiled PSI (v2) data ->3 string >\0 (%s) -# Binary sqtroff font/desc files... -0 short 0125252 SoftQuad DESC or font file binary ->2 short >0 - version %d -# Bitmaps... -0 search/1 SQ\ BITMAP1 SoftQuad Raster Format text -#0 string SQ\ BITMAP2 SoftQuad Raster Format data -# sqtroff intermediate language (replacement for ditroff int. lang.) -0 string X\ SoftQuad troff Context intermediate ->2 string 495 for AT&T 495 laser printer ->2 string hp for Hewlett-Packard LaserJet ->2 string impr for IMAGEN imPRESS ->2 string ps for PostScript - -# From: Michael Piefel <piefel@debian.org> -# sqtroff intermediate language (replacement for ditroff int. lang.) -0 string X\ 495 SoftQuad troff Context intermediate for AT&T 495 laser printer -0 string X\ hp SoftQuad troff Context intermediate for HP LaserJet -0 string X\ impr SoftQuad troff Context intermediate for IMAGEN imPRESS -0 string X\ ps SoftQuad troff Context intermediate for PostScript - -#------------------------------------------------------------------------------ -# spec: file(1) magic for SPEC raw results (*.raw, *.rsf) -# -# Cloyce D. Spradling <cloyce@headgear.org> - -0 string spec SPEC ->4 string .cpu CPU ->>8 string <: \b%.4s ->>12 string . raw result text - -17 string version=SPECjbb SPECjbb ->32 string <: \b%.4s ->>37 string <: v%.4s raw result text - -0 string BEGIN\040SPECWEB SPECweb ->13 string <: \b%.2s ->>15 string _SSL \b_SSL ->>>20 string <: v%.4s raw result text ->>16 string <: v%.4s raw result text - -#------------------------------------------------------------------------------ -# spectrum: file(1) magic for Spectrum emulator files. -# -# John Elliott <jce@seasip.demon.co.uk> - -# -# Spectrum +3DOS header -# -0 string PLUS3DOS\032 Spectrum +3 data ->15 byte 0 - BASIC program ->15 byte 1 - number array ->15 byte 2 - character array ->15 byte 3 - memory block ->>16 belong 0x001B0040 (screen) ->15 byte 4 - Tasword document ->15 string TAPEFILE - ZXT tapefile -# -# Tape file. This assumes the .TAP starts with a Spectrum-format header, -# which nearly all will. -# -# Update: Sanity-check string contents to be printable. -# -Adam Buchbinder <adam.buchbinder@gmail.com> -# -0 string \023\000\000 ->4 string >\0 ->>4 string <\177 Spectrum .TAP data "%-10.10s" ->>>3 byte 0 - BASIC program ->>>3 byte 1 - number array ->>>3 byte 2 - character array ->>>3 byte 3 - memory block ->>>>14 belong 0x001B0040 (screen) - -# The following three blocks are from pak21-spectrum@srcf.ucam.org -# TZX tape images -0 string ZXTape!\x1a Spectrum .TZX data ->8 byte x version %d ->9 byte x \b.%d - -# RZX input recording files -0 string RZX! Spectrum .RZX data ->4 byte x version %d ->5 byte x \b.%d - -# Floppy disk images -0 string MV\ -\ CPCEMU\ Disk-Fil Amstrad/Spectrum .DSK data -0 string MV\ -\ CPC\ format\ Dis Amstrad/Spectrum DU54 .DSK data -0 string EXTENDED\ CPC\ DSK\ Fil Amstrad/Spectrum Extended .DSK data -0 string SINCLAIR Spectrum .SCL Betadisk image - -# Hard disk images -0 string RS-IDE\x1a Spectrum .HDF hard disk image ->7 byte x \b, version 0x%02x - -#------------------------------------------------------------------------------ -# sql: file(1) magic for SQL files -# -# From: "Marty Leisner" <mleisner@eng.mc.xerox.com> -# Recognize some MySQL files. -# -0 beshort 0xfe01 MySQL table definition file ->2 byte x Version %d -0 belong&0xffffff00 0xfefe0300 MySQL MISAM index file ->3 byte x Version %d -0 belong&0xffffff00 0xfefe0700 MySQL MISAM compressed data file ->3 byte x Version %d -0 belong&0xffffff00 0xfefe0500 MySQL ISAM index file ->3 byte x Version %d -0 belong&0xffffff00 0xfefe0600 MySQL ISAM compressed data file ->3 byte x Version %d -0 string \376bin MySQL replication log - -#------------------------------------------------------------------------------ -# iRiver H Series database file -# From Ken Guest <ken@linux.ie> -# As observed from iRivNavi.iDB and unencoded firmware -# -0 string iRivDB iRiver Database file ->11 string >\0 Version %s ->39 string iHP-100 [H Series] - -#------------------------------------------------------------------------------ -# SQLite database files -# Ken Guest <ken@linux.ie>, Ty Sarna, Zack Weinberg -# -# Version 1 used GDBM internally; its files cannot be distinguished -# from other GDBM files. -# -# Version 2 used this format: -0 string **\ This\ file\ contains\ an\ SQLite SQLite 2.x database - -# Version 3 of SQLite allows applications to embed their own "user version" -# number in the database. Detect this and distinguish those files. - -0 string SQLite\ format\ 3 ->60 string _MTN Monotone source repository ->60 belong !0 SQLite 3.x database, user version %u ->60 belong 0 SQLite 3.x database -# Type: OpenSSH key files -# From: Nicolas Collignon <tsointsoin@gmail.com> - -0 string SSH\ PRIVATE\ KEY OpenSSH RSA1 private key, ->28 string >\0 version %s - -0 string ssh-dss\ OpenSSH DSA public key -0 string ssh-rsa\ OpenSSH RSA public key -# Type: OpenSSL certificates/key files -# From: Nicolas Collignon <tsointsoin@gmail.com> - -0 string -----BEGIN\ CERTIFICATE----- PEM certificate -0 string -----BEGIN\ CERTIFICATE\ REQ PEM certificate request -0 string -----BEGIN\ RSA\ PRIVATE PEM RSA private key -0 string -----BEGIN\ DSA\ PRIVATE PEM DSA private key - -#------------------------------------------------------------------------------ -# sun: file(1) magic for Sun machines -# -# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x -# releases. (5.x uses ELF.) -# -0 belong&077777777 0600413 sparc demand paged ->0 byte &0x80 ->>20 belong <4096 shared library ->>20 belong =4096 dynamically linked executable ->>20 belong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped - -0 belong&077777777 0600410 sparc pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped - -0 belong&077777777 0600407 sparc ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped - -0 belong&077777777 0400413 mc68020 demand paged ->0 byte &0x80 ->>20 belong <4096 shared library ->>20 belong =4096 dynamically linked executable ->>20 belong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped - -0 belong&077777777 0400410 mc68020 pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped - -0 belong&077777777 0400407 mc68020 ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped - -0 belong&077777777 0200413 mc68010 demand paged ->0 byte &0x80 ->>20 belong <4096 shared library ->>20 belong =4096 dynamically linked executable ->>20 belong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped - -0 belong&077777777 0200410 mc68010 pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped - -0 belong&077777777 0200407 mc68010 ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped - -# reworked these to avoid anything beginning with zero becoming "old sun-2" -0 belong 0407 old sun-2 executable ->16 belong >0 not stripped -0 belong 0410 old sun-2 pure executable ->16 belong >0 not stripped -0 belong 0413 old sun-2 demand paged executable ->16 belong >0 not stripped - -# -# Core files. "SPARC 4.x BCP" means "core file from a SunOS 4.x SPARC -# binary executed in compatibility mode under SunOS 5.x". -# -0 belong 0x080456 SunOS core file ->4 belong 432 (SPARC) ->>132 string >\0 from '%s' ->>116 belong =3 (quit) ->>116 belong =4 (illegal instruction) ->>116 belong =5 (trace trap) ->>116 belong =6 (abort) ->>116 belong =7 (emulator trap) ->>116 belong =8 (arithmetic exception) ->>116 belong =9 (kill) ->>116 belong =10 (bus error) ->>116 belong =11 (segmentation violation) ->>116 belong =12 (bad argument to system call) ->>116 belong =29 (resource lost) ->>120 belong x (T=%dK, ->>124 belong x D=%dK, ->>128 belong x S=%dK) ->4 belong 826 (68K) ->>128 string >\0 from '%s' ->4 belong 456 (SPARC 4.x BCP) ->>152 string >\0 from '%s' -# Sun SunPC -0 long 0xfa33c08e SunPC 4.0 Hard Disk -0 string #SUNPC_CONFIG SunPC 4.0 Properties Values -# Sun snoop (see RFC 1761, which describes the capture file format). -# -0 string snoop Snoop capture file ->8 belong >0 - version %ld ->12 belong 0 (IEEE 802.3) ->12 belong 1 (IEEE 802.4) ->12 belong 2 (IEEE 802.5) ->12 belong 3 (IEEE 802.6) ->12 belong 4 (Ethernet) ->12 belong 5 (HDLC) ->12 belong 6 (Character synchronous) ->12 belong 7 (IBM channel-to-channel adapter) ->12 belong 8 (FDDI) ->12 belong 9 (Unknown) - -# Microsoft ICM color profile -36 string acspMSFT Microsoft ICM Color Profile -# Sun KCMS -36 string acsp Kodak Color Management System, ICC Profile - -#--------------------------------------------------------------------------- -# The following entries have been tested by Duncan Laurie <duncan@sun.com> (a -# lead Sun/Cobalt developer) who agrees that they are good and worthy of -# inclusion. - -# Boot ROM images for Sun/Cobalt Linux server appliances -0 string Cobalt\ Networks\ Inc.\nFirmware\ v Paged COBALT boot rom ->38 string x V%.4s - -# New format for Sun/Cobalt boot ROMs is annoying, it stores the version code -# at the very end where file(1) can't get it. -0 string CRfs COBALT boot rom data (Flat boot rom or file system) - - -#------------------------------------------------------------------------ -# sysex: file(1) magic for MIDI sysex files -# -# -0 byte 0xF0 SysEx File - - -# North American Group ->1 byte 0x01 Sequential ->1 byte 0x02 IDP ->1 byte 0x03 OctavePlateau ->1 byte 0x04 Moog ->1 byte 0x05 Passport ->1 byte 0x06 Lexicon ->1 byte 0x07 Kurzweil/Future Retro ->>3 byte 0x77 777 ->>4 byte 0x00 Bank ->>4 byte 0x01 Song ->>5 byte 0x0f 16 ->>5 byte 0x0e 15 ->>5 byte 0x0d 14 ->>5 byte 0x0c 13 ->>5 byte 0x0b 12 ->>5 byte 0x0a 11 ->>5 byte 0x09 10 ->>5 byte 0x08 9 ->>5 byte 0x07 8 ->>5 byte 0x06 7 ->>5 byte 0x05 6 ->>5 byte 0x04 5 ->>5 byte 0x03 4 ->>5 byte 0x02 3 ->>5 byte 0x01 2 ->>5 byte 0x00 1 ->>5 byte 0x10 (ALL) ->>2 byte x \b, Channel %d ->1 byte 0x08 Fender ->1 byte 0x09 Gulbransen ->1 byte 0x0a AKG ->1 byte 0x0b Voyce ->1 byte 0x0c Waveframe ->1 byte 0x0d ADA ->1 byte 0x0e Garfield ->1 byte 0x0f Ensoniq ->1 byte 0x10 Oberheim ->>2 byte 0x06 Matrix 6 series ->>3 byte 0x0A Dump (All) ->>3 byte 0x01 Dump (Bank) ->>4 belong 0x0002040E Matrix 1000 ->>>11 byte <2 User bank %d ->>>11 byte >1 Preset bank %d ->1 byte 0x11 Apple ->1 byte 0x12 GreyMatter ->1 byte 0x14 PalmTree ->1 byte 0x15 JLCooper ->1 byte 0x16 Lowrey ->1 byte 0x17 AdamsSmith ->1 byte 0x18 E-mu ->1 byte 0x19 Harmony ->1 byte 0x1a ART ->1 byte 0x1b Baldwin ->1 byte 0x1c Eventide ->1 byte 0x1d Inventronics ->1 byte 0x1f Clarity - -# European Group ->1 byte 0x21 SIEL ->1 byte 0x22 Synthaxe ->1 byte 0x24 Hohner ->1 byte 0x25 Twister ->1 byte 0x26 Solton ->1 byte 0x27 Jellinghaus ->1 byte 0x28 Southworth ->1 byte 0x29 PPG ->1 byte 0x2a JEN ->1 byte 0x2b SSL ->1 byte 0x2c AudioVertrieb - ->1 byte 0x2f ELKA ->>3 byte 0x09 EK-44 - ->1 byte 0x30 Dynacord ->1 byte 0x31 Jomox ->1 byte 0x33 Clavia ->1 byte 0x39 Soundcraft -# Some Waldorf info from http://Stromeko.Synth.net/Downloads#WaldorfDocs ->1 byte 0x3e Waldorf ->>2 byte 0x00 microWave ->>2 byte 0x0E microwave2 / XT ->>2 byte 0x0F Q / Q+ ->>3 byte =0 (default id) ->>3 byte >0 ( ->>>3 byte <0x7F \bdevice %d) ->>>3 byte =0x7F \bbroadcast id) ->>3 byte 0x7f Microwave I ->>>4 byte 0x00 SNDR (Sound Request) ->>>4 byte 0x10 SNDD (Sound Dump) ->>>4 byte 0x20 SNDP (Sound Parameter Change) ->>>4 byte 0x30 SNDQ (Sound Parameter Inquiry) ->>>4 byte 0x70 BOOT (Sound Reserved) ->>>4 byte 0x01 MULR (Multi Request) ->>>4 byte 0x11 MULD (Multi Dump) ->>>4 byte 0x21 MULP (Multi Parameter Change) ->>>4 byte 0x31 MULQ (Multi Parameter Inquiry) ->>>4 byte 0x71 OS (Multi Reserved) ->>>4 byte 0x02 DRMR (Drum Map Request) ->>>4 byte 0x12 DRMD (Drum Map Dump) ->>>4 byte 0x22 DRMP (Drum Map Parameter Change) ->>>4 byte 0x32 DRMQ (Drum Map Parameter Inquiry) ->>>4 byte 0x72 BIN (Drum Map Reserved) ->>>4 byte 0x03 PATR (Sequencer Pattern Request) ->>>4 byte 0x13 PATD (Sequencer Pattern Dump) ->>>4 byte 0x23 PATP (Sequencer Pattern Parameter Change) ->>>4 byte 0x33 PATQ (Sequencer Pattern Parameter Inquiry) ->>>4 byte 0x73 AFM (Sequencer Pattern Reserved) ->>>4 byte 0x04 GLBR (Global Parameter Request) ->>>4 byte 0x14 GLBD (Global Parameter Dump) ->>>4 byte 0x24 GLBP (Global Parameter Parameter Change) ->>>4 byte 0x34 GLBQ (Global Parameter Parameter Inquiry) ->>>4 byte 0x07 MODR (Mode Parameter Request) ->>>4 byte 0x17 MODD (Mode Parameter Dump) ->>>4 byte 0x27 MODP (Mode Parameter Parameter Change) ->>>4 byte 0x37 MODQ (Mode Parameter Parameter Inquiry) ->>2 byte 0x10 microQ ->>>4 byte 0x00 SNDR (Sound Request) ->>>4 byte 0x10 SNDD (Sound Dump) ->>>4 byte 0x20 SNDP (Sound Parameter Change) ->>>4 byte 0x30 SNDQ (Sound Parameter Inquiry) ->>>4 byte 0x70 (Sound Reserved) ->>>4 byte 0x01 MULR (Multi Request) ->>>4 byte 0x11 MULD (Multi Dump) ->>>4 byte 0x21 MULP (Multi Parameter Change) ->>>4 byte 0x31 MULQ (Multi Parameter Inquiry) ->>>4 byte 0x71 OS (Multi Reserved) ->>>4 byte 0x02 DRMR (Drum Map Request) ->>>4 byte 0x12 DRMD (Drum Map Dump) ->>>4 byte 0x22 DRMP (Drum Map Parameter Change) ->>>4 byte 0x32 DRMQ (Drum Map Parameter Inquiry) ->>>4 byte 0x72 BIN (Drum Map Reserved) ->>>4 byte 0x04 GLBR (Global Parameter Request) ->>>4 byte 0x14 GLBD (Global Parameter Dump) ->>>4 byte 0x24 GLBP (Global Parameter Parameter Change) ->>>4 byte 0x34 GLBQ (Global Parameter Parameter Inquiry) ->>2 byte 0x11 rackAttack ->>>4 byte 0x00 SNDR (Sound Parameter Request) ->>>4 byte 0x10 SNDD (Sound Parameter Dump) ->>>4 byte 0x20 SNDP (Sound Parameter Parameter Change) ->>>4 byte 0x30 SNDQ (Sound Parameter Parameter Inquiry) ->>>4 byte 0x01 PRGR (Program Parameter Request) ->>>4 byte 0x11 PRGD (Program Parameter Dump) ->>>4 byte 0x21 PRGP (Program Parameter Parameter Change) ->>>4 byte 0x31 PRGQ (Program Parameter Parameter Inquiry) ->>>4 byte 0x71 OS (Program Parameter Reserved) ->>>4 byte 0x03 PATR (Pattern Parameter Request) ->>>4 byte 0x13 PATD (Pattern Parameter Dump) ->>>4 byte 0x23 PATP (Pattern Parameter Parameter Change) ->>>4 byte 0x33 PATQ (Pattern Parameter Parameter Inquiry) ->>>4 byte 0x04 GLBR (Global Parameter Request) ->>>4 byte 0x14 GLBD (Global Parameter Dump) ->>>4 byte 0x24 GLBP (Global Parameter Parameter Change) ->>>4 byte 0x34 GLBQ (Global Parameter Parameter Inquiry) ->>>4 byte 0x05 EFXR (FX Parameter Request) ->>>4 byte 0x15 EFXD (FX Parameter Dump) ->>>4 byte 0x25 EFXP (FX Parameter Parameter Change) ->>>4 byte 0x35 EFXQ (FX Parameter Parameter Inquiry) ->>>4 byte 0x07 MODR (Mode Command Request) ->>>4 byte 0x17 MODD (Mode Command Dump) ->>>4 byte 0x27 MODP (Mode Command Parameter Change) ->>>4 byte 0x37 MODQ (Mode Command Parameter Inquiry) ->>2 byte 0x03 Wave ->>>4 byte 0x00 SBPR (Soundprogram) ->>>4 byte 0x01 SAPR (Performance) ->>>4 byte 0x02 SWAVE (Wave) ->>>4 byte 0x03 SWTBL (Wave control table) ->>>4 byte 0x04 SVT (Velocity Curve) ->>>4 byte 0x05 STT (Tuning Table) ->>>4 byte 0x06 SGLB (Global Parameters) ->>>4 byte 0x07 SARRMAP (Performance Program Change Map) ->>>4 byte 0x08 SBPRMAP (Sound Program Change Map) ->>>4 byte 0x09 SBPRPAR (Sound Parameter) ->>>4 byte 0x0A SARRPAR (Performance Parameter) ->>>4 byte 0x0B SINSPAR (Instrument/External Parameter) ->>>4 byte 0x0F SBULK (Bulk Switch on/off) - -# Japanese Group ->1 byte 0x40 Kawai ->>3 byte 0x20 K1 ->>3 byte 0x22 K4 - ->1 byte 0x41 Roland ->>3 byte 0x14 D-50 ->>3 byte 0x2b U-220 ->>3 byte 0x02 TR-707 - ->1 byte 0x42 Korg ->>3 byte 0x19 M1 - ->1 byte 0x43 Yamaha ->1 byte 0x44 Casio ->1 byte 0x46 Kamiya ->1 byte 0x47 Akai ->1 byte 0x48 Victor ->1 byte 0x49 Mesosha ->1 byte 0x4b Fujitsu ->1 byte 0x4c Sony ->1 byte 0x4e Teac ->1 byte 0x50 Matsushita ->1 byte 0x51 Fostex ->1 byte 0x52 Zoom ->1 byte 0x54 Matsushita ->1 byte 0x57 Acoustic tech. lab. - ->1 belong&0xffffff00 0x00007400 Ta Horng ->1 belong&0xffffff00 0x00007500 e-Tek ->1 belong&0xffffff00 0x00007600 E-Voice ->1 belong&0xffffff00 0x00007700 Midisoft ->1 belong&0xffffff00 0x00007800 Q-Sound ->1 belong&0xffffff00 0x00007900 Westrex ->1 belong&0xffffff00 0x00007a00 Nvidia* ->1 belong&0xffffff00 0x00007b00 ESS ->1 belong&0xffffff00 0x00007c00 Mediatrix ->1 belong&0xffffff00 0x00007d00 Brooktree ->1 belong&0xffffff00 0x00007e00 Otari ->1 belong&0xffffff00 0x00007f00 Key Electronics ->1 belong&0xffffff00 0x00010000 Shure ->1 belong&0xffffff00 0x00010100 AuraSound ->1 belong&0xffffff00 0x00010200 Crystal ->1 belong&0xffffff00 0x00010300 Rockwell ->1 belong&0xffffff00 0x00010400 Silicon Graphics ->1 belong&0xffffff00 0x00010500 Midiman ->1 belong&0xffffff00 0x00010600 PreSonus ->1 belong&0xffffff00 0x00010800 Topaz ->1 belong&0xffffff00 0x00010900 Cast Lightning ->1 belong&0xffffff00 0x00010a00 Microsoft ->1 belong&0xffffff00 0x00010b00 Sonic Foundry ->1 belong&0xffffff00 0x00010c00 Line 6 ->1 belong&0xffffff00 0x00010d00 Beatnik Inc. ->1 belong&0xffffff00 0x00010e00 Van Koerving ->1 belong&0xffffff00 0x00010f00 Altech Systems ->1 belong&0xffffff00 0x00011000 S & S Research ->1 belong&0xffffff00 0x00011100 VLSI Technology ->1 belong&0xffffff00 0x00011200 Chromatic ->1 belong&0xffffff00 0x00011300 Sapphire ->1 belong&0xffffff00 0x00011400 IDRC ->1 belong&0xffffff00 0x00011500 Justonic Tuning ->1 belong&0xffffff00 0x00011600 TorComp ->1 belong&0xffffff00 0x00011700 Newtek Inc. ->1 belong&0xffffff00 0x00011800 Sound Sculpture ->1 belong&0xffffff00 0x00011900 Walker Technical ->1 belong&0xffffff00 0x00011a00 Digital Harmony ->1 belong&0xffffff00 0x00011b00 InVision ->1 belong&0xffffff00 0x00011c00 T-Square ->1 belong&0xffffff00 0x00011d00 Nemesys ->1 belong&0xffffff00 0x00011e00 DBX ->1 belong&0xffffff00 0x00011f00 Syndyne ->1 belong&0xffffff00 0x00012000 Bitheadz ->1 belong&0xffffff00 0x00012100 Cakewalk ->1 belong&0xffffff00 0x00012200 Staccato ->1 belong&0xffffff00 0x00012300 National Semicon. ->1 belong&0xffffff00 0x00012400 Boom Theory ->1 belong&0xffffff00 0x00012500 Virtual DSP Corp ->1 belong&0xffffff00 0x00012600 Antares ->1 belong&0xffffff00 0x00012700 Angel Software ->1 belong&0xffffff00 0x00012800 St Louis Music ->1 belong&0xffffff00 0x00012900 Lyrrus dba G-VOX ->1 belong&0xffffff00 0x00012a00 Ashley Audio ->1 belong&0xffffff00 0x00012b00 Vari-Lite ->1 belong&0xffffff00 0x00012c00 Summit Audio ->1 belong&0xffffff00 0x00012d00 Aureal Semicon. ->1 belong&0xffffff00 0x00012e00 SeaSound ->1 belong&0xffffff00 0x00012f00 U.S. Robotics ->1 belong&0xffffff00 0x00013000 Aurisis ->1 belong&0xffffff00 0x00013100 Nearfield Multimedia ->1 belong&0xffffff00 0x00013200 FM7 Inc. ->1 belong&0xffffff00 0x00013300 Swivel Systems ->1 belong&0xffffff00 0x00013400 Hyperactive ->1 belong&0xffffff00 0x00013500 MidiLite ->1 belong&0xffffff00 0x00013600 Radical ->1 belong&0xffffff00 0x00013700 Roger Linn ->1 belong&0xffffff00 0x00013800 Helicon ->1 belong&0xffffff00 0x00013900 Event ->1 belong&0xffffff00 0x00013a00 Sonic Network ->1 belong&0xffffff00 0x00013b00 Realtime Music ->1 belong&0xffffff00 0x00013c00 Apogee Digital - ->1 belong&0xffffff00 0x00202b00 Medeli Electronics ->1 belong&0xffffff00 0x00202c00 Charlie Lab ->1 belong&0xffffff00 0x00202d00 Blue Chip Music ->1 belong&0xffffff00 0x00202e00 BEE OH Corp ->1 belong&0xffffff00 0x00202f00 LG Semicon America ->1 belong&0xffffff00 0x00203000 TESI ->1 belong&0xffffff00 0x00203100 EMAGIC ->1 belong&0xffffff00 0x00203200 Behringer ->1 belong&0xffffff00 0x00203300 Access Music ->1 belong&0xffffff00 0x00203400 Synoptic ->1 belong&0xffffff00 0x00203500 Hanmesoft Corp ->1 belong&0xffffff00 0x00203600 Terratec ->1 belong&0xffffff00 0x00203700 Proel SpA ->1 belong&0xffffff00 0x00203800 IBK MIDI ->1 belong&0xffffff00 0x00203900 IRCAM ->1 belong&0xffffff00 0x00203a00 Propellerhead Software ->1 belong&0xffffff00 0x00203b00 Red Sound Systems ->1 belong&0xffffff00 0x00203c00 Electron ESI AB ->1 belong&0xffffff00 0x00203d00 Sintefex Audio ->1 belong&0xffffff00 0x00203e00 Music and More ->1 belong&0xffffff00 0x00203f00 Amsaro ->1 belong&0xffffff00 0x00204000 CDS Advanced Technology ->1 belong&0xffffff00 0x00204100 Touched by Sound ->1 belong&0xffffff00 0x00204200 DSP Arts ->1 belong&0xffffff00 0x00204300 Phil Rees Music ->1 belong&0xffffff00 0x00204400 Stamer Musikanlagen GmbH ->1 belong&0xffffff00 0x00204500 Soundart ->1 belong&0xffffff00 0x00204600 C-Mexx Software ->1 belong&0xffffff00 0x00204700 Klavis Tech. ->1 belong&0xffffff00 0x00204800 Noteheads AB - -0 string T707 Roland TR-707 Data -#------------------------------------------------------------------------------ -# teapot: file(1) magic for "teapot" spreadsheet -# -0 string #!teapot\012xdr teapot work sheet (XDR format) - -#------------------------------------------------------------------------------ -# terminfo: file(1) magic for terminfo -# -# XXX - byte order for screen images? -# -0 string \032\001 Compiled terminfo entry -0 short 0433 Curses screen image -0 short 0434 Curses screen image -#------------------------------------------------------------------------------ -# tex: file(1) magic for TeX files -# -# XXX - needs byte-endian stuff (big-endian and little-endian DVI?) -# -# From <conklin@talisman.kaleida.com> - -# Although we may know the offset of certain text fields in TeX DVI -# and font files, we can't use them reliably because they are not -# zero terminated. [but we do anyway, christos] -0 string \367\002 TeX DVI file -!:mime application/x-dvi ->16 string >\0 (%s) -0 string \367\203 TeX generic font data -0 string \367\131 TeX packed font data ->3 string >\0 (%s) -0 string \367\312 TeX virtual font data -0 search/1 This\ is\ TeX, TeX transcript text -0 search/1 This\ is\ METAFONT, METAFONT transcript text - -# There is no way to detect TeX Font Metric (*.tfm) files without -# breaking them apart and reading the data. The following patterns -# match most *.tfm files generated by METAFONT or afm2tfm. -2 string \000\021 TeX font metric data -!:mime application/x-tex-tfm ->33 string >\0 (%s) -2 string \000\022 TeX font metric data -!:mime application/x-tex-tfm ->33 string >\0 (%s) - -# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com) -0 search/1 \\input\ texinfo Texinfo source text -!:mime text/x-texinfo -0 search/1 This\ is\ Info\ file GNU Info text -!:mime text/x-info - -# TeX documents, from Daniel Quinlan (quinlan@yggdrasil.com) -0 search/400 \\input TeX document text -!:mime text/x-tex -0 search/400 \\section LaTeX document text -!:mime text/x-tex -0 search/400 \\setlength LaTeX document text -!:mime text/x-tex -0 search/400 \\documentstyle LaTeX document text -!:mime text/x-tex -0 search/400 \\chapter LaTeX document text -!:mime text/x-tex -0 search/400 \\documentclass LaTeX 2e document text -!:mime text/x-tex -0 search/400 \\relax LaTeX auxiliary file -!:mime text/x-tex -0 search/400 \\contentsline LaTeX table of contents -!:mime text/x-tex -0 search/400 %\ -*-latex-*- LaTeX document text -!:mime text/x-tex - -# Tex document, from Hendrik Scholz <hendrik@scholz.net> -0 search/1 \\ifx TeX document text - -# Index and glossary files -0 search/400 \\indexentry LaTeX raw index file -0 search/400 \\begin{theindex} LaTeX sorted index -0 search/400 \\glossaryentry LaTeX raw glossary -0 search/400 \\begin{theglossary} LaTeX sorted glossary -0 search/400 This\ is\ makeindex Makeindex log file - -# End of TeX - -#------------------------------------------------------------------------------ -# file(1) magic for BibTex text files -# From Hendrik Scholz <hendrik@scholz.net> - -0 search/1/c @article{ BibTeX text file -0 search/1/c @book{ BibTeX text file -0 search/1/c @inbook{ BibTeX text file -0 search/1/c @incollection{ BibTeX text file -0 search/1/c @inproceedings{ BibTeX text file -0 search/1/c @manual{ BibTeX text file -0 search/1/c @misc{ BibTeX text file -0 search/1/c @preamble{ BibTeX text file -0 search/1/c @phdthesis{ BibTeX text file -0 search/1/c @techreport{ BibTeX text file -0 search/1/c @unpublished{ BibTeX text file - -73 search/1 %%%\ \ BibTeX-file{ BibTex text file (with full header) - -73 search/1 %%%\ \ @BibTeX-style-file{ BibTeX style text file (with full header) - -0 search/1 %\ BibTeX\ standard\ bibliography\ BibTeX standard bibliography style text file - -0 search/1 %\ BibTeX\ ` BibTeX custom bibliography style text file - -0 search/1 @c\ @mapfile{ TeX font aliases text file -#------------------------------------------------------------------------------ -# file(1) magic for tgif(1) files -# From Hendrik Scholz <hendrik@scholz.net> - -0 string %TGIF\ x Tgif file version %s - -# ------------------------------------------------------------------------ -# ti-8x: file(1) magic for the TI-8x and TI-9x Graphing Calculators. -# -# From: Ryan McGuire (rmcguire@freenet.columbus.oh.us). -# -# Update: Romain Lievin (roms@lpg.ticalc.org). -# -# NOTE: This list is not complete. -# Files for the TI-80 and TI-81 are pretty rare. I'm not going to put the -# program/group magic numbers in here because I cannot find any. -0 string **TI80** TI-80 Graphing Calculator File. -0 string **TI81** TI-81 Graphing Calculator File. -# -# Magic Numbers for the TI-73 -# -0 string **TI73** TI-73 Graphing Calculator ->0x00003B byte 0x00 (real number) ->0x00003B byte 0x01 (list) ->0x00003B byte 0x02 (matrix) ->0x00003B byte 0x03 (equation) ->0x00003B byte 0x04 (string) ->0x00003B byte 0x05 (program) ->0x00003B byte 0x06 (assembly program) ->0x00003B byte 0x07 (picture) ->0x00003B byte 0x08 (gdb) ->0x00003B byte 0x0C (complex number) ->0x00003B byte 0x0F (window settings) ->0x00003B byte 0x10 (zoom) ->0x00003B byte 0x11 (table setup) ->0x00003B byte 0x13 (backup) - -# Magic Numbers for the TI-82 -# -0 string **TI82** TI-82 Graphing Calculator ->0x00003B byte 0x00 (real) ->0x00003B byte 0x01 (list) ->0x00003B byte 0x02 (matrix) ->0x00003B byte 0x03 (Y-variable) ->0x00003B byte 0x05 (program) ->0x00003B byte 0x06 (protected prgm) ->0x00003B byte 0x07 (picture) ->0x00003B byte 0x08 (gdb) ->0x00003B byte 0x0B (window settings) ->0x00003B byte 0x0C (window settings) ->0x00003B byte 0x0D (table setup) ->0x00003B byte 0x0E (screenshot) ->0x00003B byte 0x0F (backup) -# -# Magic Numbers for the TI-83 -# -0 string **TI83** TI-83 Graphing Calculator ->0x00003B byte 0x00 (real) ->0x00003B byte 0x01 (list) ->0x00003B byte 0x02 (matrix) ->0x00003B byte 0x03 (Y-variable) ->0x00003B byte 0x04 (string) ->0x00003B byte 0x05 (program) ->0x00003B byte 0x06 (protected prgm) ->0x00003B byte 0x07 (picture) ->0x00003B byte 0x08 (gdb) ->0x00003B byte 0x0B (window settings) ->0x00003B byte 0x0C (window settings) ->0x00003B byte 0x0D (table setup) ->0x00003B byte 0x0E (screenshot) ->0x00003B byte 0x13 (backup) -# -# Magic Numbers for the TI-83+ -# -0 string **TI83F* TI-83+ Graphing Calculator ->0x00003B byte 0x00 (real number) ->0x00003B byte 0x01 (list) ->0x00003B byte 0x02 (matrix) ->0x00003B byte 0x03 (equation) ->0x00003B byte 0x04 (string) ->0x00003B byte 0x05 (program) ->0x00003B byte 0x06 (assembly program) ->0x00003B byte 0x07 (picture) ->0x00003B byte 0x08 (gdb) ->0x00003B byte 0x0C (complex number) ->0x00003B byte 0x0F (window settings) ->0x00003B byte 0x10 (zoom) ->0x00003B byte 0x11 (table setup) ->0x00003B byte 0x13 (backup) ->0x00003B byte 0x15 (application variable) ->0x00003B byte 0x17 (group of variable) - -# -# Magic Numbers for the TI-85 -# -0 string **TI85** TI-85 Graphing Calculator ->0x00003B byte 0x00 (real number) ->0x00003B byte 0x01 (complex number) ->0x00003B byte 0x02 (real vector) ->0x00003B byte 0x03 (complex vector) ->0x00003B byte 0x04 (real list) ->0x00003B byte 0x05 (complex list) ->0x00003B byte 0x06 (real matrix) ->0x00003B byte 0x07 (complex matrix) ->0x00003B byte 0x08 (real constant) ->0x00003B byte 0x09 (complex constant) ->0x00003B byte 0x0A (equation) ->0x00003B byte 0x0C (string) ->0x00003B byte 0x0D (function GDB) ->0x00003B byte 0x0E (polar GDB) ->0x00003B byte 0x0F (parametric GDB) ->0x00003B byte 0x10 (diffeq GDB) ->0x00003B byte 0x11 (picture) ->0x00003B byte 0x12 (program) ->0x00003B byte 0x13 (range) ->0x00003B byte 0x17 (window settings) ->0x00003B byte 0x18 (window settings) ->0x00003B byte 0x19 (window settings) ->0x00003B byte 0x1A (window settings) ->0x00003B byte 0x1B (zoom) ->0x00003B byte 0x1D (backup) ->0x00003B byte 0x1E (unknown) ->0x00003B byte 0x2A (equation) ->0x000032 string ZS4 - ZShell Version 4 File. ->0x000032 string ZS3 - ZShell Version 3 File. -# -# Magic Numbers for the TI-86 -# -0 string **TI86** TI-86 Graphing Calculator ->0x00003B byte 0x00 (real number) ->0x00003B byte 0x01 (complex number) ->0x00003B byte 0x02 (real vector) ->0x00003B byte 0x03 (complex vector) ->0x00003B byte 0x04 (real list) ->0x00003B byte 0x05 (complex list) ->0x00003B byte 0x06 (real matrix) ->0x00003B byte 0x07 (complex matrix) ->0x00003B byte 0x08 (real constant) ->0x00003B byte 0x09 (complex constant) ->0x00003B byte 0x0A (equation) ->0x00003B byte 0x0C (string) ->0x00003B byte 0x0D (function GDB) ->0x00003B byte 0x0E (polar GDB) ->0x00003B byte 0x0F (parametric GDB) ->0x00003B byte 0x10 (diffeq GDB) ->0x00003B byte 0x11 (picture) ->0x00003B byte 0x12 (program) ->0x00003B byte 0x13 (range) ->0x00003B byte 0x17 (window settings) ->0x00003B byte 0x18 (window settings) ->0x00003B byte 0x19 (window settings) ->0x00003B byte 0x1A (window settings) ->0x00003B byte 0x1B (zoom) ->0x00003B byte 0x1D (backup) ->0x00003B byte 0x1E (unknown) ->0x00003B byte 0x2A (equation) -# -# Magic Numbers for the TI-89 -# -0 string **TI89** TI-89 Graphing Calculator ->0x000048 byte 0x00 (expression) ->0x000048 byte 0x04 (list) ->0x000048 byte 0x06 (matrix) ->0x000048 byte 0x0A (data) ->0x000048 byte 0x0B (text) ->0x000048 byte 0x0C (string) ->0x000048 byte 0x0D (graphic data base) ->0x000048 byte 0x0E (figure) ->0x000048 byte 0x10 (picture) ->0x000048 byte 0x12 (program) ->0x000048 byte 0x13 (function) ->0x000048 byte 0x14 (macro) ->0x000048 byte 0x1C (zipped) ->0x000048 byte 0x21 (assembler) -# -# Magic Numbers for the TI-92 -# -0 string **TI92** TI-92 Graphing Calculator ->0x000048 byte 0x00 (expression) ->0x000048 byte 0x04 (list) ->0x000048 byte 0x06 (matrix) ->0x000048 byte 0x0A (data) ->0x000048 byte 0x0B (text) ->0x000048 byte 0x0C (string) ->0x000048 byte 0x0D (graphic data base) ->0x000048 byte 0x0E (figure) ->0x000048 byte 0x10 (picture) ->0x000048 byte 0x12 (program) ->0x000048 byte 0x13 (function) ->0x000048 byte 0x14 (macro) ->0x000048 byte 0x1D (backup) -# -# Magic Numbers for the TI-92+/V200 -# -0 string **TI92P* TI-92+/V200 Graphing Calculator ->0x000048 byte 0x00 (expression) ->0x000048 byte 0x04 (list) ->0x000048 byte 0x06 (matrix) ->0x000048 byte 0x0A (data) ->0x000048 byte 0x0B (text) ->0x000048 byte 0x0C (string) ->0x000048 byte 0x0D (graphic data base) ->0x000048 byte 0x0E (figure) ->0x000048 byte 0x10 (picture) ->0x000048 byte 0x12 (program) ->0x000048 byte 0x13 (function) ->0x000048 byte 0x14 (macro) ->0x000048 byte 0x1C (zipped) ->0x000048 byte 0x21 (assembler) -# -# Magic Numbers for the TI-73/83+/89/92+/V200 FLASH upgrades -# -0x0000016 string Advanced TI-XX Graphing Calculator (FLASH) -0 string **TIFL** TI-XX Graphing Calculator (FLASH) ->8 byte >0 - Revision %d ->>9 byte x \b.%d, ->12 byte >0 Revision date %02x ->>13 byte x \b/%02x ->>14 beshort x \b/%04x, ->17 string >/0 name: '%s', ->48 byte 0x74 device: TI-73, ->48 byte 0x73 device: TI-83+, ->48 byte 0x98 device: TI-89, ->48 byte 0x88 device: TI-92+, ->49 byte 0x23 type: OS upgrade, ->49 byte 0x24 type: application, ->49 byte 0x25 type: certificate, ->49 byte 0x3e type: license, ->74 lelong >0 size: %ld bytes - -# VTi & TiEmu skins (TI Graphing Calculators). -# From: Romain Lievin (roms@lpg.ticalc.org). -# Magic Numbers for the VTi skins -0 string VTI Virtual TI skin ->3 string v - Version ->>4 byte >0 \b %c ->>6 byte x \b.%c -# Magic Numbers for the TiEmu skins -0 string TiEmu TiEmu skin ->6 string v - Version ->>7 byte >0 \b %c ->>9 byte x \b.%c ->>10 byte x \b%c - -#------------------------------------------------------------------------------ -# timezone: file(1) magic for timezone data -# -# from Daniel Quinlan (quinlan@yggdrasil.com) -# this should work on Linux, SunOS, and maybe others -# Added new official magic number for recent versions of the Olson code -0 string TZif timezone data ->4 byte 0 \b, old version ->4 byte >0 \b, version %c ->20 belong 0 \b, no gmt time flags ->20 belong 1 \b, 1 gmt time flag ->20 belong >1 \b, %d gmt time flags ->24 belong 0 \b, no std time flags ->20 belong 1 \b, 1 std time flag ->24 belong >1 \b, %d std time flags ->28 belong 0 \b, no leap seconds ->28 belong 1 \b, 1 leap second ->28 belong >1 \b, %d leap seconds ->32 belong 0 \b, no transition times ->32 belong 1 \b, 1 transition time ->32 belong >1 \b, %d transition times ->36 belong 0 \b, no abbreviation chars ->36 belong 1 \b, 1 abbreviation char ->36 belong >1 \b, %d abbreviation chars -0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0 old timezone data -0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0 old timezone data -0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0 old timezone data -0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0 old timezone data -0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0 old timezone data -0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0 old timezone data -#------------------------------------------------------------------------------ -# troff: file(1) magic for *roff -# -# updated by Daniel Quinlan (quinlan@yggdrasil.com) - -# troff input -0 search/1 .\\" troff or preprocessor input text -!:mime text/troff -0 search/1 '\\" troff or preprocessor input text -!:mime text/troff -0 search/1 '.\\" troff or preprocessor input text -!:mime text/troff -0 search/1 \\" troff or preprocessor input text -!:mime text/troff -0 search/1 ''' troff or preprocessor input text -!:mime text/troff -0 regex/20 \^\\.[A-Za-z0-9][A-Za-z0-9][\ \t] troff or preprocessor input text -!:mime text/troff -0 regex/20 \^\\.[A-Za-z0-9][A-Za-z0-9]$ troff or preprocessor input text -!:mime text/troff - -# ditroff intermediate output text -0 search/1 x\ T ditroff output text ->4 search/1 cat for the C/A/T phototypesetter ->4 search/1 ps for PostScript ->4 search/1 dvi for DVI ->4 search/1 ascii for ASCII ->4 search/1 lj4 for LaserJet 4 ->4 search/1 latin1 for ISO 8859-1 (Latin 1) ->4 search/1 X75 for xditview at 75dpi ->>7 search/1 -12 (12pt) ->4 search/1 X100 for xditview at 100dpi ->>8 search/1 -12 (12pt) - -# output data formats -0 string \100\357 very old (C/A/T) troff output data -# -#------------------------------------------------------------------------------ -# tuxedo: file(1) magic for BEA TUXEDO data files -# -# from Ian Springer <ispringer@hotmail.com> -# -0 string \0\0\1\236\0\0\0\0\0\0\0\0\0\0\0\0 BEA TUXEDO DES mask data - -#------------------------------------------------------------------------------ -# typeset: file(1) magic for other typesetting -# -0 string Interpress/Xerox Xerox InterPress data ->16 string / (version ->>17 string >\0 %s) -#--------------------------------------------------------------------------- -# Unicode: BOM prefixed text files - Adrian Havill <havill@turbolinux.co.jp> -# GRR: These types should be recognised in file_ascmagic so these -# encodings can be treated by text patterns. -# Missing types are already dealt with internally. -# -0 string +/v8 Unicode text, UTF-7 -0 string +/v9 Unicode text, UTF-7 -0 string +/v+ Unicode text, UTF-7 -0 string +/v/ Unicode text, UTF-7 -0 string \335\163\146\163 Unicode text, UTF-8-EBCDIC -0 string \000\000\376\377 Unicode text, UTF-32, big-endian -0 string \377\376\000\000 Unicode text, UTF-32, little-endian -0 string \016\376\377 Unicode text, SCSU (Standard Compression Scheme for Unicode) - -#------------------------------------------------------------------------------ -# unknown: file(1) magic for unknown machines -# -# XXX - this probably should be pruned, as it'll match PDP-11 and -# VAX image formats. -# -# 0x107 is 0407; 0x108 is 0410; both are PDP-11 (executable and pure, -# respectively). -# -# 0x109 is 0411; that's PDP-11 split I&D, but the PDP-11 version doesn't -# have the "version %ld", which may be a bogus COFFism (I don't think -# there ever was COFF for the PDP-11). -# -# 0x10B is 0413; that's VAX demand-paged, but this is a short, not a -# long, as it would be on a VAX. -# -# 0x10C is 0414 and 0x10E is 416; those *are* unknown. -# -0 short 0x107 unknown machine executable ->8 short >0 not stripped ->15 byte >0 - version %ld -0 short 0x108 unknown pure executable ->8 short >0 not stripped ->15 byte >0 - version %ld -0 short 0x109 PDP-11 separate I&D ->8 short >0 not stripped ->15 byte >0 - version %ld -0 short 0x10b unknown pure executable ->8 short >0 not stripped ->15 byte >0 - version %ld -0 long 0x10c unknown demand paged pure executable ->16 long >0 not stripped -0 long 0x10e unknown readable demand paged pure executable -#------------------------------------------------------------------------------ -# uuencode: file(1) magic for ASCII-encoded files -# - -# GRR: the first line of xxencoded files is identical to that in uuencoded -# files, but the first character in most subsequent lines is 'h' instead of -# 'M'. (xxencoding uses lowercase letters in place of most of uuencode's -# punctuation and survives BITNET gateways better.) If regular expressions -# were supported, this entry could possibly be split into two with -# "begin\040\.\*\012M" or "begin\040\.\*\012h" (where \. and \* are REs). -0 search/1 begin\ uuencoded or xxencoded text - -# btoa(1) is an alternative to uuencode that requires less space. -0 search/1 xbtoa\ Begin btoa'd text - -# ship(1) is another, much cooler alternative to uuencode. -# Greg Roelofs, newt@uchicago.edu -0 search/1 $\012ship ship'd binary text - -# bencode(8) is used to encode compressed news batches (Bnews/Cnews only?) -# Greg Roelofs, newt@uchicago.edu -0 search/1 Decode\ the\ following\ with\ bdeco bencoded News text - -# BinHex is the Macintosh ASCII-encoded file format (see also "apple") -# Daniel Quinlan, quinlan@yggdrasil.com -11 search/1 must\ be\ converted\ with\ BinHex BinHex binary text ->41 search/1 x \b, version %.3s - -# GRR: handle BASE64 - -#------------------------------------------------------------------------------ -# varied.out: file(1) magic for various USG systems -# -# Herewith many of the object file formats used by USG systems. -# Most have been moved to files for a particular processor, -# and deleted if they duplicate other entries. -# -0 short 0610 Perkin-Elmer executable -# AMD 29K -0 beshort 0572 amd 29k coff noprebar executable -0 beshort 01572 amd 29k coff prebar executable -0 beshort 0160007 amd 29k coff archive -# Cray -6 beshort 0407 unicos (cray) executable -# Ultrix 4.3 -596 string \130\337\377\377 Ultrix core file ->600 string >\0 from '%s' -# BeOS and MAcOS PEF executables -# From: hplus@zilker.net (Jon Watte) -0 string Joy!peffpwpc header for PowerPC PEF executable -# -# ava assembler/linker Uros Platise <uros.platise@ijs.si> -0 string avaobj AVR assembler object code ->7 string >\0 version '%s' -# gnu gmon magic From: Eugen Dedu <dedu@ese-metz.fr> -0 string gmon GNU prof performance data ->4 long x - version %ld -# From: Dave Pearson <davep@davep.org> -# Harbour <URL:http://www.harbour-project.org/> HRB files. -0 string \xc0HRB Harbour HRB file ->4 short x version %d - -# From: Alex Beregszaszi <alex@fsn.hu> -# 0 string exec BugOS executable -# 0 string pack BugOS archive - -# From: Jason Spence <jspence@lightconsulting.com> -# Generated by the "examples" in STM's ST40 devkit, and derived code. -0 lelong 0x13a9f17e ST40 component image format ->4 string >\0 \b, name '%s' - -#------------------------------------------------------------------------------ -# varied.script: file(1) magic for various interpreter scripts - -0 string #!\ / a ->3 string >\0 %s script text executable -0 string #!\t/ a ->3 string >\0 %s script text executable -0 string #!/ a ->2 string >\0 %s script text executable -0 string #!\ script text executable ->3 string >\0 for %s - -# From: arno <arenevier@fdn.fr> -# mozilla xpconnect typelib -# see http://www.mozilla.org/scriptable/typelib_file.html -0 string XPCOM\nTypeLib\r\n\032 XPConnect Typelib ->0x10 byte x version %d ->>0x11 byte x \b.%d - -#------------------------------------------------------------------------------ -# vax: file(1) magic for VAX executable/object and APL workspace -# -0 lelong 0101557 VAX single precision APL workspace -0 lelong 0101556 VAX double precision APL workspace - -# -# VAX a.out (32V, BSD) -# -0 lelong 0407 VAX executable ->16 lelong >0 not stripped - -0 lelong 0410 VAX pure executable ->16 lelong >0 not stripped - -0 lelong 0413 VAX demand paged pure executable ->16 lelong >0 not stripped - -0 lelong 0420 VAX demand paged (first page unmapped) pure executable ->16 lelong >0 not stripped - -# -# VAX COFF -# -# The `versions' should be un-commented if they work for you. -# (Was the problem just one of endianness?) -# -0 leshort 0570 VAX COFF executable ->12 lelong >0 not stripped ->22 leshort >0 - version %ld -0 leshort 0575 VAX COFF pure executable ->12 lelong >0 not stripped ->22 leshort >0 - version %ld - -#------------------------------------------------------------------------------ -# vicar: file(1) magic for VICAR files. -# -# From: Ossama Othman <othman@astrosun.tn.cornell.edu -# VICAR is JPL's in-house spacecraft image processing program -# VICAR image -0 string LBLSIZE= VICAR image data ->32 string BYTE \b, 8 bits = VAX byte ->32 string HALF \b, 16 bits = VAX word = Fortran INTEGER*2 ->32 string FULL \b, 32 bits = VAX longword = Fortran INTEGER*4 ->32 string REAL \b, 32 bits = VAX longword = Fortran REAL*4 ->32 string DOUB \b, 64 bits = VAX quadword = Fortran REAL*8 ->32 string COMPLEX \b, 64 bits = VAX quadword = Fortran COMPLEX*8 -# VICAR label file -43 string SFDU_LABEL VICAR label file -#------------------------------------------------------------------------------ -# Virtutech Compressed Random Access File Format -# -# From <gustav@virtutech.com> -0 string \211\277\036\203 Virtutech CRAFF ->4 belong x v%d ->20 belong 0 uncompressed ->20 belong 1 bzipp2ed ->20 belong 2 gzipped ->24 belong 0 not clean - -#------------------------------------------------------------------------------ -# visx: file(1) magic for Visx format files -# -0 short 0x5555 VISX image file ->2 byte 0 (zero) ->2 byte 1 (unsigned char) ->2 byte 2 (short integer) ->2 byte 3 (float 32) ->2 byte 4 (float 64) ->2 byte 5 (signed char) ->2 byte 6 (bit-plane) ->2 byte 7 (classes) ->2 byte 8 (statistics) ->2 byte 10 (ascii text) ->2 byte 15 (image segments) ->2 byte 100 (image set) ->2 byte 101 (unsigned char vector) ->2 byte 102 (short integer vector) ->2 byte 103 (float 32 vector) ->2 byte 104 (float 64 vector) ->2 byte 105 (signed char vector) ->2 byte 106 (bit plane vector) ->2 byte 121 (feature vector) ->2 byte 122 (feature vector library) ->2 byte 124 (chain code) ->2 byte 126 (bit vector) ->2 byte 130 (graph) ->2 byte 131 (adjacency graph) ->2 byte 132 (adjacency graph library) ->2 string .VISIX (ascii text) - -#------------------------------------------------------------------------------ -# vms: file(1) magic for VMS executables (experimental) -# -# VMS .exe formats, both VAX and AXP (Greg Roelofs, newt@uchicago.edu) - -# GRR 950122: I'm just guessing on these, based on inspection of the headers -# of three executables each for Alpha and VAX architectures. The VAX files -# all had headers similar to this: -# -# 00000 b0 00 30 00 44 00 60 00 00 00 00 00 30 32 30 35 ..0.D.`.....0205 -# 00010 01 01 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 ................ -# -0 string \xb0\0\x30\0 VMS VAX executable ->44032 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption -# -# The AXP files all looked like this, except that the byte at offset 0x22 -# was 06 in some of them and 07 in others: -# -# 00000 03 00 00 00 00 00 00 00 ec 02 00 00 10 01 00 00 ................ -# 00010 68 00 00 00 98 00 00 00 b8 00 00 00 00 00 00 00 h............... -# 00020 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ -# 00030 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ -# 00040 00 00 00 00 ff ff ff ff ff ff ff ff 02 00 00 00 ................ -# -0 belong 0x03000000 VMS Alpha executable ->75264 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption - -# ----------------------------------------------------------- -# VMware specific files (deducted from version 1.1 and log file entries) -# Anthon van der Neut (anthon@mnt.org) -0 belong 0x4d52564e VMware nvram - -#------------------------------------------------------------------------------ -# vorbis: file(1) magic for Ogg/Vorbis files -# -# From Felix von Leitner <leitner@fefe.de> -# Extended by Beni Cherniavsky <cben@crosswinds.net> -# Further extended by Greg Wooledge <greg@wooledge.org> -# -# Most (everything but the number of channels and bitrate) is commented -# out with `##' as it's not interesting to the average user. The most -# probable things advanced users would want to uncomment are probably -# the number of comments and the encoder version. -# -# FIXME: The first match has been made a search, so that it can skip -# over prepended ID3 tags. This will work for MIME type detection, but -# won't work for detecting other properties of the file (they all need -# to be made relative to the search). In any case, if the file has ID3 -# tags, the ID3 information will be printed, not the Ogg information, -# so until that's fixed, this doesn't matter. -# FIXME[2]: Disable the above for now, since search assumes text mode. -# -# --- Ogg Framing --- -#0 search/1000 OggS Ogg data -0 string OggS Ogg data -!:mime application/ogg ->4 byte !0 UNKNOWN REVISION %u -##>4 byte 0 revision 0 ->4 byte 0 -##>>14 lelong x (Serial %lX) -# non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net) ->>28 string \x7fFLAC \b, FLAC audio -# non-Vorbis content: Theora ->>28 string \x80theora \b, Theora video -# non-Vorbis content: Kate ->>28 string \x80kate\0\0\0\0 \b, Kate ->>>37 ubyte x v%u ->>>38 ubyte x \b.%u, ->>>40 byte 0 utf8 encoding, ->>>40 byte !0 unknown character encoding, ->>>60 string >\0 language %s, ->>>60 string \0 no language set, ->>>76 string >\0 category %s ->>>76 string \0 no category set -# non-Vorbis content: Skeleton ->>28 string fishead\0 \b, Skeleton ->>>36 short x v%u ->>>40 short x \b.%u -# non-Vorbis content: Speex ->>28 string Speex\ \ \ \b, Speex audio -# non-Vorbis content: OGM ->>28 string \x01video\0\0\0 \b, OGM video ->>>37 string/c div3 (DivX 3) ->>>37 string/c divx (DivX 4) ->>>37 string/c dx50 (DivX 5) ->>>37 string/c xvid (XviD) -# --- First vorbis packet - general header --- ->>28 string \x01vorbis \b, Vorbis audio, ->>>35 lelong !0 UNKNOWN VERSION %lu, -##>>>35 lelong 0 version 0, ->>>35 lelong 0 ->>>>39 ubyte 1 mono, ->>>>39 ubyte 2 stereo, ->>>>39 ubyte >2 %u channels, ->>>>40 lelong x %lu Hz -# Minimal, nominal and maximal bitrates specified when encoding ->>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff \b, -# The above tests if at least one of these is specified: ->>>>>52 lelong !-1 -# Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields -# instead of -1. -# Vorbis 1.0 uses 0 instead of -1. ->>>>>>52 lelong !0 ->>>>>>>52 lelong !-1000 ->>>>>>>>52 lelong x <%lu ->>>>>48 lelong !-1 ->>>>>>48 lelong x ~%lu ->>>>>44 lelong !-1 ->>>>>>44 lelong !-1000 ->>>>>>>44 lelong !0 ->>>>>>>>44 lelong x >%lu ->>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff bps -# -- Second vorbis header packet - the comments -# A kludge to read the vendor string. It's a counted string, not a -# zero-terminated one, so file(1) can't read it in a generic way. -# libVorbis is the only one existing currently, so I detect specifically -# it. The interesting value is the cvs date (8 digits decimal). -# Post-RC1 Ogg files have the second header packet (and thus the version) -# in a different place, so we must use an indirect offset. ->>>(84.b+85) string \x03vorbis ->>>>(84.b+96) string/c Xiphophorus\ libVorbis\ I \b, created by: Xiphophorus libVorbis I ->>>>>(84.b+120) string >00000000 -# Map to beta version numbers: ->>>>>>(84.b+120) string <20000508 (<beta1, prepublic) ->>>>>>(84.b+120) string 20000508 (1.0 beta 1 or beta 2) ->>>>>>(84.b+120) string >20000508 ->>>>>>>(84.b+120) string <20001031 (beta2-3) ->>>>>>(84.b+120) string 20001031 (1.0 beta 3) ->>>>>>(84.b+120) string >20001031 ->>>>>>>(84.b+120) string <20010225 (beta3-4) ->>>>>>(84.b+120) string 20010225 (1.0 beta 4) ->>>>>>(84.b+120) string >20010225 ->>>>>>>(84.b+120) string <20010615 (beta4-RC1) ->>>>>>(84.b+120) string 20010615 (1.0 RC1) ->>>>>>(84.b+120) string 20010813 (1.0 RC2) ->>>>>>(84.b+120) string 20010816 (RC2 - Garf tuned v1) ->>>>>>(84.b+120) string 20011014 (RC2 - Garf tuned v2) ->>>>>>(84.b+120) string 20011217 (1.0 RC3) ->>>>>>(84.b+120) string 20011231 (1.0 RC3) -# Some pre-1.0 CVS snapshots still had "Xiphphorus"... ->>>>>>(84.b+120) string >20011231 (pre-1.0 CVS) -# For the 1.0 release, Xiphophorus is replaced by Xiph.Org ->>>>(84.b+96) string/c Xiph.Org\ libVorbis\ I \b, created by: Xiph.Org libVorbis I ->>>>>(84.b+117) string >00000000 ->>>>>>(84.b+117) string <20020717 (pre-1.0 CVS) ->>>>>>(84.b+117) string 20020717 (1.0) ->>>>>>(84.b+117) string 20030909 (1.0.1) ->>>>>>(84.b+117) string 20040629 (1.1.0 RC1) - -#------------------------------------------------------------------------------ -# VXL: file(1) magic for VXL binary IO data files -# -# from Ian Scott <scottim@sf.net> -# -# VXL is a collection of C++ libraries for Computer Vision. -# See the vsl chapter in the VXL Book for more info -# http://www.isbe.man.ac.uk/public_vxl_doc/books/vxl/book.html -# http:/vxl.sf.net - -2 lelong 0x472b2c4e VXL data file, ->0 leshort >0 schema version no %d - -#------------------------------------------------------------------------------ -# warc: file(1) magic for WARC files - -0 string WARC/ WARC Archive ->5 string x version %.4s -#------------------------------------------------------------------------------ -# weak: file(1) magic for very weak magic entries, disabled by default -# -# These entries are so weak that they might interfere identification of -# other formats. Example include: -# - Only identify for 1 or 2 bytes -# - Match against very wide range of values -# - Match against generic word in some spoken languages (e.g. English) - -# Summary: Computer Graphics Metafile -# Extension: .cgm -#0 beshort&0xffe0 0x0020 binary Computer Graphics Metafile -#0 beshort 0x3020 character Computer Graphics Metafile - -#0 string =!! Bennet Yee's "face" format - -#------------------------------------------------------------------------------ -# windows: file(1) magic for Microsoft Windows -# -# This file is mainly reserved for files where programs -# using them are run almost always on MS Windows 3.x or -# above, or files only used exclusively in Windows OS, -# where there is no better category to allocate for. -# For example, even though WinZIP almost run on Windows -# only, it is better to treat them as "archive" instead. -# For format usable in DOS, such as generic executable -# format, please specify under "msdos" file. -# - - -# Summary: Outlook Express DBX file -# Extension: .dbx -# Created by: Christophe Monniez -0 string \xCF\xAD\x12\xFE MS Outlook Express DBX file ->4 byte =0xC5 \b, message database ->4 byte =0xC6 \b, folder database ->4 byte =0xC7 \b, account information ->4 byte =0x30 \b, offline database - - -# Summary: Windows crash dump -# Extension: .dmp -# Created by: Andreas Schuster (http://computer.forensikblog.de/) -# Reference (1): http://computer.forensikblog.de/en/2008/02/64bit_magic.html -# Modified by (1): Abel Cheung (Avoid match with first 4 bytes only) -0 string PAGE ->4 string DUMP MS Windows 32bit crash dump ->>0x05c byte 0 \b, no PAE ->>0x05c byte 1 \b, PAE ->>0xf88 lelong 1 \b, full dump ->>0xf88 lelong 2 \b, kernel dump ->>0xf88 lelong 3 \b, small dump ->>0x068 lelong x \b, %ld pages ->4 string DU64 MS Windows 64bit crash dump ->>0xf98 lelong 1 \b, full dump ->>0xf98 lelong 2 \b, kernel dump ->>0xf98 lelong 3 \b, small dump ->>0x090 lequad x \b, %lld pages - - -# Summary: Vista Event Log -# Extension: .evtx -# Created by: Andreas Schuster (http://computer.forensikblog.de/) -# Reference (1): http://computer.forensikblog.de/en/2007/05/some_magic.html -0 string ElfFile\0 MS Windows Vista Event Log ->0x2a leshort x \b, %d chunks ->>0x10 lelong x \b (no. %d in use) ->0x18 lelong >1 \b, next record no. %d ->0x18 lelong =1 \b, empty ->0x78 lelong &1 \b, DIRTY ->0x78 lelong &2 \b, FULL - - -# Summary: Windows 3.1 group files -# Extension: .grp -# Created by: unknown -0 string \120\115\103\103 MS Windows 3.1 group files - - -# Summary: Old format help files -# Extension: .hlp -# Created by: Dirk Jagdmann <doj@cubic.org> -0 lelong 0x00035f3f MS Windows 3.x help file - - -# Summary: Hyper terminal -# Extension: .ht -# Created by: unknown -0 string HyperTerminal\ ->15 string 1.0\ --\ HyperTerminal\ data\ file MS Windows HyperTerminal profile - - -# Summary: Windows shortcut -# Extension: .lnk -# Created by: unknown -0 string \114\0\0\0\001\024\002\0\0\0\0\0\300\0\0\0\0\0\0\106 MS Windows shortcut - - -# Summary: Outlook Personal Folders -# Created by: unknown -0 lelong 0x4E444221 Microsoft Outlook email folder ->10 leshort 0x0e (<=2002) ->10 leshort 0x17 (>=2003) - - -# Summary: Windows help cache -# Created by: unknown -0 string \164\146\115\122\012\000\000\000\001\000\000\000 MS Windows help cache - - -# Summary: IE cache file -# Created by: Christophe Monniez -0 string Client\ UrlCache\ MMF Internet Explorer cache file ->20 string >\0 version %s - - -# Summary: Registry files -# Created by: unknown -# Modified by (1): Joerg Jenderek -0 string regf MS Windows registry file, NT/2000 or above -0 string CREG MS Windows 95/98/ME registry file -0 string SHCC3 MS Windows 3.1 registry file - - -# Summary: Windows Registry text -# Extension: .reg -# Submitted by: Abel Cheung <abelcheung@gmail.com> -0 string REGEDIT4\r\n\r\n Windows Registry text (Win95 or above) -0 string Windows\ Registry\ Editor\ ->&0 string Version\ 5.00\r\n\r\n Windows Registry text (Win2K or above) - - -# From: Pal Tamas <folti@balabit.hu> -# Autorun File -0 string/c [autorun]\r\n Microsoft Windows Autorun file. -!:mime application/x-setupscript. -#------------------------------------------------------------------------------ -# wireless-regdb: file(1) magic for CRDA wireless-regdb file format -# -0 string RGDB CRDA wireless regulatory database file ->4 belong 19 (Version 1) -#------------------------------------------------------------------------------ -# wordprocessors: file(1) magic fo word processors. -# -####### PWP file format used on Smith Corona Personal Word Processors: -2 string \040\040\040\040\040\040\040\040\040\040\040ML4D\040'92 Smith Corona PWP ->24 byte 2 \b, single spaced ->24 byte 3 \b, 1.5 spaced ->24 byte 4 \b, double spaced ->25 byte 0x42 \b, letter ->25 byte 0x54 \b, legal ->26 byte 0x46 \b, A4 - -#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE -0 string \377WPC\020\000\000\000\022\012\001\001\000\000\000\000 (WP) loadable file ->15 byte 0 Optimized for Intel ->15 byte 1 Optimized for Non-Intel -1 string WPC (Corel/WP) ->8 short 257 WordPerfect macro ->8 short 258 WordPerfect help file ->8 short 259 WordPerfect keyboard file ->8 short 266 WordPerfect document ->8 short 267 WordPerfect dictionary ->8 short 268 WordPerfect thesaurus ->8 short 269 WordPerfect block ->8 short 270 WordPerfect rectangular block ->8 short 271 WordPerfect column block ->8 short 272 WordPerfect printer data ->8 short 275 WordPerfect printer data ->8 short 276 WordPerfect driver resource data ->8 short 279 WordPerfect hyphenation code ->8 short 280 WordPerfect hyphenation data ->8 short 281 WordPerfect macro resource data ->8 short 283 WordPerfect hyphenation lex ->8 short 285 WordPerfect wordlist ->8 short 286 WordPerfect equation resource data ->8 short 289 WordPerfect spell rules ->8 short 290 WordPerfect dictionary rules ->8 short 295 WordPerfect spell rules (Microlytics) ->8 short 299 WordPerfect settings file ->8 short 301 WordPerfect 4.2 document ->8 short 325 WordPerfect dialog file ->8 short 332 WordPerfect button bar ->8 short 513 Shell macro ->8 short 522 Shell definition ->8 short 769 Notebook macro ->8 short 770 Notebook help file ->8 short 771 Notebook keyboard file ->8 short 778 Notebook definition ->8 short 1026 Calculator help file ->8 short 1538 Calendar help file ->8 short 1546 Calendar data file ->8 short 1793 Editor macro ->8 short 1794 Editor help file ->8 short 1795 Editor keyboard file ->8 short 1817 Editor macro resource file ->8 short 2049 Macro editor macro ->8 short 2050 Macro editor help file ->8 short 2051 Macro editor keyboard file ->8 short 2305 PlanPerfect macro ->8 short 2306 PlanPerfect help file ->8 short 2307 PlanPerfect keyboard file ->8 short 2314 PlanPerfect worksheet ->8 short 2319 PlanPerfect printer definition ->8 short 2322 PlanPerfect graphic definition ->8 short 2323 PlanPerfect data ->8 short 2324 PlanPerfect temporary printer ->8 short 2329 PlanPerfect macro resource data ->8 byte 11 Mail ->8 short 2818 help file ->8 short 2821 distribution list ->8 short 2826 out box ->8 short 2827 in box ->8 short 2836 users archived mailbox ->8 short 2837 archived message database ->8 short 2838 archived attachments ->8 short 3083 Printer temporary file ->8 short 3330 Scheduler help file ->8 short 3338 Scheduler in file ->8 short 3339 Scheduler out file ->8 short 3594 GroupWise settings file ->8 short 3601 GroupWise directory services ->8 short 3627 GroupWise settings file ->8 short 4362 Terminal resource data ->8 short 4363 Terminal resource data ->8 short 4395 Terminal resource data ->8 short 4619 GUI loadable text ->8 short 4620 graphics resource data ->8 short 4621 printer settings file ->8 short 4622 port definition file ->8 short 4623 print queue parameters ->8 short 4624 compressed file ->8 short 5130 Network service msg file ->8 short 5131 Network service msg file ->8 short 5132 Async gateway login msg ->8 short 5134 GroupWise message file ->8 short 7956 GroupWise admin domain database ->8 short 7957 GroupWise admin host database ->8 short 7959 GroupWise admin remote host database ->8 short 7960 GroupWise admin ADS deferment data file ->8 short 8458 IntelliTAG (SGML) compiled DTD ->8 long 18219264 WordPerfect graphic image (1.0) ->8 long 18219520 WordPerfect graphic image (2.0) -#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE - -# Hangul (Korean) Word Processor File -0 string HWP\ Document\ File Hangul (Korean) Word Processor File 3.0 -# From: Won-Kyu Park <wkpark@kldp.org> -512 string R\0o\0o\0t\0 Hangul (Korean) Word Processor File 2000 -!:mime application/x-hwp - -# CosmicBook, from Beno�t Rouits -0 string CSBK Ted Neslson's CosmicBook hypertext file - -2 string EYWR AmigaWriter file - -# chi: file(1) magic for ChiWriter files -0 string \\1cw\ ChiWriter file ->5 string >\0 version %s -0 string \\1cw ChiWriter file - -# Quark Express from http://www.garykessler.net/library/file_sigs.html -2 string IIXPR3 Intel Quark Express Document (English) -2 string IIXPRa Intel Quark Express Document (Korean) -2 string MMXPR3 Motorola Quark Express Document (English) -!:mime application/x-quark-xpress-3 -2 string MMXPRa Motorola Quark Express Document (Korean) - -# adobe indesign (document, whatever...) from querkan -0 belong 0x0606edf5 Adobe InDesign ->16 string DOCUMENT Document - -#------------------------------------------------------------------------------ -# ichitaro456: file(1) magic for Just System Word Processor Ichitaro -# -# Contributor kenzo-: -# Reversed-engineered JS Ichitaro magic numbers -# - -0 string DOC ->43 byte 0x14 Just System Word Processor Ichitaro v4 -!:mime application/x-ichitaro4 ->144 string JDASH application/x-ichitaro4 - -0 string DOC ->43 byte 0x15 Just System Word Processor Ichitaro v5 -!:mime application/x-ichitaro5 - -0 string DOC ->43 byte 0x16 Just System Word Processor Ichitaro v6 -!:mime application/x-ichitaro6 - -# Type: Freemind mindmap documents -# From: Jamie Thompson <debian-bugs@jamie-thompson.co.uk> -0 string/cB \<map\ version Freemind document -!:mime application/x-freemind - -# Type: Scribus -# From: Werner Fink <werner@suse.de> -0 string \<SCRIBUSUTF8\ Version Scribus Document -0 string \<SCRIBUSUTF8NEW\ Version Scribus Document -!:mime application/x-scribus - -#------------------------------------------------------------------------------ -# file(1) magic(5) data for xdelta Josh MacDonald <jmacd@CS.Berkeley.EDU> -# -0 string %XDELTA% XDelta binary patch file 0.14 -0 string %XDZ000% XDelta binary patch file 0.18 -0 string %XDZ001% XDelta binary patch file 0.20 -0 string %XDZ002% XDelta binary patch file 1.0 -0 string %XDZ003% XDelta binary patch file 1.0.4 -0 string %XDZ004% XDelta binary patch file 1.1 - -#------------------------------------------------------------------------------ -# xenix: file(1) magic for Microsoft Xenix -# -# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small -# model" lifted from "magic.xenix", with comment "derived empirically; -# treat as folklore until proven" -# -# "small model", "large model", "huge model" stuff lifted from XXX -# -# XXX - "x.out" collides with PDP-11 archives -# -0 string core core file (Xenix) -0 byte 0x80 8086 relocatable (Microsoft) -0 leshort 0xff65 x.out ->2 string __.SYMDEF randomized ->0 byte x archive -0 leshort 0x206 Microsoft a.out ->8 leshort 1 Middle model ->0x1e leshort &0x10 overlay ->0x1e leshort &0x2 separate ->0x1e leshort &0x4 pure ->0x1e leshort &0x800 segmented ->0x1e leshort &0x400 standalone ->0x1e leshort &0x8 fixed-stack ->0x1c byte &0x80 byte-swapped ->0x1c byte &0x40 word-swapped ->0x10 lelong >0 not-stripped ->0x1e leshort ^0xc000 pre-SysV ->0x1e leshort &0x4000 V2.3 ->0x1e leshort &0x8000 V3.0 ->0x1c byte &0x4 86 ->0x1c byte &0xb 186 ->0x1c byte &0x9 286 ->0x1c byte &0xa 386 ->0x1f byte <0x040 small model ->0x1f byte =0x048 large model ->0x1f byte =0x049 huge model ->0x1e leshort &0x1 executable ->0x1e leshort ^0x1 object file ->0x1e leshort &0x40 Large Text ->0x1e leshort &0x20 Large Data ->0x1e leshort &0x120 Huge Objects Enabled ->0x10 lelong >0 not stripped - -0 leshort 0x140 old Microsoft 8086 x.out ->0x3 byte &0x4 separate ->0x3 byte &0x2 pure ->0 byte &0x1 executable ->0 byte ^0x1 relocatable ->0x14 lelong >0 not stripped - -0 lelong 0x206 b.out ->0x1e leshort &0x10 overlay ->0x1e leshort &0x2 separate ->0x1e leshort &0x4 pure ->0x1e leshort &0x800 segmented ->0x1e leshort &0x400 standalone ->0x1e leshort &0x1 executable ->0x1e leshort ^0x1 object file ->0x1e leshort &0x4000 V2.3 ->0x1e leshort &0x8000 V3.0 ->0x1c byte &0x4 86 ->0x1c byte &0xb 186 ->0x1c byte &0x9 286 ->0x1c byte &0x29 286 ->0x1c byte &0xa 386 ->0x1e leshort &0x4 Large Text ->0x1e leshort &0x2 Large Data ->0x1e leshort &0x102 Huge Objects Enabled - -0 leshort 0x580 XENIX 8086 relocatable or 80286 small model - -#------------------------------------------------------------------------------ -# This is Aaron's attempt at a MAGIC file for Xilinx .bit files. -# Xilinx-Magic@RevRagnarok.com -# Got the info from FPGA-FAQ 0026 -# -# First there is the sync header and its length -0 beshort 0x0009 ->2 belong =0x0ff00ff0 ->>&0 belong =0x0ff00ff0 ->>>&0 beshort =0x0000 ->>>>&0 pstring a Xilinx BIT data -# Next is a Pascal-style string with the NCD name. We want to capture that. ->>>>0x0F pstring x - from %s -# It is followed by a NUL ->>>>>&1 byte 0x00 -# And then 'b' ->>>>>&2 string b -# With the part number: -#>>>>>&5 string 4v (Virtex4) -#>>>>>&5 string 2v (Virtex II -#>>>>>>&0 string !p \b) -#>>>>>>&0 string p Pro) ->>>>>&4 pstring x - for %s -# And then NUL / 'c' / Build Data / NUL / 'd' / Date / NUL / 'e' / Data Length ->>>>>>&1 byte 0x00 ->>>>>>&2 string c ->>>>>>&4 pstring x - built %s ->>>>>>>&1 byte 0x00 ->>>>>>>&2 string d ->>>>>>>&4 pstring x \b(%s) ->>>>>>>>&1 byte 0x00 ->>>>>>>>&2 string e ->>>>>>>>&4 belong x - data length 0x%lx - -#------------------------------------------------------------------------------ -# xo65 object files -# From: "Ullrich von Bassewitz" <uz@cc65.org> -# -0 string \x55\x7A\x6E\x61 xo65 object, ->4 leshort x version %d, ->6 leshort&0x0001 =0x0001 with debug info ->6 leshort&0x0001 =0x0000 no debug info - -# xo65 library files -0 string \x6E\x61\x55\x7A xo65 library, ->4 leshort x version %d - -# o65 object files -0 string \x01\x00\x6F\x36\x35 o65 ->6 leshort&0x1000 =0x0000 executable, ->6 leshort&0x1000 =0x1000 object, ->5 byte x version %d, ->6 leshort&0x8000 =0x8000 65816, ->6 leshort&0x8000 =0x0000 6502, ->6 leshort&0x2000 =0x2000 32 bit, ->6 leshort&0x2000 =0x0000 16 bit, ->6 leshort&0x4000 =0x4000 page reloc, ->6 leshort&0x4000 =0x0000 byte reloc, ->6 leshort&0x0003 =0x0000 alignment 1 ->6 leshort&0x0003 =0x0001 alignment 2 ->6 leshort&0x0003 =0x0002 alignment 4 ->6 leshort&0x0003 =0x0003 alignment 256 - -#------------------------------------------------------------------------------ -# xwindows: file(1) magic for various X/Window system file formats. - -# Compiled X Keymap -# XKM (compiled X keymap) files (including version and byte ordering) -1 string mkx Compiled XKB Keymap: lsb, ->0 byte >0 version %d ->0 byte =0 obsolete -0 string xkm Compiled XKB Keymap: msb, ->3 byte >0 version %d ->0 byte =0 obsolete - -# xfsdump archive -0 string xFSdump0 xfsdump archive ->8 belong x (version %d) - -# Jaleo XFS files -0 long 395726 Jaleo XFS file ->4 long x - version %ld ->8 long x - [%ld - ->20 long x %ldx ->24 long x %ldx ->28 long 1008 YUV422] ->28 long 1000 RGB24] - -# Xcursor data -# X11 mouse cursor format defined in libXcursor, see -# http://www.x.org/archive/X11R6.8.1/doc/Xcursor.3.html -# http://cgit.freedesktop.org/xorg/lib/libXcursor/tree/include/X11/Xcursor/Xcursor.h -0 string Xcur Xcursor data -!:mime image/x-xcursor ->10 leshort x version %hd ->>8 leshort x \b.%hd - -#------------------------------------------------------------------------------ -# zilog: file(1) magic for Zilog Z8000. -# -# Was it big-endian or little-endian? My Product Specification doesn't -# say. -# -0 long 0xe807 object file (z8000 a.out) -0 long 0xe808 pure object file (z8000 a.out) -0 long 0xe809 separate object file (z8000 a.out) -0 long 0xe805 overlay object file (z8000 a.out) - -#------------------------------------------------------------------------------ -# zyxel: file(1) magic for ZyXEL modems -# -# From <rob@pe1chl.ampr.org> -# These are the /etc/magic entries to decode datafiles as used for the -# ZyXEL U-1496E DATA/FAX/VOICE modems. (This header conforms to a -# ZyXEL-defined standard) - -0 string ZyXEL\002 ZyXEL voice data ->10 byte 0 - CELP encoding ->10 byte&0x0B 1 - ADPCM2 encoding ->10 byte&0x0B 2 - ADPCM3 encoding ->10 byte&0x0B 3 - ADPCM4 encoding ->10 byte&0x0B 8 - New ADPCM3 encoding ->10 byte&0x04 4 with resync diff --git a/cloudfiles/share/magic.mgc b/cloudfiles/share/magic.mgc deleted file mode 100644 index 634b6349c47555faef6e39b9a58fba228eca2780..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1775200 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≤41L9iT<Y11EB}o48_r`y&8hU(G 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 as>!X?RM69k*08R&1s|0I8W$Z5>)Qdeg@cv= diff --git a/cloudfiles/share/magic.mime b/cloudfiles/share/magic.mime deleted file mode 100644 index acfede2..0000000 --- a/cloudfiles/share/magic.mime +++ /dev/null @@ -1,1027 +0,0 @@ -# Magic data for KMimeMagic (originally for file(1) command) -# -# Note on adding additional MIME types: -# -# [RFC2045,RFC2046] specifies that Content Types, Content Subtypes, Character -# Sets, Access Types, and conversion values for MIME mail will be assigned and -# listed by the IANA. -# http://www.iana.org/assignments/media-types/ -# -# Any unregistered file type should be listed with a preceding x-, as in -# application/x-foo (RFC2045 5.1), or a x., as in application/x.foo (RFC4288 -# 4.3). Any non x-prefixed type should be registered with IANA and listed at -# the above address. Any other behavior is a MIME standards violation! -# -# It is preferred that when a registered MIME type exists, that -# the registered Content-Type and Subtype be used to refer to a file of -# that type, so don't use application/x-zip when application/zip is -# registered. -# -# If an active RFC suggests that a MIME registration for a new type is in -# progress, make a note of it pointing to that RFC. -# -# The format is 4-5 columns: -# Column #1: byte number to begin checking from, ">" indicates continuation -# Column #2: type of data to match -# Column #3: contents of data to match -# Column #4: MIME type of result -# Column #5: MIME encoding of result (optional) - -#------------------------------------------------------------------------------ -# Localstuff: file(1) magic for locally observed files -# Add any locally observed files here. - -# Real Audio (Magic .ra\0375) -0 belong 0x2e7261fd audio/x-pn-realaudio -0 string .RMF application/vnd.rn-realmedia - -#video/x-pn-realvideo -#video/vnd.rn-realvideo -#application/vnd.rn-realmedia -# sigh, there are many mimes for that but the above are the most common. - -# Taken from magic, converted to magic.mime -# mime types according to http://www.geocities.com/nevilo/mod.htm: -# audio/it .it -# audio/x-zipped-it .itz -# audio/xm fasttracker modules -# audio/x-s3m screamtracker modules -# audio/s3m screamtracker modules -# audio/x-zipped-mod mdz -# audio/mod mod -# audio/x-mod All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z) - -# Taken from loader code from mikmod version 2.14 -# by Steve McIntyre (stevem@chiark.greenend.org.uk) -# <doj@cubic.org> added title printing on 2003-06-24 -0 string MAS_UTrack_V00 ->14 string >/0 audio/x-mod -#audio/x-tracker-module - -#0 string UN05 MikMod UNI format module sound data - -0 string Extended\ Module: audio/x-mod -#audio/x-tracker-module -##>17 string >\0 Title: "%s" - -21 string/c \!SCREAM! audio/x-mod -#audio/x-screamtracker-module -21 string BMOD2STM audio/x-mod -#audio/x-screamtracker-module -1080 string M.K. audio/x-mod -#audio/x-protracker-module -#>0 string >\0 Title: "%s" -1080 string M!K! audio/x-mod -#audio/x-protracker-module -#>0 string >\0 Title: "%s" -1080 string FLT4 audio/x-mod -#audio/x-startracker-module -#>0 string >\0 Title: "%s" -1080 string FLT8 audio/x-mod -#audio/x-startracker-module -#>0 string >\0 Title: "%s" -1080 string 4CHN audio/x-mod -#audio/x-fasttracker-module -#>0 string >\0 Title: "%s" -1080 string 6CHN audio/x-mod -#audio/x-fasttracker-module -#>0 string >\0 Title: "%s" -1080 string 8CHN audio/x-mod -#audio/x-fasttracker-module -#>0 string >\0 Title: "%s" -1080 string CD81 audio/x-mod -#audio/x-oktalyzer-tracker-module -#>0 string >\0 Title: "%s" -1080 string OKTA audio/x-mod -#audio/x-oktalyzer-tracker-module -#>0 string >\0 Title: "%s" -# Not good enough. -#1082 string CH -#>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data -1080 string 16CN audio/x-mod -#audio/x-taketracker-module -#>0 string >\0 Title: "%s" -1080 string 32CN audio/x-mod -#audio/x-taketracker-module -#>0 string >\0 Title: "%s" - -# Impuse tracker module (it) -0 string IMPM audio/x-mod -#>4 string >\0 "%s" -#>40 leshort !0 compatible w/ITv%x -#>42 leshort !0 created w/ITv%x - -#------------------------------------------------------------------------------ -# end local stuff -#------------------------------------------------------------------------------ - -# xml based formats! - -# svg - -38 string \<\!DOCTYPE\040svg image/svg+xml - -0 belong 0xfeedfeed application/x-java-keystore - -0 belong 0xcececece application/x-java-jce-keystore - - -# xml -0 string \<?xml text/xml - - -#------------------------------------------------------------------------------ -# Java - -0 beshort 0xcafe ->2 beshort 0xbabe application/x-java-applet ->2 beshort 0xd00d application/x-java-pack200 - -#------------------------------------------------------------------------------ -# audio: file(1) magic for sound formats -# -# from Jan Nicolai Langfeldt <janl@ifi.uio.no>, -# - -# Sun/NeXT audio data -0 string .snd ->12 belong 1 audio/basic ->12 belong 2 audio/basic ->12 belong 3 audio/basic ->12 belong 4 audio/basic ->12 belong 5 audio/basic ->12 belong 6 audio/basic ->12 belong 7 audio/basic - ->12 belong 23 audio/x-adpcm - -# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format -# that uses little-endian encoding and has a different magic number -# (0x0064732E in little-endian encoding). -0 lelong 0x0064732E ->12 lelong 1 audio/x-dec-basic ->12 lelong 2 audio/x-dec-basic ->12 lelong 3 audio/x-dec-basic ->12 lelong 4 audio/x-dec-basic ->12 lelong 5 audio/x-dec-basic ->12 lelong 6 audio/x-dec-basic ->12 lelong 7 audio/x-dec-basic -# compressed (G.721 ADPCM) ->12 lelong 23 audio/x-dec-adpcm - -# Bytes 0-3 of AIFF, AIFF-C, & 8SVX audio files are "FORM" -# AIFF audio data -8 string AIFF audio/x-aiff -# AIFF-C audio data -8 string AIFC audio/x-aiff -# IFF/8SVX audio data -8 string 8SVX audio/x-aiff - - - -# Creative Labs AUDIO stuff -# Standard MIDI data -0 string MThd audio/x-midi -#>9 byte >0 (format %d) -#>11 byte >1 using %d channels -0 string MThd audio/midi -# Creative Music (CMF) data -0 string CTMF audio/x-unknown -# SoundBlaster instrument data -0 string SBI audio/x-unknown -# Creative Labs voice data -0 string Creative\ Voice\ File audio/x-unknown -## is this next line right? it came this way... -#>19 byte 0x1A -#>23 byte >0 - version %d -#>22 byte >0 \b.%d - -# [GRR 950115: is this also Creative Labs? Guessing that first line -# should be string instead of unknown-endian long...] -#0 long 0x4e54524b MultiTrack sound data -#0 string NTRK MultiTrack sound data -#>4 long x - version %ld - -# Microsoft WAVE format (*.wav) -# [GRR 950115: probably all of the shorts and longs should be leshort/lelong] -# Microsoft RIFF -0 string RIFF -# - WAVE format ->8 string WAVE audio/x-wav ->8 string/B AVI video/x-msvideo -# ->8 string CDRA image/x-coreldraw - -# AAC (aka MPEG-2 NBC) -0 beshort&0xfff6 0xfff0 audio/X-HX-AAC-ADTS -0 string ADIF audio/X-HX-AAC-ADIF -0 beshort&0xffe0 0x56e0 audio/MP4A-LATM -0 beshort 0x4De1 audio/MP4A-LATM - -# MPEG Layer 3 sound files -# modified by Joerg Jenderek -# GRR the original test are too common for many DOS files -# so test 1 <= kbits nibble <= E -0 beshort &0xffe0 ->2 ubyte&0xF0 >0x0F ->>2 ubyte&0xF0 <0xE1 audio/mpeg -#MP3 with ID3 tag -0 string ID3 audio/mpeg -# Ogg/Vorbis -0 string OggS application/ogg - -#------------------------------------------------------------------------------ -# c-lang: file(1) magic for C programs or various scripts -# - -# XPM icons (Greg Roelofs, newt@uchicago.edu) -# ideally should go into "images", but entries below would tag XPM as C source -0 string /*\ XPM image/x-xpmi - -# 3DS (3d Studio files) Conflicts with diff output 0x3d '=' -#16 beshort 0x3d3d image/x-3ds - -# this first will upset you if you're a PL/1 shop... (are there any left?) -# in which case rm it; ascmagic will catch real C programs -# C or REXX program text -#0 string /* text/x-c -# C++ program text -#0 string // text/x-c++ - -#------------------------------------------------------------------------------ -# commands: file(1) magic for various shells and interpreters -# -#0 string :\ shell archive or commands for antique kernel text -0 string #!/bin/sh application/x-shellscript -0 string #!\ /bin/sh application/x-shellscript -0 string #!/bin/csh application/x-shellscript -0 string #!\ /bin/csh application/x-shellscript -# korn shell magic, sent by George Wu, gwu@clyde.att.com -0 string #!/bin/ksh application/x-shellscript -0 string #!\ /bin/ksh application/x-shellscript -0 string #!/bin/tcsh application/x-shellscript -0 string #!\ /bin/tcsh application/x-shellscript -0 string #!/usr/local/tcsh application/x-shellscript -0 string #!\ /usr/local/tcsh application/x-shellscript -0 string #!/usr/local/bin/tcsh application/x-shellscript -0 string #!\ /usr/local/bin/tcsh application/x-shellscript -# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de) -0 string #!/bin/bash application/x-shellscript -0 string #!\ /bin/bash application/x-shellscript -0 string #!/usr/local/bin/bash application/x-shellscript -0 string #!\ /usr/local/bin/bash application/x-shellscript - -# -# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson) -0 string #!/bin/zsh application/x-shellscript -0 string #!/usr/bin/zsh application/x-shellscript -0 string #!/usr/local/bin/zsh application/x-shellscript -0 string #!\ /usr/local/bin/zsh application/x-shellscript -0 string #!/usr/local/bin/ash application/x-shellscript -0 string #!\ /usr/local/bin/ash application/x-shellscript -#0 string #!/usr/local/bin/ae Neil Brown's ae -#0 string #!\ /usr/local/bin/ae Neil Brown's ae -0 string #!/bin/nawk application/x-nawk -0 string #!\ /bin/nawk application/x-nawk -0 string #!/usr/bin/nawk application/x-nawk -0 string #!\ /usr/bin/nawk application/x-nawk -0 string #!/usr/local/bin/nawk application/x-nawk -0 string #!\ /usr/local/bin/nawk application/x-nawk -0 string #!/bin/gawk application/x-gawk -0 string #!\ /bin/gawk application/x-gawk -0 string #!/usr/bin/gawk application/x-gawk -0 string #!\ /usr/bin/gawk application/x-gawk -0 string #!/usr/local/bin/gawk application/x-gawk -0 string #!\ /usr/local/bin/gawk application/x-gawk -# -0 string #!/bin/awk application/x-awk -0 string #!\ /bin/awk application/x-awk -0 string #!/usr/bin/awk application/x-awk -0 string #!\ /usr/bin/awk application/x-awk -# update to distinguish from *.vcf files by Joerg Jenderek: joerg dot jenderek at web dot de -# Too general, \EBEGIN matches in postscript -#0 regex BEGIN[[:space:]]*[{] application/x-awk - -# For Larry Wall's perl language. The ``eval'' line recognizes an -# outrageously clever hack for USG systems. -# Keith Waclena <keith@cerberus.uchicago.edu> -0 string #!/bin/perl application/x-perl -0 string #!\ /bin/perl application/x-perl -0 string eval\ "exec\ /bin/perl application/x-perl -0 string #!/usr/bin/perl application/x-perl -0 string #!\ /usr/bin/perl application/x-perl -0 string eval\ "exec\ /usr/bin/perl application/x-perl -0 string #!/usr/local/bin/perl application/x-perl -0 string #!\ /usr/local/bin/perl application/x-perl -0 string eval\ "exec\ /usr/local/bin/perl application/x-perl - -# Type: Lua scripting language -# URL: http://www.lua.org/ -# From: Reuben Thomas <rrt@sc3d.org> -0 string/B #!\ /usr/bin/lua application/x-lua -0 string/B #!\ /usr/local/bin/lua application/x-lua -0 string #!/usr/bin/env\ lua application/x-lua -0 string #!\ /usr/bin/env\ lua application/x-lua - -#------------------------------------------------------------------------------ -# compress: file(1) magic for pure-compression formats (no archives) -# -# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, whap, etc. -# -# Formats for various forms of compressed data -# Formats for "compress" proper have been moved into "compress.c", -# because it tries to uncompress it to figure out what's inside. - -# standard unix compress -#0 string \037\235 application/x-compress - -# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver) -0 string \037\213 application/x-gzip - -0 string PK\003\004 application/zip - -# RAR archiver (Greg Roelofs, newt@uchicago.edu) -0 string Rar! application/x-rar - -# According to gzip.h, this is the correct byte order for packed data. -0 string \037\036 application/octet-stream -# -# This magic number is byte-order-independent. -# -0 short 017437 application/octet-stream - -# XXX - why *two* entries for "compacted data", one of which is -# byte-order independent, and one of which is byte-order dependent? -# -# compacted data -0 short 0x1fff application/octet-stream -0 string \377\037 application/octet-stream -# huf output -0 short 0145405 application/octet-stream - -# Squeeze and Crunch... -# These numbers were gleaned from the Unix versions of the programs to -# handle these formats. Note that I can only uncrunch, not crunch, and -# I didn't have a crunched file handy, so the crunch number is untested. -# Keith Waclena <keith@cerberus.uchicago.edu> -#0 leshort 0x76FF squeezed data (CP/M, DOS) -#0 leshort 0x76FE crunched data (CP/M, DOS) - -# Freeze -#0 string \037\237 Frozen file 2.1 -#0 string \037\236 Frozen file 1.0 (or gzip 0.5) - -# lzh? -#0 string \037\240 LZH compressed data - -257 string ustar\0 application/x-tar posix -257 string ustar\040\040\0 application/x-tar gnu - -0 short 070707 application/x-cpio -0 short 0143561 application/x-cpio swapped - -0 string =<ar> application/x-archive -0 string \!<arch> application/x-archive ->8 string debian application/x-debian-package - -#------------------------------------------------------------------------------ -# -# RPM: file(1) magic for Red Hat Packages Erik Troan (ewt@redhat.com) -# -0 beshort 0xedab ->2 beshort 0xeedb application/x-rpm - -0 lelong&0x8080ffff 0x0000081a application/x-arc lzw -0 lelong&0x8080ffff 0x0000091a application/x-arc squashed -0 lelong&0x8080ffff 0x0000021a application/x-arc uncompressed -0 lelong&0x8080ffff 0x0000031a application/x-arc packed -0 lelong&0x8080ffff 0x0000041a application/x-arc squeezed -0 lelong&0x8080ffff 0x0000061a application/x-arc crunched - -0 leshort 0xea60 application/x-arj - -# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu) -2 string -lh0- application/x-lharc lh0 -2 string -lh1- application/x-lharc lh1 -2 string -lz4- application/x-lharc lz4 -2 string -lz5- application/x-lharc lz5 -# [never seen any but the last; -lh4- reported in comp.compression:] -2 string -lzs- application/x-lha lzs -2 string -lh\ - application/x-lha lh -2 string -lhd- application/x-lha lhd -2 string -lh2- application/x-lha lh2 -2 string -lh3- application/x-lha lh3 -2 string -lh4- application/x-lha lh4 -2 string -lh5- application/x-lha lh5 -2 string -lh6- application/x-lha lh6 -2 string -lh7- application/x-lha lh7 -# Shell archives -10 string #\ This\ is\ a\ shell\ archive application/octet-stream x-shell - -#------------------------------------------------------------------------------ -# frame: file(1) magic for FrameMaker files -# -# This stuff came on a FrameMaker demo tape, most of which is -# copyright, but this file is "published" as witness the following: -# -# Note that this is the Framemaker Maker Interchange Format, not the -# Normal format which would be application/vnd.framemaker. -# -0 string \<MakerFile application/x-mif -0 string \<MIFFile application/x-mif -0 string \<MakerDictionary application/x-mif -0 string \<MakerScreenFon application/x-mif -0 string \<MML application/x-mif -0 string \<Book application/x-mif -0 string \<Maker application/x-mif - -#------------------------------------------------------------------------------ -# html: file(1) magic for HTML (HyperText Markup Language) docs -# -# from Michael Piefel <piefel@debian.org> -# -0 string/cB \<!DOCTYPE\ html text/html -0 string/cb \<head text/html -0 string/cb \<title text/html -0 string/bc \<html text/html -0 string \<!-- text/html -0 string/c \<h1 text/html - -#------------------------------------------------------------------------------ -# images: file(1) magic for image formats (see also "c-lang" for XPM bitmaps) -# -# originally from jef@helios.ee.lbl.gov (Jef Poskanzer), -# additions by janl@ifi.uio.no as well as others. Jan also suggested -# merging several one- and two-line files into here. -# -# XXX - byte order for GIF and TIFF fields? -# [GRR: TIFF allows both byte orders; GIF is probably little-endian] -# - -# [GRR: what the hell is this doing in here?] -#0 string xbtoa btoa'd file - -# PBMPLUS -# PBM file -0 string P1 image/x-portable-bitmap -# PGM file -0 string P2 image/x-portable-greymap -# PPM file -0 string P3 image/x-portable-pixmap -# PBM "rawbits" file -0 string P4 image/x-portable-bitmap -# PGM "rawbits" file -0 string P5 image/x-portable-greymap -# PPM "rawbits" file -0 string P6 image/x-portable-pixmap - -# NIFF (Navy Interchange File Format, a modification of TIFF) -# [GRR: this *must* go before TIFF] -0 string IIN1 image/x-niff - -# TIFF and friends -# TIFF file, big-endian -0 string MM image/tiff -# TIFF file, little-endian -0 string II image/tiff - -# possible GIF replacements; none yet released! -# (Greg Roelofs, newt@uchicago.edu) -# -# GRR 950115: this was mine ("Zip GIF"): -# ZIF image (GIF+deflate alpha) -0 string GIF94z image/x-unknown -# -# GRR 950115: this is Jeremy Wohl's Free Graphics Format (better): -# FGF image (GIF+deflate beta) -0 string FGF95a image/x-unknown -# -# GRR 950115: this is Thomas Boutell's Portable Bitmap Format proposal -# (best; not yet implemented): -# PBF image (deflate compression) -0 string PBF image/x-unknown - -# GIF -0 string GIF image/gif - -# JPEG images -0 beshort 0xffd8 image/jpeg - -# PC bitmaps (OS/2, Windoze BMP files) (Greg Roelofs, newt@uchicago.edu) -0 string BM image/x-ms-bmp -#>14 byte 12 (OS/2 1.x format) -#>14 byte 64 (OS/2 2.x format) -#>14 byte 40 (Windows 3.x format) -#0 string IC icon -#0 string PI pointer -#0 string CI color icon -#0 string CP color pointer -#0 string BA bitmap array - -# CDROM Filesystems -32769 string CD001 application/x-iso9660-image - -# Newer StuffIt archives (grant@netbsd.org) -0 string StuffIt application/x-stuffit -#>162 string >0 : %s - -# BinHex is the Macintosh ASCII-encoded file format (see also "apple") -# Daniel Quinlan, quinlan@yggdrasil.com -11 string must\ be\ converted\ with\ BinHex\ 4 application/mac-binhex40 -##>41 string x \b, version %.3s - - -#------------------------------------------------------------------------------ -# lisp: file(1) magic for lisp programs -# -# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com) -0 string ;; text/plain -# Emacs 18 - this is always correct, but not very magical. -0 string \012( application/x-elc -# Emacs 19 -0 string ;ELC\023\000\000\000 application/x-elc - -#------------------------------------------------------------------------------ -# mail.news: file(1) magic for mail and news -# -# There are tests to ascmagic.c to cope with mail and news. -0 string Relay-Version: message/rfc822 -0 string #!\ rnews message/rfc822 -0 string N#!\ rnews message/rfc822 -0 string Forward\ to message/rfc822 -0 string Pipe\ to message/rfc822 -0 string Return-Path: message/rfc822 -0 string Received: message/rfc822 -0 string Path: message/news -0 string Xref: message/news -0 string From: message/rfc822 -0 string Article message/news -#------------------------------------------------------------------------------ -# msword: file(1) magic for MS Word files -# -# Contributor claims: -# Reversed-engineered MS Word magic numbers -# - -0 string \376\067\0\043 application/msword -# disable this one because it applies also to other -# Office/OLE documents for which msword is not correct. See PR#2608. -# from magic file of the apache -#0 string \320\317\021\340\241\261 application/msword -512 string \354\245\301 application/msword -0 string \333\245-\0\0\0 application/msword - - - -#------------------------------------------------------------------------------ -# printer: file(1) magic for printer-formatted files -# - -# PostScript -0 string %! application/postscript -0 string \004%! application/postscript - -# Acrobat -# (due to clamen@cs.cmu.edu) -0 string %PDF- application/pdf - -#------------------------------------------------------------------------------ -# sc: file(1) magic for "sc" spreadsheet -# -38 string Spreadsheet application/x-sc - -#------------------------------------------------------------------------------ -# tex: file(1) magic for TeX files -# -# XXX - needs byte-endian stuff (big-endian and little-endian DVI?) -# -# From <conklin@talisman.kaleida.com> - -# Although we may know the offset of certain text fields in TeX DVI -# and font files, we can't use them reliably because they are not -# zero terminated. [but we do anyway, christos] -0 string \367\002 application/x-dvi -#0 string \367\203 TeX generic font data -#0 string \367\131 TeX packed font data -#0 string \367\312 TeX virtual font data -#0 string This\ is\ TeX, TeX transcript text -#0 string This\ is\ METAFONT, METAFONT transcript text - -# There is no way to detect TeX Font Metric (*.tfm) files without -# breaking them apart and reading the data. The following patterns -# match most *.tfm files generated by METAFONT or afm2tfm. -2 string \000\021 application/x-tex-tfm -2 string \000\022 application/x-tex-tfm -#>34 string >\0 (%s) - -# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com) -0 string \\input\ texinfo text/x-texinfo -0 string This\ is\ Info\ file text/x-info - -# correct TeX magic for Linux (and maybe more) -# from Peter Tobias (tobias@server.et-inf.fho-emden.de) -# -0 leshort 0x02f7 application/x-dvi - -# RTF - Rich Text Format -0 string {\\rtf text/rtf - -# TeX documents, from Daniel Quinlan (quinlan@yggdrasil.com) -0 search/400 \\input text/x-tex -0 search/400 \\section text/x-tex -0 search/400 \\setlength text/x-tex -0 search/400 \\documentstyle text/x-tex -0 search/400 \\chapter text/x-tex -0 search/400 \\documentclass text/x-tex - -# Type: Inform interactive fiction language -# URL: http://www.inform-fiction.org/ -# From: Reuben Thomas <rrt@sc3d.org> -0 regex [Cc]onstant[[:space:]]+[Ss]tory text/x-inform - -#------------------------------------------------------------------------------ -# animation: file(1) magic for animation/movie formats -# -# animation formats, originally from vax@ccwf.cc.utexas.edu (VaX#n8) -# MPEG file -# MPEG sequences -0 belong 0x000001BA ->4 byte &0x40 video/mp2p ->4 byte ^0x40 video/mpeg -0 belong 0x000001BB video/mpeg -0 belong 0x000001B0 video/mp4v-es -0 belong 0x000001B5 video/mp4v-es -0 belong 0x000001B3 video/mpv -0 belong&0xFF5FFF1F 0x47400010 video/mp2t -0 belong 0x00000001 ->4 byte&0x1F 0x07 video/h264 - -# FLI animation format -0 leshort 0xAF11 video/x-fli -# FLC animation format -0 leshort 0xAF12 video/x-flc -# -# SGI and Apple formats -# Added ISO mimes -0 string MOVI video/x-sgi-movie -4 string moov video/quicktime -4 string mdat video/quicktime -4 string wide video/quicktime -4 string skip video/quicktime -4 string free video/quicktime -4 string idsc image/x-quicktime -4 string idat image/x-quicktime -4 string pckg application/x-quicktime-player -4 string/B jP image/jp2 -4 string ftyp ->8 string isom video/mp4 ->8 string mp41 video/mp4 ->8 string mp42 video/mp4 ->8 string/B jp2 image/jp2 ->8 string 3gp video/3gpp ->8 string avc1 video/3gpp ->8 string mmp4 video/mp4 ->8 string/B M4A audio/mp4 ->8 string/B M4V video/mp4 ->8 string/B qt video/quicktime -# The contributor claims: -# I couldn't find a real magic number for these, however, this -# -appears- to work. Note that it might catch other files, too, -# so BE CAREFUL! -# -# Note that title and author appear in the two 20-byte chunks -# at decimal offsets 2 and 22, respectively, but they are XOR'ed with -# 255 (hex FF)! DL format SUCKS BIG ROCKS. -# -# DL file version 1 , medium format (160x100, 4 images/screen) -0 byte 1 video/x-unknown -0 byte 2 video/x-unknown -# -# Databases -# -# GDBM magic numbers -# Will be maintained as part of the GDBM distribution in the future. -# <downsj@teeny.org> -0 belong 0x13579ace application/x-gdbm -0 lelong 0x13579ace application/x-gdbm -0 string GDBM application/x-gdbm -# -0 belong 0x061561 application/x-dbm -# -# Executables -# -0 string \177ELF ->16 leshort 0 application/octet-stream ->16 leshort 1 application/x-object ->16 leshort 2 application/x-executable ->16 leshort 3 application/x-sharedlib ->16 leshort 4 application/x-coredump ->16 beshort 0 application/octet-stream ->16 beshort 1 application/x-object ->16 beshort 2 application/x-executable ->16 beshort 3 application/x-sharedlib ->16 beshort 4 application/x-coredump -# -# DOS -0 string MZ application/x-dosexec -# -# KDE -0 string [KDE\ Desktop\ Entry] application/x-kdelnk -0 string #\ KDE\ Config\ File application/x-kdelnk -# xmcd database file for kscd -0 string #\ xmcd text/x-xmcd - -#------------------------------------------------------------------------------ -# pkgadd: file(1) magic for SysV R4 PKG Datastreams -# -0 string #\ PaCkAgE\ DaTaStReAm application/x-svr4-package - -#PNG Image Format -0 string \x89PNG image/png - -# MNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/> -0 string \x8aMNG video/x-mng -0 string \x8aJNG video/x-jng - -#------------------------------------------------------------------------------ -# Hierarchical Data Format, used to facilitate scientific data exchange -# specifications at http://hdf.ncsa.uiuc.edu/ -#Hierarchical Data Format (version 4) data -0 belong 0x0e031301 application/x-hdf -#Hierarchical Data Format (version 5) data -0 string \211HDF\r\n\032 application/x-hdf - -# Adobe Photoshop -0 string 8BPS image/vnd.adobe.photoshop - -# Felix von Leitner <felix-file@fefe.de> -0 string d8:announce application/x-bittorrent - - -# lotus 1-2-3 document -0 belong 0x00001a00 application/x-123 -0 belong 0x00000200 application/x-123 - -# MS Access database -4 string Standard\ Jet\ DB application/x-msaccess - -## magic for XBase files -#0 byte 0x02 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x03 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x04 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x05 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x30 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x43 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x7b -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x83 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x8b -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x8e -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0xb3 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0xf5 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 leshort 0x0006 application/x-dbt - -# Debian has entries for the old PGP formats: -# pgp: file(1) magic for Pretty Good Privacy -# see http://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html -#0 beshort 0x9900 application/x-pgp-keyring -#0 beshort 0x9501 application/x-pgp-keyring -#0 beshort 0x9500 application/x-pgp-keyring -#0 beshort 0xa600 application/pgp-encrypted -#0 string -----BEGIN\040PGP text/PGP armored data -#>15 string PUBLIC\040KEY\040BLOCK- public key block -#>15 string MESSAGE- message -#>15 string SIGNED\040MESSAGE- signed message -#>15 string PGP\040SIGNATURE- signature -#0 beshort 0x8501 data -#text/PGP key public ring -0 beshort 0x9900 application/pgp -#text/PGP key security ring -0 beshort 0x9501 application/pgp -#text/PGP key security ring -0 beshort 0x9500 application/pgp -#text/PGP encrypted data -0 beshort 0xa600 application/pgp-encrypted -#text/PGP armored data -##public key block -2 string ---BEGIN\ PGP\ PUBLIC\ KEY\ BLOCK- application/pgp-keys -0 string -----BEGIN\040PGP\40MESSAGE- application/pgp -0 string -----BEGIN\040PGP\40SIGNATURE- application/pgp-signature - -# -# GnuPG Magic: -# -#0 beshort 0x9901 application/x-gnupg-keyring -#0 beshort 0x8501 text/OpenPGP data -#text/GnuPG key public ring -0 beshort 0x9901 application/pgp -#text/OpenPGP data -0 beshort 0x8501 application/pgp-encrypted - -# flash: file(1) magic for Macromedia Flash file format -# -# See -# -# http://www.macromedia.com/software/flash/open/ -# -0 string FWS ->3 byte x application/x-shockwave-flash -# Flash Video -0 string FLV video/x-flv - - -# The following paramaters are created for Namazu. -# <http://www.namazu.org/> -# -# 1999/08/13 -#0 string \<!--\ MHonArc text/html; x-type=mhonarc -0 string BZh application/x-bzip2 - -# 1999/09/09 -# VRML (suggested by Masao Takaku) -0 string #VRML\ V1.0\ ascii model/vrml -0 string #VRML\ V2.0\ utf8 model/vrml - -#------------------------------------------------------------------------------ -# ichitaro456: file(1) magic for Just System Word Processor Ichitaro -# -# Contributor kenzo-: -# Reversed-engineered JS Ichitaro magic numbers -# - -0 string DOC ->43 byte 0x14 application/x-ichitaro4 ->144 string JDASH application/x-ichitaro4 - -0 string DOC ->43 byte 0x15 application/x-ichitaro5 - -0 string DOC ->43 byte 0x16 application/x-ichitaro6 - -#------------------------------------------------------------------------------ -# office97: file(1) magic for MicroSoft Office files -# -# Contributor kenzo-: -# Reversed-engineered MS Office magic numbers -# - -#0 string \320\317\021\340\241\261\032\341 -#>48 byte 0x1B application/excel - -2080 string Microsoft\ Excel\ 5.0\ Worksheet application/vnd.ms-excel -2114 string Biff5 application/vnd.ms-excel - -0 string \224\246\056 application/msword - -0 belong 0x31be0000 application/msword - -0 string PO^Q` application/msword - -0 string \320\317\021\340\241\261\032\341 ->546 string bjbj application/msword ->546 string jbjb application/msword - -512 string R\0o\0o\0t\0\ \0E\0n\0t\0r\0y application/msword - -2080 string Microsoft\ Word\ 6.0\ Document application/msword -2080 string Documento\ Microsoft\ Word\ 6 application/msword -2112 string MSWordDoc application/msword - -#0 string \320\317\021\340\241\261\032\341 application/powerpoint -0 string \320\317\021\340\241\261\032\341 application/msword - -0 string #\ PaCkAgE\ DaTaStReAm application/x-svr4-package - - -# WinNT/WinCE PE files (Warner Losh, imp@village.org) -# -128 string PE\000\000 application/octet-stream -0 string PE\000\000 application/octet-stream - -# miscellaneous formats -0 string LZ application/octet-stream - -# DOS device drivers by Joerg Jenderek -0 belong 0xffffffff application/octet-stream - -# .EXE formats (Greg Roelofs, newt@uchicago.edu) -# -0 string MZ ->24 string @ application/octet-stream - -0 string MZ ->30 string Copyright\ 1989-1990\ PKWARE\ Inc. application/zip - -0 string MZ ->30 string PKLITE\ Copr. application/zip - -0 string MZ ->36 string LHa's\ SFX application/x-lha - -0 string MZ application/octet-stream - -# LHA archiver -2 string -lh ->6 string - application/x-lha - - -# Zoo archiver -20 lelong 0xfdc4a7dc application/x-zoo - -# ARC archiver -0 lelong&0x8080ffff 0x0000081a application/x-arc -0 lelong&0x8080ffff 0x0000091a application/x-arc -0 lelong&0x8080ffff 0x0000021a application/x-arc -0 lelong&0x8080ffff 0x0000031a application/x-arc -0 lelong&0x8080ffff 0x0000041a application/x-arc -0 lelong&0x8080ffff 0x0000061a application/x-arc - -# Microsoft Outlook's Transport Neutral Encapsulation Format (TNEF) -0 lelong 0x223e9f78 application/vnd.ms-tnef - -# From: stephane.loeuillet@tiscali.f -# http://www.djvuzone.org/ -0 string AT&TFORM image/vnd.djvu - -# Danny Milosavljevic <danny.milo@gmx.net> -# this are adrift (adventure game standard) game files, extension .taf -# depending on version magic continues with 0x93453E6139FA (V 4.0) -# 0x9445376139FA (V 3.90) -# 0x9445366139FA (V 3.80) -# this is from source (http://www.adrift.org.uk/) and I have some taf -# files, and checked them. -#0 belong 0x3C423FC9 -#>4 belong 0x6A87C2CF application/x-adrift -#0 string \000\000\001\000 image/x-ico - -# Quark Xpress 3 Files: -# (made the mimetype up) -0 string \0\0MMXPR3\0 application/x-quark-xpress-3 - -# EET archive -# From: Tilman Sauerbeck <tilman@code-monkey.de> -0 belong 0x1ee7ff00 application/x-eet - -# From: Denis Knauf, via gentoo. -0 string fLaC audio/x-flac -0 string CWS application/x-shockwave-flash - -# Hangul Document Files: -# Reversed-engineered HWP magic numbers -# From: Won-Kyu Park <wkpark@kldp.org> -512 string R\0o\0o\0t\0 application/x-hwp - -0 string/c BEGIN:VCARD text/x-vcard -0 string WordPro\0 application/vnd.lotus-wordpro -0 string WordPro\r\373 application/vnd.lotus-wordpro -0 string CPC\262 image/x-cpi - -# -128 string DICM application/dicom - -# Symbian installation files -8 lelong 0x10000419 application/vnd.symbian.install -0 lelong 0x10201A7A x-epoc/x-sisx-app -# FORTRAN source -0 string/c c\ text/x-fortran - -# Gnumeric spreadsheet -# This entry is only semi-helpful, as Gnumeric compresses its files, so -# they will ordinarily reported as "compressed", but at least -z helps -39 string =<gmr:Workbook application/x-gnumeric diff --git a/cloudfiles/share/magic.mime.mgc b/cloudfiles/share/magic.mime.mgc deleted file mode 100644 index 62c2a3f9b1f1c30b7aea2f24ca2826e32dfbade1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42624 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 T3fI5ju?4v;2C)&9q||-@-U8t$ diff --git a/voce-settings.php b/voce-settings.php index 88f2de2..6a94205 100644 --- a/voce-settings.php +++ b/voce-settings.php @@ -61,7 +61,7 @@ if (!class_exists('Voce_Settings')) { * @param string $extra_args extra args to pass to the callback * @return void */ - function add_settings_field($id, $label, $display_callback, $page, $section, $extra_args = null) { + public function add_settings_field($id, $label, $display_callback, $page, $section, $extra_args = null) { $args = array( 'id' => $id, @@ -89,7 +89,7 @@ if (!class_exists('Voce_Settings')) { * @param string $args * @return string checkbox */ - function field_checkbox($args) { + public function field_checkbox($args) { $options = get_option($this->option_name); $defaults = array('prepend_field' => '', 'append_field' => '', 'class' => ''); @@ -112,107 +112,107 @@ if (!class_exists('Voce_Settings')) { ); } - /** - * input type text callback for settings API - * - * @param string $args - * @return string input - */ - function field_input($args) { - $options = get_option($this->option_name); - - $defaults = array('prepend_field' => '', 'append_field' => '', 'class' => 'regular-text', 'type' => 'text'); - $args = wp_parse_args($args, $defaults); - extract($args); - - $description = (isset($description) && $description) ? sprintf('<p><span class="description">%s</span></p>', $description) : ''; - - if (!isset($value)) { - if (isset($options[$id])) { - $value = $options[$id]; - } else { - $value = ''; - } - } + /** + * input type text callback for settings API + * + * @param string $args + * @return string input + */ + public function field_input($args) { + $options = get_option($this->option_name); - echo sprintf( - "%s<input id='%s' name='{$this->option_name}[%s]' type='%s' class='%s' value='%s' />%s%s", - $prepend_field, - $id, - $id, - $type, - $class, - esc_attr($value), - $append_field, - $description - ); + $defaults = array('prepend_field' => '', 'append_field' => '', 'class' => 'regular-text', 'type' => 'text'); + $args = wp_parse_args($args, $defaults); + extract($args); + + $description = (isset($description) && $description) ? sprintf('<p><span class="description">%s</span></p>', $description) : ''; + + if (!isset($value)) { + if (isset($options[$id])) { + $value = $options[$id]; + } else { + $value = ''; + } } - /** - * textarea callback for settings API - * - * @param string $args - * @return string textarea - */ - function field_textarea($args) { - $options = get_option($this->option_name); - $id = $args['id']; + echo sprintf( + "%s<input id='%s' name='{$this->option_name}[%s]' type='%s' class='%s' value='%s' />%s%s", + $prepend_field, + $id, + $id, + $type, + $class, + esc_attr($value), + $append_field, + $description + ); + } - $defaults = array('prepend_field' => '', 'append_field' => '', 'columns' => 40, 'rows' => 8, 'class' => 'large-text'); - $args = wp_parse_args($args, $defaults); - extract($args); + /** + * textarea callback for settings API + * + * @param string $args + * @return string textarea + */ + public function field_textarea($args) { + $options = get_option($this->option_name); + $id = $args['id']; - $description = (isset($description) && $description) ? sprintf('<p><span class="description">%s</span></p>', $description) : ''; + $defaults = array('prepend_field' => '', 'append_field' => '', 'columns' => 40, 'rows' => 8, 'class' => 'large-text'); + $args = wp_parse_args($args, $defaults); + extract($args); - echo sprintf( - "%s<textarea id='%s' name='{$this->option_name}[%s]' columns='%s' rows='%s' class='%s' />%s</textarea>%s%s", - $prepend_field, - $id, - $id, - $columns, - $rows, - $class, - esc_attr($options[$id]), - $append_field, - $description - ); - } + $description = (isset($description) && $description) ? sprintf('<p><span class="description">%s</span></p>', $description) : ''; - function field_radio($args) { - $options = get_option($this->option_name); - $id = $args['id']; + echo sprintf( + "%s<textarea id='%s' name='{$this->option_name}[%s]' columns='%s' rows='%s' class='%s' />%s</textarea>%s%s", + $prepend_field, + $id, + $id, + $columns, + $rows, + $class, + esc_attr($options[$id]), + $append_field, + $description + ); + } - $defaults = array('type' => 'radio', 'class' => ''); - $args = wp_parse_args($args, $defaults); - extract($args); + public function field_radio($args) { + $options = get_option($this->option_name); + $id = $args['id']; - if (!$items) { - return; - } + $defaults = array('type' => 'radio', 'class' => ''); + $args = wp_parse_args($args, $defaults); + extract($args); + + if (!$items) { + return; + } - echo '<fieldset><p>'; - foreach ($items as $item) { - if (!empty($options[$id])) { - $checked = checked($options[$id], $item['value'], false); - } else { - $checked = false; - } - - echo sprintf( - "<label> <input id='%s' name='{$this->option_name}[%s]' type='%s', class='%s' value='%s' %s /> %s</label><br />", - $id, - $id, - $type, - $class, - esc_attr($item['value']), - $checked, - esc_html($item['text']) - ); + echo '<fieldset><p>'; + foreach ($items as $item) { + if (!empty($options[$id])) { + $checked = checked($options[$id], $item['value'], false); + } else { + $checked = false; } - echo '</fieldset></p>'; - $description = (isset($description) && $description) ? sprintf('<p><span class="description">%s</span></p>', $description) : ''; - echo $description; + echo sprintf( + "<label> <input id='%s' name='{$this->option_name}[%s]' type='%s', class='%s' value='%s' %s /> %s</label><br />", + $id, + $id, + $type, + $class, + esc_attr($item['value']), + $checked, + esc_html($item['text']) + ); } + echo '</fieldset></p>'; + + $description = (isset($description) && $description) ? sprintf('<p><span class="description">%s</span></p>', $description) : ''; + echo $description; + } } } \ No newline at end of file -- GitLab